mybatis-plus之⾃定义sql、分页
⾃定义sql也想使⽤Wrapper构建?那这时候就要如下使⽤,先看定义好的部分常量:
这⾥只挑三个说明⼀下:
ew.customSqlSegment
对应条件构造器⾥的条件
ew.sqlSet
update是所设置的列
ew.sqlSelect
query时所选的列
例⼦:
@Select("SELECT u.* FROM USER u LEFT JOIN `role-user` ru ON u.id=ru.user_id LEFT JOIN role r ON r.le_id ${ew.customSqlSegment}") List<User> findFreash(@Param(Constants.WRAPPER)Wrapper wrapper);
@Select("select ${ew.sqlSelect} from user ${ew.customSqlSegment} ")
List<User> testSqlSelect(@Param(Constants.WRAPPER)Wrapper wrapper);
@Update("update `role-user` set ${ew.sqlSet} ${ew.customSqlSegment}")
int testSqlSet(@Param(Constants.WRAPPER)Wrapper wrapper);
主要是多对多的⼀个简单的⾓⾊表对应模型,相应的使⽤例⼦
userDao.findFreash(Wrappers.query().gt("u.age",19).eq("r.id",1)).forEach(System.out::println);
对应的sql语句:
select u.* from user u left join `role-user` ru on u.id=ru.user_id left join role r on r.le_id where u.age > ? and r.id = ?
select name,age from user where email like ?
update `role-user` set role_id =? where user_id = ?
虽然是在UserDao⾥⾯,但还是可以根据⾃定义的sql语句来操作其他表,这样就不⽤为操作少量数据⽽构造多⼀个类的代码了,具体其他常量可以⾃⾏尝试
下⾯说⼀下分页配置,如果是简单分页配置,直接新建⼀个配置类,然后注⼊该分页插件
分页查询插件
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}
如果⾃定义sqlSessionFactory,就添加调⽤⼯⼚⽅法加⼊插件
Interceptor interceptor[]={paginationInterceptor()};
sqlSessionFactory.setPlugins(interceptor);
然后到使⽤:
对于查询普通的对象:
IPage<User> page=new Page(1,2);
QueryWrapper<User> wrapper=new QueryWrapper();
userDao.selectPage(page,wrapper).getRecords().forEach(System.out::println);
userDao.selectMapsPage(page,wrapper).getRecords().forEach(System.out::println);
上⾯这两个都是返回user,并且会执⾏⼀次查询总记录数和limit
//SELECT COUNT(1) FROM user
// SELECT id,name,age,email FROM user LIMIT ?,?
这样的好处是可以查询到总记录数和总页数,如果不需要查询这些,就在后⾯在false,就不会执⾏select count,⽽且总页数和总记录数都为0
IPage<User> page=new Page(1,2,false);
再看⼀下没有定义过的对象,这时候要⽤map封装,此时可以结合⾃定义sql语句,这⾥只要返回map就可以查询出来所有的字段
@Select("SELECT * FROM USER u LEFT JOIN `role-user` ru ON u.id=ru.user_id LEFT JOIN role r ON r.le_id ${ew.customSqlSegment}")
List<Map<String,Object>> findAll(@Param(Constants.WRAPPER)Wrapper wrapper);
或者加上分页的定义:
@Select("SELECT * FROM USER u LEFT JOIN `role-user` ru ON u.id=ru.user_id LEFT JOIN role r ON r.le_id ${ew.customSqlSegment}")
List<Map<String,Object>> findWithPage(@Param(Constants.WRAPPER)Wrapper wrapper, IPage page);
这时候我们把联表的结果都查了出来,当然*⾥⾯可以⾃定义所查询的列
分页的结果
⼤概就到这⾥,如果还有其他问题也可以查看或者上⾯对应issue有没有相关解决⽅案

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。