栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

MyBatisPlus-条件构造器/分页/多数据源/MyBatisX插件(生成代码)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

MyBatisPlus-条件构造器/分页/多数据源/MyBatisX插件(生成代码)

目录

一、条件构造器

1.1 wapper介绍

1.2 QueryWrapper

1.3 UpdateWrapper

1.4 LambdaQueryWrapper

1.5 LambdaUpdateWrapper

二、分页插件

2.1 使用BaseMapper中的分页方法

2.2 在自定义mapper方法中使用分页

三、多数据源

四、MyBatisX插件


一、条件构造器

1.1 wapper介绍

        Wrapper : 条件构造抽象类,最顶端父类

                AbstractWrapper : 用于查询条件封装,生成 sql 的 where 条件

                QueryWrapper : 查询条件封装

                UpdateWrapper : Update条件封装

                AbstractLambdaWrapper : 使用Lambda 语法

                        LambdaQueryWrapper :基于Lambda语法的查询Wrapper                         

                        LambdaUpdateWrapper : 基于Lambda语法的 更新Wrapper

1.2 QueryWrapper
@Test
void test1(){
        //查询名字包括a、年龄介于18、30之间、邮箱非空的记录
        //SELECT id,name,age,email,is_deleted FROM user WHERe is_deleted=0 AND (name LIKE ? AND age BETWEEN ? AND ? AND email IS NOT NULL)
        QueryWrapper wrapper = new QueryWrapper<>();
        wrapper.like("name","a").between("age",18,30).isNotNull("email");
        List users = userMapper.selectList(wrapper);
        users.forEach(System.out::println);
    }

@Test
void test2(){
        //查询记录,按年龄降序、id升序排列
        //SELECT id,name,age,email,is_deleted FROM user WHERe is_deleted=0 ORDER BY age DESC,id ASC
        QueryWrapper wrapper = new QueryWrapper<>();
        wrapper.orderByDesc("age").orderByAsc("id");
        List users = userMapper.selectList(wrapper);
        users.forEach(System.out::println);
    }
@Test
void test3(){
        //删除邮箱为空的记录
        //UPDATE user SET is_deleted=1 WHERe is_deleted=0 AND (email IS NULL)
        QueryWrapper wrapper = new QueryWrapper<>();
        wrapper.isNull("email");
        userMapper.delete(wrapper);
    }

@Test
void test4(){
        //修改年龄大于18,名字包含a,或邮箱非空的记录
        //UPDATE user SET name=?, email=? WHERe is_deleted=0 AND (age > ? AND name LIKE ? OR email IS NULL)
        QueryWrapper wrapper = new QueryWrapper<>();
        wrapper.gt("age",18)
                .like("name","a")
                .or()
                .isNull("email");
        User user=new User();
        user.setName("kunkun");
        user.setEmail("ikun@qq.com");
        userMapper.update(user,wrapper);
    }

@Test
void test5(){
        //修改名字包含a,且(年龄大于18或邮箱为空)的记录
        //UPDATE user SET name=?, email=? WHERe is_deleted=0 AND (name LIKE ? AND (age > ? OR email IS NULL))
        QueryWrapper wrapper = new QueryWrapper<>();
        wrapper.like("name","a")
                .and(i->i.gt("age",18).or().isNull("email"));
        User user=new User();
        user.setName("kunkun");
        user.setEmail("ikun@qq.com");
        userMapper.update(user,wrapper);
    }

@Test
void test6(){
        //查询所有记录的部分字段
        //SELECT name,age,email FROM user WHERe is_deleted=0
        QueryWrapper wrapper = new QueryWrapper<>();
        wrapper.select("name","age","email");
        List> list = userMapper.selectMaps(wrapper);
        list.forEach(System.out::println);
    }

@Test
void test7(){
        //查询id小于等于100的所有记录(子查询)
        //SELECT id,name,age,email,is_deleted FROM user WHERe is_deleted=0 AND (id IN (select id from user where id<=100))
        QueryWrapper wrapper = new QueryWrapper<>();
        wrapper.inSql("id","select id from user where id<=100");
        List> list = userMapper.selectMaps(wrapper);
        list.forEach(System.out::println);
    }

        在真正开发的过程中,组装条件是常见的功能,而这些条件数据来源于用户输入,是可选的,因 此我们在组装这些条件时,必须先判断用户是否选择了这些条件,若选择则需要组装该条件,若没有选择则一定不能组装,以免影响SQL执行的结果。我们可以使用带condition参数的重载方法构建查询条件:

@Test
public void test08UseCondition() {
    //定义查询条件,有可能为null(用户未输入或未选择)
    String username = null;
    Integer ageBegin = 10;
    Integer ageEnd = 24;

    QueryWrapper queryWrapper = new QueryWrapper<>();
    //StringUtils.isNotBlank()判断某字符串是否不为空且长度不为0且不由空白符(whitespace)构成
    queryWrapper.like(StringUtils.isNotBlank(username), "username", "a")
            .ge(ageBegin != null, "age", ageBegin)
            .le(ageEnd != null, "age", ageEnd);
    //SELECT id,username AS name,age,email,is_deleted FROM t_user WHERe (age >=? AND age <= ?)
    List users = userMapper.selectList(queryWrapper);
    users.forEach(System.out::println);
}

1.3 UpdateWrapper
@Test
void test8(){
        //更新名字包含a,且(年龄大于20或邮箱为空)的记录
        //UPDATE user SET name=?,email=? WHERe is_deleted=0 AND (name LIKE ? AND (age > ? OR email IS NULL))
        UpdateWrapper wrapper = new UpdateWrapper<>();
        wrapper.like("name","a")
                .and(i->i.gt("age",20).or().isNull("email"))
                .set("name","haha")
                .set("email","haha@qq.com");
        userMapper.update(null,wrapper);
    }

@Test
void test9(){
        //查询名字包含a,且年龄小于等于20的记录
        //SELECT id,name,age,email,is_deleted FROM user WHERe is_deleted=0 AND (name LIKE ? AND age <= ?)
        String name="zp";
        Integer ageBegin=null;
        Integer ageEnd=30;

        UpdateWrapper wrapper = new UpdateWrapper<>();
        wrapper.like(StringUtils.isNotBlank(name),"name",name)
                .ge(ageBegin!=null,"age",ageBegin)
                .le(ageEnd!=null,"age",ageEnd);
        userMapper.selectList(wrapper);
    }

1.4 LambdaQueryWrapper
@Test
void test10(){
        //查询名字包含a,且年龄小于等于20的记录
        //SELECT id,name,age,email,is_deleted FROM user WHERe is_deleted=0 AND (name LIKE ? AND age <= ?)
        String name="zp";
        Integer ageBegin=null;
        Integer ageEnd=30;

        LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
        wrapper.like(StringUtils.isNotBlank(name),User::getName,name)
                .ge(ageBegin!=null,User::getAge,ageBegin)
                .le(ageEnd!=null,User::getAge,ageEnd);
        userMapper.selectList(wrapper);
}

1.5 LambdaUpdateWrapper
@Test
void test11(){
        //更新名字包含a,且(年龄大于20或邮箱为空)的记录
        //UPDATE user SET name=?,email=? WHERe is_deleted=0 AND (name LIKE ? AND (age > ? OR email IS NULL))
        LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>();
        wrapper.like(User::getName,"a")
                .and(i->i.gt(User::getAge,20).or().isNull(User::getEmail))
                .set(User::getName,"haha")
                .set(User::getEmail,"haha@qq.com");
        userMapper.update(null,wrapper);
}

二、分页插件

        MyBatis Plus自带分页插件,只要简单的配置即可实现分页功能

2.1 使用BaseMapper中的分页方法

        创建配置类:

@Configuration
public class MyBatisPlusConfig {
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor(){
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return interceptor;
    }
}

        测试:

    @Test
    void testPage(){
        //SELECT id,name,age,email,is_deleted FROM user WHERe is_deleted=0 LIMIT ?
        Page page = new Page<>(1, 3);//当前页码:1    每页的记录数:3
        userMapper.selectPage(page,null);

        System.out.println(page);                //page对象
        System.out.println(page.getRecords());   //所有的记录
        System.out.println(page.getPages());     //总页数
        System.out.println(page.getTotal());     //总记录数
        System.out.println(page.hasNext());      //是否有下一页
        System.out.println(page.hasPrevious());  //是否有上一页
    }


//测试结果:

com.baomidou.mybatisplus.extension.plugins.pagination.Page@4527f70a

[User(id=3, name=zp, age=19, email=zp@qq.com, isDeleted=0), User(id=4, name=kunkun, age=21, email=ikun@qq.com, isDeleted=0), User(id=5, name=Billie, age=24, email=test5@baomidou.com, isDeleted=0)]

3
7
true
false

2.2 在自定义mapper方法中使用分页

        方法返回值必须是Page类型且指定泛型,参数用@param标注且第一个参数是Page类型

@Repository
public interface UserMapper extends BaseMapper {
     Page selectPageVo(@Param("page") Page page,@Param("age") Integer age);
}



     //为我们自动生成的
        select
        
        from user
        where
        id = #{id,jdbcType=NUMERIC}
    

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1039263.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号