1. mybatis的n+1(1次主查询会伴随着n次副查询,即collection查询)
场景:要查询Meeting对象,同时需要关联查询出每一个meeting对象对应的List
1 |
|
1 |
|
1 |
|
查询优化:使用left join关联查询,而不是多次查询。前提是查询中需要使用as注明字段的名称,方可通过下面的方式进行一一匹配
1 | <select id="questMeeting" resultMap="meetingFileMap"> |
其中:
property:子查询返回的结果集
column:子查询时所需要的查询条件
select:子查询的sql对应的id
但这种方式不适合加上分页条件,即如果查询的结果需要使用分页,则不能使用该方式。
另:将查询出的结果作为另一个查询的条件:
1 | <collection property="systemId" column="{pid=id}" select="getAllSystemByUserId"/> |
2.Mybatis Plus and与or并用情况
1 | Dimension one = this.getOne(Wrappers.<Dimension>lambdaQuery() |
3.minio文件服务器
1 |
|
下载:从minio下载文件时,注意文件的路径,即objectName参数不是文件的全路径,而只是文件的相对路径。
eg:http://172.16.16.222:9000/mxzf/public/image/20200429/1588144931194000854/test.jpg的test.jpg图片,通过minio下载的话。objectName参数应该为:public/image/20200429/1588144931194000854/test.jpg。
而类似http://172.16.16.222:9000/mxzf/public/image/20200429/1588144931194000854/test.jpg这种资源路径,可以直接通过:
1 | URL image = new URL("http://172.16.16.222:9000/mxzf/public/image/20200429/1588144931194000854/test.jpg"); |
这种直接获取对应的文件信息。
4.多字段排序问题
实际场景:获取会议信息时,有根据创建时间排序,会议开始时间排序的需求,如果在sql语句层面去解决,需要进行多次判断,且不易维护。
解决措施:在Vo实体类中建立容器:LinkedHashSet
1 | public class MeetPageVo extends PageRequest { |
然后在业务层进行设置:
1 | LinkedHashSet<MeetPageVo.Sort> sorts = meetPageVo.getSorts(); |
在sql层进行拼接:
1 | order by |