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.id=ru.role_id ${ew.customSqlSegment}")
List findFreash(@Param(Constants.WRAPPER)Wrapper wrapper);
@Select("select ${ew.sqlSelect} from user ${ew.customSqlSegment} ")
List 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);
        userDao.testSqlSelect(Wrappers.query().select("name","age").like("email","qq")).forEach(System.out::println);
        userDao.testSqlSet(Wrappers.update().set("set role_id ",2).eq("user_id",1));

对应的sql语句:

select u.* from user u left join `role-user` ru on u.id=ru.user_id left join role r on r.id=ru.role_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 page=new Page(1,2);
        QueryWrapper 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 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.id=ru.role_id ${ew.customSqlSegment}")
    List> 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.id=ru.role_id ${ew.customSqlSegment}")
    List> findWithPage(@Param(Constants.WRAPPER)Wrapper wrapper, IPage page);

这时候我们把联表的结果都查了出来,当然*里面可以自定义所查询的列

mybatis-plus之自定义sql、分页_第1张图片

分页的结果

大概就到这里

你可能感兴趣的:(mybatis-plus)