【MyBatis-Plus】(8)条件构造器

【MyBatis-Plus】(8)条件构造器

一、条件构造器

官方文档:条件构造器

条件抽象类 Wrapper非常重要。他的子类AbstractWrapper有非常多方法。一些复杂的sql条件就可以使用"*AbstractWrapper"的子类来替代!

例如,WHERE 子句的一些条件查询。

1.QueryWrapper 使用

QueryWrapper 对象主要用于查询时设置条件。

主要参考官方,下列代码供参考,使用的还是之前的user数据库。

@SpringBootTest
public class WrapperTest {
    @Autowired
    UserMapper userMapper;

    @Test
    public void t1() {
        // 查询年龄等于20的用户,且名字不等于'123'的用户
        QueryWrapper<User> wrapper = new QueryWrapper<>();
        wrapper.eq("age", 20).ne("name", "123");
        List<User> users = userMapper.selectList(wrapper);
        users.forEach(System.out::println);
    }

    @Test
    public void t2() {
        // 查询id大于3,且年龄大于等于18的用户
        QueryWrapper<User> wrapper = new QueryWrapper<>();
        wrapper.gt("id", 3).ge("age", 18);
        List<User> users = userMapper.selectList(wrapper);
        users.forEach(System.out::println);
    }

    @Test
    public void t3() {
        // 查询id小于10,且年龄小于等于20的用户
        QueryWrapper<User> wrapper = new QueryWrapper<>();
        wrapper.lt("id", 10).le("age", 20);
        List<User> users = userMapper.selectList(wrapper);
        users.forEach(System.out::println);
    }

    @Test
    public void t4() {
        // 查询id在1-10,且年龄不在0-20和30-40的用户
        QueryWrapper<User> wrapper = new QueryWrapper<>();
        wrapper.between("id", 1, 10).notBetween("age", 0, 20)
                .notBetween("age", 30, 40);
        List<User> users = userMapper.selectList(wrapper);
        users.forEach(System.out::println);
    }

    @Test
    public void t5() {
        // 查询邮箱包含test,名字不包含张三的用户
        QueryWrapper<User> wrapper = new QueryWrapper<>();
        wrapper.like("email", "test").notLike("name", "张三");
        List<User> users = userMapper.selectList(wrapper);
        users.forEach(System.out::println);
    }

    @Test
    public void t6() {
        // 查询id为1,2,3,4,5,查询结果降序排序。
        QueryWrapper<User> wrapper = new QueryWrapper<>();
        wrapper.in("id", 1,2,3,4,5).orderByDesc("id");
        List<User> users = userMapper.selectList(wrapper);
        users.forEach(System.out::println);
    }

    @Test
    public void t7() {
        // 查询id在指定值的用户。(指定值使用sql语句进行查询)
        QueryWrapper<User> wrapper = new QueryWrapper<>();
        wrapper.inSql("id", "SELECT id FROM user WHERE id <= 3");
        List<User> users = userMapper.selectList(wrapper);
        users.forEach(System.out::println);
    }
}

官方文档中的方法作用解释图:

image

上图图参考自他人博客:链接

2.UpdateWrapper 使用

UpdateWrapper 可以用于更新操作,更新数据为指定的值。

    @Test
    public void t8() {
        // 将所有创建时间设置为当前时间
        UpdateWrapper<User> wrapper = new UpdateWrapper<>();
        wrapper.set("create_time", new Date());

        userMapper.update(null, wrapper);
    }

至此,条件构造器 Wrapper已结束。