mybatis 单表查询非常方便,可以自己通过条件构造器快速配置查询条件,无需sql代码。但是多表关联查询时,却不是很方便,往往需要在mapper.xml配置select。有的情况下,这样写就会觉得冗余繁琐。
解决方法:
在mapper中写方法,用@select 注解
@select("select * from table1 left join table2 on table1.id = table2.id ${ew.customSqlSegment}")
Page<Model> pageModel(Page page, @Param("ew") Wrapper wrapper)
1.关联查询时需要获取主表全部字段,其它关联表只要几个字段,且查询条件也只是主表单表的。
这种情况下,可以直接用LambdaQuery 构造好查询条件,然后调用mapper方法时,传LambdaQuery 即可。
mapper.pageModel(Page page, this.lambdaQuery().eq()...)
2.关联查询获取多个表字段数据,且条件为多个表
这种情况下,只能使用QueryWrapper,使用别名.字段的方式去组装查询条件,注意此处表别名要和mapper中的@select注解中的别名一致,且字段为数据库表字段名(而非对象属性名)。