【Mybatis Plus-05】条件构造器wrapper

本文详细介绍了Mybatis-plus的Wrapper条件构造器,包括如何根据条件进行更新、查询、排序、分页等操作。示例涵盖了eq、ne、gt、lt等多种比较操作,以及like、between等模糊查询方法,还展示了使用Lambda表达式的示例,以及如何进行逻辑查询和排序。同时,文章也演示了如何进行条件更新,更新为null值,以及批量删除和查询。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Mybatis-plus的Wrapper条件构造器

@SpringBootTest
@RunWith(SpringRunner.class)
public class MapperTests {
    /**
     * 根据条件更新
     */
    @Test
    public void testUpdate2() {
        User user = new User();
        user.setPassword("654321");
        user.setEmail("123456@qq.com");
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("username", "hhhh1");
        int i = userMapper.update(user, queryWrapper);
        System.out.println(i);
    }
    /**
     * 根据条件更新,可以更新为null值
     */
    @Test
    public void testUpdate3() {
        UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
        updateWrapper.eq("nickName", "普通用户").set("email", null);
        int i = userMapper.update(null, updateWrapper);
        System.out.println(i);
    }

    /**
     * 根据条件更新,更新多个属性值
     */
    @Test
    public void testUpdate4() {
        UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
        updateWrapper.eq("nickName", "管理员").set("address", "水帘洞").set("email", null);
        int i = userMapper.update(null, updateWrapper);
        System.out.println(i);
    }
	 /**
     * 根据wrapper条件查询总记录条数
     */
    @Test
    public void testSelectCount() {
        QueryWrapper<User> wrapper = new QueryWrapper<User>();
        wrapper.gt("age", 10);//年龄大于18岁
        Long count = userMapper.selectCount(wrapper);
        System.out.println(count);
    }
    
	 /**
     * 根据entity条件查询全部记录
     */
    @Test
    public void testSelectList() {
        QueryWrapper<User> wrapper = new QueryWrapper<User>();
        wrapper.gt("age", 10);//年龄大于18岁
        List<User> users = userMapper.selectList(wrapper);
        for (User user : users) {
            System.out.println("user=" + user);
        }
    }

    /**
     * wrapper基本比较操作
     * eq 等于=
     * ne 不等于<>
     * gt 大于>
     * ge 大于等于>=
     * lt 小于<
     * le 小于等于<=
     * between BETWEEN 值1 AND 值2
     * notBetween NOT BETWEEN 值1 AND 值2
     * in 字段 in (value.get(0),value.get(1),...)
     * NOT IN(v0 ,v1,...)
     */
    @Test
    public void testEqCp() {
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        //select id,username,password,nick_name,address,email,birthday,age from user where password= ? AND age>= 20and username IN (?,?,?)
        //eq:等于
        queryWrapper.eq("password", "123456")
                //ge:大于等于
                .ge("age", 20)
                //in:字段in(value.get(0)
                .in("username", "曹操", "马超", "刘邦");

        List<User> users = userMapper.selectList(queryWrapper);
        for (User user : users) {
            System.out.println(user);
        }
    }
    @Test
    public void testLambdaEqCp() {
        LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
        //使用lambda表达式
        //SELECT id,BIRTHDAY,PASSWORD,ADDRESS,nick_name,AGE,EMAIL,USERNAME FROM user WHERE (PASSWORD = ? AND AGE >= ? AND USERNAME IN (?,?,?))
        lambdaQueryWrapper.eq(User::getPassword, "123456")
                .ge(User::getAge, 20)
                .in(User::getUsername, "马超", "曹操", "刘邦");
        List<User> users = userMapper.selectList(lambdaQueryWrapper);
        for (User user : users) {
            System.out.println(user);
        }
    }

    @Test
    public void testEq3() {
        LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
        String username = null;
        Integer age = 20;
        //SELECT id,BIRTHDAY,PASSWORD,ADDRESS,nick_name,AGE,EMAIL,USERNAME FROM user WHERE (AGE > ?)
        lambdaQueryWrapper.eq(username != null && !username.equals(""), User::getUsername, username);
        lambdaQueryWrapper.gt(age != null, User::getAge, age);
        List<User> users = userMapper.selectList(lambdaQueryWrapper);
        for (User user : users) {
            System.out.println(user);
        }
    }

    /**
     * 模糊查询
     * like      username like  '%值%'
     * not like  username not like  '%值%'
     * likeLeft  username like  '%曹'
     * likeRight username like  '曹%'
     */
    @Test
    public void testWrapper() {
        QueryWrapper<User> wrapper = new QueryWrapper<>();
        //SELECT id,username,birthday FROM user WHERE (username LIKE '曹%')
        wrapper.likeRight("username", "曹");
        //通过select方法指定查询字段
        wrapper.select("id", "username", "birthday");
        List<User> users = userMapper.selectList(wrapper);
        for (User user : users) {
            System.out.println(user);
        }
    }

    /**
     *将testWrapper()改为lambda表达式
     */
    @Test
    public void testLamWrapper() {
        LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
        //SELECT id,USERNAME,BIRTHDAY FROM user WHERE (USERNAME LIKE ? OR AGE = ?)
        lambdaQueryWrapper.likeRight(User::getUsername, "曹操")
                .or()
                .eq(User::getAge, 27)
                //通过select方法指定查询字段
                .select(User::getId, User::getUsername, User::getBirthday);
        List<User> users = userMapper.selectList(lambdaQueryWrapper);
        for (User user : users) {
            System.out.println(user);
        }
    }

    /**
     * 逻辑查询
     * 拼接 or
     * AND 嵌套
     */
    @Test
    public void testOr() {
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        // SELECT id,BIRTHDAY,PASSWORD,ADDRESS,nick_name,AGE,EMAIL,USERNAME FROM user WHERE (username = ? OR age = ?)
        queryWrapper.eq("username", "刘备").or().eq("age", 28);
        //SELECT id,BIRTHDAY,PASSWORD,ADDRESS,nick_name,AGE,EMAIL,USERNAME FROM user WHERE (username = ? AND age = ?)
        queryWrapper.eq("username", "刘备").eq("age", 27);
        List<User> users = userMapper.selectList(queryWrapper);
        for (User user : users) {
            System.out.println(user);
        }
    }

    /**
     * testOr()方法改为lambda表达式
     */
    @Test
    public void testLamOr() {
        LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
        //SELECT id,BIRTHDAY,PASSWORD,ADDRESS,nick_name,AGE,EMAIL,USERNAME FROM user WHERE (USERNAME = ? OR AGE = ?)
        //wrapper.eq(User::getUsername,"刘备").or().eq(User::getAge,28);
        wrapper.eq(User::getUsername, "刘备").eq(User::getAge, 27);
        //SELECT id,BIRTHDAY,PASSWORD,ADDRESS,nick_name,AGE,EMAIL,USERNAME FROM user WHERE (USERNAME = ? AND AGE = ?)
        List<User> users = userMapper.selectList(wrapper);
        for (User user : users) {
            System.out.println(user);
        }
    }

    /**
     * orderByDesc:降序排序
     */
    @Test
    public void testOrderByDesc(){
        QueryWrapper<User> wrapper = new QueryWrapper<>();
        //查询结果按年龄降序
        //SELECT id,BIRTHDAY,PASSWORD,ADDRESS,nick_name,AGE,EMAIL,USERNAME FROM user ORDER BY age DESC
        wrapper.orderByDesc("age");
        List<User> users = userMapper.selectList(wrapper);
        for(User user: users){
            System.out.println(user);
        }
    }

    /**
     * orderByAsc:升序排序
     */
    @Test
    public void testOrderByAsc(){
        QueryWrapper<User> wrapper = new QueryWrapper<>();
        //查询结果按年龄降序
        //SELECT id,BIRTHDAY,PASSWORD,ADDRESS,nick_name,AGE,EMAIL,USERNAME FROM user ORDER BY age ASC
        wrapper.orderByAsc("age");
        List<User> users = userMapper.selectList(wrapper);
        for(User user: users){
            System.out.println(user);
        }
    }

    @Test
    public void testLamOrderByAsc(){
        LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
        //查询结果按年龄降序
        //SELECT id,BIRTHDAY,PASSWORD,ADDRESS,nick_name,AGE,EMAIL,USERNAME FROM user ORDER BY AGE ASC
        lambdaQueryWrapper.orderByAsc(User::getAge);
        List<User> users = userMapper.selectList(lambdaQueryWrapper);
        for(User user: users){
            System.out.println(user);
        }
    }

    /**
     * 根据条件更新
     */
    @Test
    public void testUpdate1() {
        User user = new User();
        user.setPassword("654321");
        user.setEmail("123456@qq.com");
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("username", "hhhh1");
        int i = userMapper.update(user, queryWrapper);
        System.out.println(i);
    }

    /**
     * 根据条件更新,可以更新为null值
     */
    @Test
    public void testUpdate2() {
        UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
        updateWrapper.eq("nickName", "普通用户").set("email", null);
        int i = userMapper.update(null, updateWrapper);
        System.out.println(i);
    }

    /**
     * 根据entity删除
     */
    @Test
    public void testDelete() {
        //通过对象设置删除条件
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        //手动设置删除条件
        queryWrapper.eq("username", "sky");
        queryWrapper.eq("password", "654321");
        //根据条件删除
        int i = userMapper.delete(queryWrapper);
        System.out.println(i);
    }
    /**
     * 根据id批量查询
     */
    @Test
    public void testSelectBatchIds() {
        List<User> users = userMapper.selectBatchIds(Arrays.asList(1, 2, 3));
        for (User user : users) {
            System.out.println(user);
        }
    }

    /**
     * 根据entity查询一条记录
     * 注意:如果查询结果为多条记录则报错(TooManyResultsException)
     */
    @Test
    public void testSelectOne() {
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("username", "admin");
        User user = userMapper.selectOne(queryWrapper);
        System.out.println(user);
    }

    /**
     * 根据entity条件查询全部记录并翻页
     */
    @Test
    public void testSelectPage() {
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.gt("age", 18);
        int pageIndex = 1; //当前页
        int size = 3; //每页条数
        Page<User> page = new Page<>(pageIndex, size);
        IPage<User> userIPage = userMapper.selectPage(page, queryWrapper);
        long pages = userIPage.getPages(); //总页数
        long total = userIPage.getTotal();//总记录数
        System.out.println("数据总条数" + total);
        System.out.println("总页数" + pages);
        List<User> records = userIPage.getRecords();
        //记录列表
        System.out.println("记录列表" + records);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小蜜蜂127

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值