MybatisPlus实现分页查询、动态SQL查询

前言

提示:这里可以添加本文要记录的大概内容:

文章目录

  • 前言
  • 一、Bean
  • 二、使用步骤
  • 三、构造器
    • 1、LambdaQueryWrapper
    • 2、LambdaQueryChainWrapper 链式查询
    • 3、三者区别
  • 总结



一、Bean

/**
 * 新的分页插件
 */
  @Bean
  public MybatisPlusInterceptor mybatisPlusInterceptor() {
      MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
      mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
      return mybatisPlusInterceptor;
  }

@Configuration
public class MyBatisPlusConfig {
    /**
     * 配置mybatis-plus 分页查件
     */
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        return new PaginationInterceptor();
    }
}
// 原文链接:https://blog.csdn.net/m0_48805880/article/details/122070016

二、使用步骤

public Page<User> selectPageLike(User user, PageDTO pageDTO){
        Page<User> page= new Page(pageDTO.getPage(), pageDTO.getSize());
        // new LambdaQueryChainWrapper<>();
        LambdaQueryWrapper<User> queryWrapper =  new LambdaQueryWrapper<>();
        queryWrapper.eq(User::getEnabled, 1);
        // 用户名
        if (StringUtil.isNotEmpty(user.getUsername())) {
            queryWrapper.like(User::getUsername, user.getUsername());
        }
        // 新建时间
        if (StringUtil.isNotEmpty(user.getCreateTime().toString())) {
            queryWrapper.eq(User::getCreateTime,user.getCreateTime());
        }
        return userMapper.selectPage(page, queryWrapper);
    }

三、构造器

1、LambdaQueryWrapper

// LambdaQueryWrapper使用的是Lambda语法

    @Test
    public void mySelect() {
        LambdaQueryWrapper<User> query = new LambdaQueryWrapper<>();
        query.likeRight(User::getName, "王")
            .and(q -> q.lt(User::getAge, 40).or().isNotNull(User::getEmail));
        List<User> list = userMapper.selectAll(query);
        list.forEach(System.out::println);
    }

2、LambdaQueryChainWrapper 链式查询

   /**
    * 链式lambda条件构造器:更优雅的书写方式
    */
   @Test
   public void lambdaQueryChainWrapper() {
       List<User> list = new LambdaQueryChainWrapper<User>(userMapper)
           .likeRight(User::getName, "王")
           .and(
               q -> q
                   .lt(User::getAge, 40)
                   .or()
                   .isNotNull(User::getEmail)
           )
           .list();
       list.forEach(System.out::println);
   }
  // 原文链接:https://blog.csdn.net/jiahao1186/article/details/122154137

3、三者区别

1、QueryWrapper 直接使用写死“列名”方式,容易因拼写错误导致异常,当字段名称发生改变,导致额外更多检查和修改工作。如有错误,运行时报错。或者需要封装查询类的对象,增加代码量。
2、LambdaQueryWrapper 使用lambda表达式,如有错误,编译期就会报错;灵活。【推荐】
3、LambdaQueryChainWrapper,写法偏向于炫技,可读性没有上面的代码强。


原文链接1
原文链接2

总结

========================努力干吧!菜鸟。

你可能感兴趣的:(sql,java,数据库)