简化Java持久化操作的利器——MyBatis-Plus条件构造器

381 阅读3分钟

MyBatis-Plus的条件构造器是一个强大的查询条件构建工具,它允许开发者以面向对象的方式构建SQL查询条件,而不需要手动编写SQL语句。通过条件构造器,开发者可以使用链式调用的方式构建各种条件,如等于、不等于、大于、小于、模糊查询等,从而简化了查询条件的编写过程。

条件构造器

我们写一些复杂的sql就可以使用它来替代!

isNotNull() & ge()

isNotNull()不为空 ge()大于等于

查询name不为空的用户,并且邮箱不为空的用户,年龄大于等于12

image-20200421171259541

@Test
void contextLoads() {
    //查询name不为空的用户,并且邮箱不为空的用户,年龄大于等于12
    QueryWrapper<User> wrapper = new QueryWrapper<>();
    wrapper.isNotNull("name")
            .isNotNull("email")
            .ge("age", 12);
    userMapper.selectList(wrapper).forEach(System.out::println);//和我们刚才学习的map对比一下!
}

image-20200421171451333

eq()

eq()等于

查询名字为kylin年龄为3岁

image-20200421172120823

@Test
void test2() {
    //查询名字为kylin
    QueryWrapper<User> wrapper = new QueryWrapper<>();
    wrapper.eq("name", "kylin").eq("age",3);
    User user = userMapper.selectOne(wrapper);//查询一个数据。查询多个使用list或者map
    System.out.println(user);
}

image-20200421172150526

between()

between()在什么什么之间 [x,y]

查询年龄在20-30岁之间的用户

image-20200421172442529

    @Test
    void test3() {
        //查询年龄在20-30岁之间的用户
        QueryWrapper<User> wrapper = new QueryWrapper<>();
        wrapper.between("age", 20, 30);//年龄 区间
        Integer count = userMapper.selectCount(wrapper);//返回个数
        System.out.println(count);
    }

image-20200421172530549

notLike() & likeRight() & likeLeft()

notLike()不包含 likeRight相当于sql语句中的like X%也就是以X开头 likeLeft相当于sql语句中的like %X也就是以X结尾

查询名字中不包含e和email以t开头的用户

image-20200421173054527

   // 模糊查询 查询名字中不包含e和email以t开头的用户
    @Test
    void test4() {
        // 查询年龄在 20 ~ 30 岁之间的用户
        QueryWrapper<User> wrapper = new QueryWrapper<>();
        // 左和右 t%
        wrapper
                .notLike("name", "e")
                .likeRight("email", "t");//t%
        List<Map<String, Object>> maps = userMapper.selectMaps(wrapper);
        maps.forEach(System.out::println);
    }

image-20200421173231149

inSql()

inSql()子查询

查询id小于3的用户数据

image-20200421174217479

   @Test
    void test5() {
        QueryWrapper<User> wrapper = new QueryWrapper<>();
        // id 在子查询中查出来
        wrapper.inSql("id", "select id from user where id<3");
        List<Object> objects = userMapper.selectObjs(wrapper);
        objects.forEach(System.out::println);
    }

image-20200421174723571

orderByAsc() & orderByDesc()

orderByAsc()升序排序orderByDesc()降序排序

查询用户塑胶通过id升序进行排序

image-20200421175710106

更多的例子可以查看官网文档,MyBatis-Plus是国人开发的,其开发文档是中文。非常适合我们学习,并且适合新手通过查看文档进行学习,提升我们的文档自学能力。毕竟当今目前先进的技术,大都是英文的,我们可以先学习中文的官方文档,培养我们的思维,有助于我们后续的能力提升和进步。 image.png

当然看到这里你可能问?为什么MyBatis-Plus没有inner join、left join、right join这种多表查询的API。事实上,的确没有。而且我们也不推荐使用API去实现多表查询的SQL,因为这样其实代码更加复杂耗时,也有人封装过这种框架。但事实证明并不实用,不仅费事,而且效率、安全、可靠性都存在问题。所以涉及多表的操作,我们推荐使用手写SQL。MyBatis-Plus这一类框架,只是简化我们涉及单表的操作。