MybatisPlus—条件构造器

发布时间:2024年01月04日

目录

1. AbstractWrapper

2. QueryWrapper

3. UpdateWrapper

4. LambdaQueryWrapper、LambdaUpdateWrapper(推荐)

4. 学习总结


各构造器关系如下图所示。

1. AbstractWrapper

作用:用于生成 sql 的 where 条件, entity 属性也用于生成 sql 的 where 条件。

AbstractWrapper为我们提供了许多常用的条件判断方法,各方法功能整理见下表。
具体见官网:条件构造器


2. QueryWrapper

QueryWrapper 继承了 AbstractWrapper 的条件判断方法,同时为我们提供select方法。

    //SELECT id,username,info FROM tb_user WHERE (username LIKE '%o%' AND balance >= 1000)
    @Test
    void testQueryWrapper() {
        //1.构建查询条件
        QueryWrapper<User> wrapper = new QueryWrapper<User>()
                .select("id", "username", "info")
                .like("username", "o")
                .ge("balance", 1000);
        //2.获取查询结果
        List<User> users = userMapper.selectList(wrapper);
        System.out.println(users.toString());
    }


3. UpdateWrapper

UpdateWrapper? 继承自 AbstractWrapper 的条件判断方法,同时为我们提供set方法。

当遇到特殊的更新(如:blance = blance -200),可以使用UpdateWrapper。

如果是简单的直接赋值,可以使用QueryWrapper。

(本质就是select和set语句的选择)

    //特殊赋值——使用UpdateWrapper更新
    //UPDATE tb_user SET balance = balance - 200 WHERE (id IN (?,?,?))
    @Test
    void testUpdateWrapper() {
        List<Long> ids = List.of(1L, 2L, 4L);
        UpdateWrapper<User> wrapper = new UpdateWrapper<User>()
                .setSql("balance = balance - 200")
                .in("id", ids);
        userMapper.update(null, wrapper);
    }



    //简单赋值——使用QueryWrapper更新
    //UPDATE tb_user SET balance=2000 WHERE (username = "jack")
    @Test
    void testUpdateByQueryWrapper() {
        //1.设置更新数据
        User user = new User();
        user.setBalance(2000);
        //2.设置更新条件
        QueryWrapper<User> wrapper = new QueryWrapper<User>().eq("username", "jack");
        //3.进行更新
        userMapper.update(user, wrapper);
    }

4. LambdaQueryWrapper、LambdaUpdateWrapper(推荐)

LambdaQueryWrapper 和 LambdaUpdateWrapper 是相对于 QueryWrapper 及 UpdateWrapper 的 Lmbda 语法实现方式(用函数替代方法中的字段,避免硬编码)

两种获取方式:

//1.通过QueryWrapper().lambda()获取
LambdaQueryWrapper queryLambda = new QueryWrapper().lambda();
//2.直接new一个LambdaQueryWrapper<>()获取
LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>();

//LambdaUpdateWrapper获取方式同理
LambdaUpdateWrapper updateLambda = new UpdateWrapper().lambda();
LambdaUpdateWrapper lambdaUpdateWrapper = new LambdaUpdateWrapper();

对比:分别使用 QueryWrapper 与 LambdaQueryWrapper 进行查询:

    //SELECT id,username,info FROM tb_user WHERE (username LIKE '%o%' AND balance >= 1000)

    //使用QueryWrapper进行查询
    @Test
    void testQueryWrapper() {
        //1.构建查询条件
        QueryWrapper<User> wrapper = new QueryWrapper<User>()
                .select("id", "username", "info")
                .like("username", "o")
                .ge("balance", 1000);
        //2.获取查询结果
        List<User> users = userMapper.selectList(wrapper);
        System.out.println(users.toString());
    }


    //使用LambdaQueryWrapper进行查询(用函数替换方法中的字段参数)
    @Test
    void testLambdaQueryWrapper() {
        //1.构建查询条件
        LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<User>()
                .select(User::getId, User::getUsername, User::getInfo)
                .like(User::getUsername, "o")
                .ge(User::getBalance, 1000);
        //2.获取查询结果
        List<User> users = userMapper.selectList(wrapper);
        System.out.println(users.toString());
    }

4. 学习总结

????????

? ? ? ? 总结:AbstractWrapper为我们提供了众多条件判断方法,用于生成 sql 的 where 条件。而QueryWrapper和UpdateWrapper继承自AbstractWrapper,同时QueryWrapper提供了select方法,AbstractWrapper提供了set方法,而LambdaQueryWrapper 和 LambdaUpdateWrapper 是相对于 QueryWrapper 及 UpdateWrapper 的 Lmbda 语法实现方式(用函数替代方法中的字段,避免硬编码)

? ? ? ? 因此,在以上介绍的众多条件构造器中,日常使用到的只有两个:LambdaQueryWrapper和LambdaUpdateWrapper。当遇到特殊的更新(如:blance = blance -200),可以使用UpdateWrapper。如果是简单的直接赋值,或者其他操作可以使用QueryWrapper。(本质就是select和set语句的选择)

文章来源:https://blog.csdn.net/aaa131420030415/article/details/135356703
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。