6、Mybatis-Plus wrapper的使用

简介: 这篇文章详细介绍了Mybatis-Plus中Wrapper的使用,包括QueryWrapper和UpdateWrapper的基本概念、组装查询、排序、删除、修改条件的方法,以及如何设置条件优先级、组装SELECT子句和实现子查询等高级用法。

第一篇:1、Mybatis-Plus 创建SpringBoot项目
第二篇:2、Mybatis-Plus 测试增、删、改、查
第三篇:3、Mybatis-Plus 自定义sql语句
第四篇:4、Mybatis-Plus 通用service的操作
第五篇:5、Mybatis-Plus 常用注解

文章目录

  • 1、wapper的介绍
  • 2、QueryWrapper(组装查询条件)
  • 3、QueryWrapper(组装排序条件)
  • 4、QueryWrapper(组装删除条件)
  • 5、QueryWrapper(信息的修改)
  • 6、QueryWrapper(条件的优先级)
  • 7、QueryWrapper(组装select子句)
  • 8、QueryWrapper(实现子查询)
  • 8、QueryWrapper(UpdateWrapper)

1、wapper的介绍

在这里插入图片描述
介绍:

  • Wrapper : 条件构造抽象类,最顶端父类
  • AbstractWrapper : 用于查询条件封装,生成 sql 的 where 条件
  • QueryWrapper : 查询条件封装
  • UpdateWrapper : Update 条件封装
  • AbstractLambdaWrapper : 使用Lambda 语法
  • LambdaQueryWrapper :用于Lambda语法使用的查询Wrapper
  • LambdaUpdateWrapper : Lambda 更新封装Wrapper

2、QueryWrapper(组装查询条件)

//条件构造器
    @Test
    public void test01(){
        /**
         * 查询用户名包含a,年龄在20到30之间,并且邮箱不为null的用户信息
         *
         * SELECT uid AS id,user_name AS name,age,email,is_deleted FROM t_user
         * WHERE is_deleted=0 AND
         * (user_name LIKE ? AND age BETWEEN ? AND ? AND email IS NOT NULL)
         */
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.like("user_name","三")
                    .between("age",20,25)
                    .isNotNull("email");
        List<User> list = userMapper.selectList(queryWrapper);
        list.forEach(System.out::println);
    }

3、QueryWrapper(组装排序条件)

@Test
    public void test02(){
        /**
         * //按年龄降序查询用户,如果年龄相同则按id升序排列
         * //SELECT id,username AS name,age,email,is_deleted FROM t_user WHERE is_deleted=0 ORDER BY age DESC,id ASC
         */
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.orderByDesc("age")
                .orderByAsc("id");
        List<User> users = userMapper.selectList(queryWrapper);
        users.forEach(System.out::println);

    }

4、QueryWrapper(组装删除条件)

@Test
    public void test03(){
        /**
         * 删除email为空的用户
         *  UPDATE t_user SET is_deleted=1 WHERE is_deleted=0 AND (email IS NULL)
         */
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.isNull("email");
        int rs = userMapper.delete(queryWrapper);
        System.out.println(rs);
    }

5、QueryWrapper(信息的修改)

@Test
    public void test04(){
        /**使用queryWrapper实现用户信息的修改
         * 将(年龄大于20并且用户名中包含有a)或邮箱为null的用户信息修改
         * UPDATE t_user SET user_name=?, age=? WHERE is_deleted=0 AND (age > ? AND user_name LIKE ? OR email IS NULL)
         */
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.gt("age",20)
                .like("user_name","a")
                .or()
                .isNull("email");
        User user = new User();
        user.setName("孙悟空");
        user.setAge(32);
        int rs = userMapper.update(user,queryWrapper);
        System.out.println(rs);
    }

6、QueryWrapper(条件的优先级)

@Test
    public void test05(){
        /**
         * 条件的优先级
         * 将用户名中包含有a并且(年龄大于20或邮箱为null)的用户信息修改
         * lambda中的条件优先执行
         * UPDATE t_user SET user_name=?, age=?, email=? WHERE is_deleted=0 AND (user_name LIKE ? AND (age > ? OR email IS NULL))
         */
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.like("user_name","a")
                .and(i->i.gt("age",20).or().isNull("email"));
        User user = new User();
        user.setName("猪八戒");
        user.setAge(32);
        user.setEmail("zbj@qq.com");
        int rs = userMapper.update(user,queryWrapper);
        System.out.println(rs);
    }

7、QueryWrapper(组装select子句)

@Test
    public void test06(){

        /**
         * 查询用户信息的username、age和email字段
         * SELECT user_name,age,email FROM t_user WHERE is_deleted=0
         */
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.select("user_name","age","email");
       List<Map<String,Object>> maps =  userMapper.selectMaps(queryWrapper);
       maps.forEach(System.out::println);
    }

8、QueryWrapper(实现子查询)

@Test
    public void test07(){
        /**
         *查询uid小于等于100的用户信息
         * SELECT uid AS id,user_name AS name,age,email,is_deleted FROM t_user WHERE is_deleted=0 AND (uid IN (select uid from t_user where uid <= 100))
         */
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.inSql("uid","select uid from t_user where uid <= 100");
        List<User> list = userMapper.selectList(queryWrapper);
        list.forEach(System.out::println);

    }

8、QueryWrapper(UpdateWrapper)

@Test
    public void test08(){

        /**
         * 将用户名中包含有a并且(年龄大于20或邮箱为null)的用户信息修改
         * UPDATE t_user SET user_name=?,email=? WHERE is_deleted=0 AND (user_name LIKE ? AND (age > ? OR email IS NULL))
         */
        UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
        updateWrapper.like("user_name","a")
                .and(i-> i.gt("age",20).or().isNull("email"));
        updateWrapper.set("user_name","唐僧").set("email","tangseng@qq.com");
        int rs = userMapper.update(null,updateWrapper);
        System.out.println(rs);
    }
相关文章
|
Java 数据库连接 数据库
Mybatis-plus中的QueryWrapper的多种用法!(总结)
Mybatis-plus中的QueryWrapper的多种用法!(总结)
3439 0
|
SQL 数据库
MyBatisPlus-null判定及查询指定字段
MyBatisPlus-null判定及查询指定字段
1542 0
|
SQL 缓存 安全
深入解析MyBatis-Plus LambdaQueryWrapper与QueryWrapper:高效数据查询的秘密
深入解析MyBatis-Plus LambdaQueryWrapper与QueryWrapper:高效数据查询的秘密
15389 2
|
Java API Spring
Java小抄 使用StopWatch输出执行耗时
通过本文的介绍,我们详细讲解了如何使用 `StopWatch` 类测量代码执行时间。`StopWatch` 提供了简单而强大的功能,帮助我们精确分析代码的性能瓶颈,优化程序效率。希望本文能帮助您更好地理解和应用 `StopWatch`,在实际开发中提高代码性能和质量。
2559 80
|
SQL Java 数据库连接
mybatisplus QueryWrapper or写法
# MyBatis-Plus QueryWrapper的OR写法详解 MyBatis-Plus是一款基于MyBatis的增强工具,提供了丰富的简化操作,使开发者能更高效地进行数据库操作。`QueryWrapper`是MyBatis-Plus中用于构建查询条件的一个核心类,支持多种条件组合,包括AND和OR条件。本文将详细介绍如何使用 `QueryWrapper`实现OR条件的查询。 ## QueryWrapper简介 `QueryWrapper`用于构建动态SQL查询条件,它封装了各种条件构造方法,使得查询条件的构建更加简洁和直观。`QueryWrapper`中提供了丰富的方法来支持多
3053 0
|
SQL 数据库
MyBatisPlus 之 条件查询 <条件构造器>
MyBatisPlus 之 条件查询 <条件构造器>
501 0
|
Java 数据库连接 数据库
mybatis plus 中增删改查及Wrapper的使用
mybatis plus 中增删改查及Wrapper的使用
966 3
|
SQL IDE Java
通过一次性能优化,再次记牢了mybatisplus的QueryWrapper、LambdaQueryWrapper、AbstractWrapper这三者之间的关系...
本文描述了一次针对SpringBoot应用中MyBatisPlus分页查询的性能优化过程。在优化时,作者重写了BaseMapper的`selectPage`方法,通过`Wrapper`的`between`操作添加了ID区间限制以提升SQL执行效率。然而,由于在业务服务类中循环调用分页查询时未每次都创建新的`Wrapper`对象,导致`id BETWEEN ? AND ?`条件重复出现在SQL中。那么,如何解决这个问题呢?
1690 5
|
SQL Java 数据库连接
MyBatis-Plus更新使用null值
MyBatis-Plus更新使用null值
1129 2
|
设计模式 Java 开发者
谈谈springboot的工厂模式
【4月更文挑战第13天】Spring Boot中的工厂模式是一种用于解耦组件创建过程的设计模式,它允许系统在运行时根据需要动态地创建不同类型的对象。这种模式在Spring框架中得到了广泛的应用,特别是在依赖注入(DI)和控制反转(IoC)的上下文中,它有助于管理复杂的依赖关系并提高代码的可维护性和可扩展性
680 7