本文主要是介绍史上最全MybatisPlus从入门到精通,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
《史上最全MybatisPlus从入门到精通》MyBatis-Plus是MyBatis增强工具,简化开发并提升效率,支持自动映射表名/字段与实体类,提供条件构造器、多种查询方式(等值/范围/模糊/分页...
1.简介
MyBatis-Plus (简称MP)是一个MyBatis 的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生。
官方网址:MyBatis-Plus 为简化开发而生
2.基础篇
2.1.通用mapper接口操作
@Test void selectList() { List<User> users = userMapper.selectList(null); System.out.println(users); } @Test void insert() { User user = new User(); user.setId(6L); user.setName("Nike"); user.setAge(33); user.setEmail("test6@example.com"); userMapper.insert(user); } @Test void deleteOne() { userMapper.deleteById(6L); } @Test void updateById() { User user = new User(); user.setId(6L); user.setName("迈克"); user.setAge(35); user.setEmail("maike@powernode.com"); userMapper.updateById(user); } @Test void selectById() { User user = userMapper.selectById(6L); System.out.println(user); }
2.2.通用service接口操作
直接在service实现简单的crud操作
@Test void insertService() { User user = new User(); user.setId(7L); user.setName("zhangsan"); user.setAge(35); user.setEmail("zhangsan@powernode.com"); userService.save(user); } @Test void deleteService() { userService.removeById(7L); } @Test void updateService() { User user = new User(); user.setId(6L); user.setAge(40); userService.updateById(user); } @Test void selectService() { List<User> users = userService.selectList(); System.out.println(users); }
3.进阶篇
3.1.映射
3.1.1.自动映射
- 表名和实体类名映射->表名user 实体类名User
- 字段名和实体类属性名映射->字段名name 实体类属性名name
- 字段名下划线命名方式和实体类属性小驼峰命名方式映射->字段名user_email 实体类属性名userEmail
MybatisPlus支持这种映射规则,可以通过配置来设置
map-underscore-to-camel-case:true #表示支持下划线到驱它峰的映射 map-underscore-to-camel-case:false #表示不支持下划线到驼峰的映射
3.1.2.表映射
通过@TableName()注解指定映射的数据库表名,就会按照指定的表名进行映射
如:此时将数据库的表名改为powershop_user,要完成表名和实体类合名的映射,需要将实体
类名也要指定为powershop_user
全局配置
全局配置后可删除注解@TableName("powershop_user")
3.1.3.字段映射
当数据库字段和表实体类的属性不一致时,我们可以使用@TableField()注解改变字段和属性的映射,让注解中的名称和表字段保持一致
如:此时将数据库字段的名称我们改为username,在根据实体类的属性拼接SQL的使用,就会使用@TableField()中指定的名称username进行拼接,完成查询
数据库字段和表实体类的属性一致,框架在拼接SQL语句的时候,会使用属性名称直接拼接sql语句,例如:
SELECT id,username AS name,age,email,desc
FROM powershop_user
这条语句直接进行查询的时候,会出现错误。
原因是,desc属于关键字,不能直接用于sql查询,要解决这个问题就需要将desc字段加上`符号,将他变为不是关键字,才能完成查询,那这个个问题的根本也是改变生成的SQL语句的字段名称,也就是我们需要通过@TableField()改变实体类的属性名称。
3.1.4.字段失效
当数据库中有字段不希望被查询,我们可以通过@TableField(select=false)来隐藏
这个字段,那在拼接SQL语句的时候,就不会拼接这个字段
3.1.5.视图属性
在实际开发中,有些字段不需要数据库存储,但是却需要展示,需要要展示也就是意味着实体类中需要存在这个字段,我们称这些实体类中存在但是数据库中不存在的字段,叫做视图字段。
像这种视图字段,能够作为查询条件么,显示是不能的。因为数据车中没有这个字段,所以查
询字段如果包含这个字段,SQL语句会出现问题。我们通过@TableField(exist = false)
来去掉这个字段,不让他作为查询字段。
3.2.条件构造器
3.2.1.条件构造器介绍
将查询条件封装成对象。
抽象类不能创建对象,重点在实体类。
3.3.等值查询
3.3.1. 单条件查询 eq
QueryWrapper 和 LambdaQueryWrapper 的对比使用
@Test void eq(){ //1.创建条件查询对象 QueryWrapper<User> queryWrapper = new QueryWrapper<>(); //2.设置查询条件,指定查询的字段和匹配的值 queryWrapper.eq( "name", "Jack"); //3.进行条件查询 User user = userMapper.selectOne(queryWrapper); System.out.println(user); } @Test void eq2() { LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>(); lambdaQueryWrapper.eq(User::getName, "Jack"); User user = userMapper.selectOne(lambdaQueryWrapper); System.out.println(user); }
查询null值判断
条件查询判断,如果值为null,则不作为查询条件 -> 查询所有
@Test void isNull(){ LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>(); String name = null; lambdaQueryWrapper.eq(User::getName,name); // User user = userMapper.selectOne(lambdaQueryWrapper); List<User> users = userMapper.selectList(lambdaQueryWrapper); System.out.println(users); } @Test void isNull2(){ LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>(); String name = null; lambdaQueryWrapper.eq(name != null,User::getName,name); // User user = userMapper.selectOne(lambdaQueryWrapper); List<User> users = userMapper.selectList(lambdaQueryWrapper); System.out.println(users); }
3.3.2. 多条件查询 allEq
@Test void allEq1() { LambdaQueryWrapper<User> lambdaqueryWrapper = new LambdaQueryWrapper<>(); lambdaqueryWrapper.eq(User::getName, "Tom"); lambdaqueryWrapper.eq(User::getAge, 28); User user = userMapper.selectOne(lambdaqueryWrapper); System.out.println(user); } @Test void allEq2() { HashMap<String, Object> hashMap = new HashMap<>(); hashMap.put("name", "Tom"); hashMap.put("age", null); QueryWrapper<User> queryWrapper = new QueryWrapper<>(); queryWrapper.allEq(hashMap, true); User user = userMapper.selectOne(queryWrapper); System.out.println(user); }
3.3.3. 不等条件查询 ne
@Test void ne() { LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>(); lambdaQueryWrapper.ne(User::getName, "Tom"); List<User> users = userMapper.selectList(lambdaQueryWrapper); System.out.println(users); }
3.4.范围查询
3.4.1. gt,ge,lt,le的使用
大于-gt、 大于等于-ge、 小于-lt、 小于等于-le
@Test void gt(){ //1.创建QueryWrapper对象 LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>(); //2.设置条件,指定字段名称和值 Integer age = 18; lambdaQueryWrapper.ge(User::getAge,age); //3.使用条件完成查询 List<User> users = userMjavascriptapper.selectList(lambdaQueryWrapper); System.out.println(users); }
3.4.2.区间查询 between notbetween
@Test void between(){ //1.创建QueryWrapper对象 LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>(); //2.设置条件,指定字段名称和值 lambdaQueryWrapper.between(User::getAge,18,30); //3.使用条件完成查询 List<User> users = userMapper.selectList(lambdaQueryWrapper); System.out.println(users); } @Test void notBetween(){ //1.创建QueryWrapper对象 LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>(); //2.设置条件,指定字段名称和值 lambdaQueryWrapper.notBetween(User::getAge,18,30); //3.使用条件完成查询 List<User> users = userMapper.selectList(lambdaQueryWrapper); System.out.println(users); }
3.5.模糊查询
3.5.1.全模糊匹配 like
@Test void like(){ //1.创建QueryWrapper对象 LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>(); //2.设置条件,指定字段名称和值 lambdaQueryWrapper.like(User::getName,"J"); //3.使用条件完成查询 List<User> users = userMapper.selectList(lambdaQueryWrapper); System.out.println(users); }
3.5.2.不包含模糊匹配 notLike
@Test void notLike(){ //1.创建QueryWrapper对象 LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>(); //2.设置条件,指定字段名称和值 lambdaQueryWrapper.notLike(User::getName,"J"); //3.使用条件完成查询 List<User> users = userMapper.selectList(lambdaQueryWrapper); System.out.println(users); }
3.5.3.左模糊匹配 likeLeft
左边模糊 %e
@Test void likeLeft(){ //1.创建QueryWrapper对象 LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>(); //2.设置条件,指定字段名称和值 lambdaQueryWrapper.likeLeft(User::getName,"e"); //3.使用条件完成查询 List<User> users = userMapper.selectList(lambdaQueryWrapper); System.out.println(users); }
3.5.4.右模糊匹配 likeRight
@Test void likeLeft(){ //1.创建QueryWrapper对象 LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>(); //2.设置条件,指定字段名称和值 lambdaQueryWrapper.likeLeft(User::getName,"J"); //3.使用条件完成查询 List<User> users = userMapper.selectList(lambdaQueryWrapper); System.out.println(users); }
3.6.判空查询
3.6.1. isNull,isNotNull
@Test void isNull(){ //1.创建QueryWrapper对象 LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>(); //2.设置条件,指定字段名称 lambdaQueryWrapper.isNull(User::getName); //3.使用条件完成查询 List<User> users = userMapper.selectList(lambdaQueryWrapper); System.out.println(users); } @Test void isNotNull(){ //1.创建QueryWrapper对象 LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>(); //2.设置条件,指定字段名称 lambdaQueryWrapper.isNotNull(User::getName); //3.使用条件完成查询 List<User> users = userMapper.selectList(lambdaQueryWrapper); System.out.println(users); }
3.7.包含查询
3.7.1. in
字段=值or字段=值 -> in
@Test void in(){ //1.创建QueryWrapper对象 LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>(); //2.设置条件,指定字段名称和值 ArrayList<Integer> arrayList = new ArrayList<>(); Collections.addAll(arrayList,18,20,21); lambdaQueryWrapper.in(User::getAge,arrayList); //3.使用条件完成查询 List<User> users = userMapper.selectList(lambdaQueryWrapper); System.out.println(users); } @Test void in2(){ //1.创建QueryWrapper对象 LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>(); //2.设置条件,指定字段名称和值 lambdaQueryWrapper.in(User::getAge,18,20,21); //3.使用条件完成查询 List<User> users = userMapper.selectList(lambdaQueryWrapper); System.out.println(users); }
3.7.2. notIn
字段!=值and字段!=值 -> notIn
@Test void notIn(){ //1.创建QueryWrapper对象 LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>(); //2.设置条件,指定字段名称和值 ArrayList<Integer> arrayList = new ArrayList<>(); Collections.addAll(arrayList,18,20,21); lambdaQueryWrapper.notIn(User::getAge,arrayList); //3.使用条件完成查询 List<User> users = userMapper.selectList(lambdaQueryWrapper); System.out.println(users); } @Test void notIn2(){ //1.创建QueryWrapper对象 LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>(); //2.设置条件,指定字段名称和值 lambdaQueryWrapper.notIn(User::getAge,18,20,21); //3.使用条件完成查询 List<User> users = userMapper.selectList(lambdaQueryWrapper); System.out.println(users); }
3.7.3. inSql
@Test void inSql(){ //1.创建QueryWrapper对象 LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>(); //2.设置条件,指定字段名称和值 lambdaQueryWrapper.inSql(User::getAge,"18,20,22"); //3.使用条件完成查询 List<User> users = userMapper.selectList(lambdaQueryWrapper); System.out.println(users); } @Test voikafbyqd inSql2(){ //1.创建QueryWrapper对象 LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>(); //2.设置条件,指定字段名称和值 lambdaQueryWrapper.inSql(User::getAge,"select age from powershop_user where age > 20"); //3.使用条件完成查询 List<User> users = userMapper.selectList(lambdaQueryWrapper); System.out.println(users); }
3.7.4. notInSql
@Test void notInSql(){ //1.创建QueryWrapper对象 LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>(); //2.设置条件,指定字段名称和值 lambdaQueryWrapper.notInSql(User::getAge,"18,20,22"); //3.使用条件完成查询 List<User> users = userMapper.selectList(lambdaQueryWrapper); System.out.println(users); } @Test void notInSql2(){ //1.创建QueryWrapper对象 LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>(); //2.设置条件,指定字段名称和值 lambdaQueryWrapper.notInSql(User::getAge,"select age from powershop_user where age > 20"); //3.使用条件完成查询 List<User> users = userMapper.selectList(lambdaQueryWrapper); System.out.println(users); }
3.8.分组查询
3.8.1. groupBy
@Test void groupBy(){ //1.创建QueryWrapper对象 QueryWrapper<User> queryWrapper = new QueryWrapper<>(); //2.设置条件,指定字段名称和值 queryWrapper.groupBy("age"); queryWrapper.select("age,count(*) as field_count"); //3.使用条件完成查询 List<Map<String, Object>> maps = userMapper.selectMaps(queryWrapper); System.out.println(maps); }
3.9.聚合查询
3.9.1. having
having过滤分组后的数据,where过滤分组前的数据。
@Test void having(){ QueryWrapper<User> queryWrapper = new QueryWrapper<>(); //分组字段 queryWrapper.groupBy("age"); //查询字段 queryWrapper.select("age,count(*) as field_count"); //聚合条件筛选 queryWrapper.having("field_count = 1"); List<Map<String, Object>> maps = userMapper.selectMaps(queryWrapper); System.out.println(maps); }
3.10.排序查询
3.10.1.升序查询 orderByAsc
@Test void orderByAsc(){ //1.创建QueryWrapper对象 LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>(); //2.设置条件,指定升序排序字段 lambdaQueryWrapper.orderByAsc(User::getAge,User::getId); //3.使用条件完成查询 List<User> users = userMapper.selectList(lambdaQueryWrapper); System.out.println(users); }
3.10.2.降序查询 orderByDesc
@Test void orderByDesc(){ //1.创建QueryWrapper对象 LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>(); //2.设置条件,指定降序排序字段 lambdaQueryWrapper.orderByDesc(User::getAge,User::getId); //3.使用条件完成查询 List<User> users = userMapper.selectList(lambdaQueryWrapper); System.out.println(users); }
3.10.3.自定义排序查询 orderBy
@Test void orderBy() { LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>(); //设置排序字段和排序的方式参数1:如果排序字段的值存在nuLL的时候,是否还要作为排序字段参与排序,参数2:是否是升序排序,参数3:排序字段 lambdaQueryWrapper.orderBy(true, true, User::getAge); lambdaQueryWrapper.orderBy(true, false, User::getId); List<User> users = userMapper.selectList(lambdaQueryWrapper); System.out.println(users); }
3.11.逻辑查询
3.11.1.内嵌逻辑查询 func
@Test
www.chinasem.cnvoid func(){
//1.创建QueryWrapper对象
LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
//2.构建逻辑判断语句
/*lambdaQueryWrapper.func(new Consumer<LambdaQueryWrapper<User>>() {
@Override
public void accept(LambdaQueryWrapper<User> userLambdaQueryWrapper) {
if(true) {
userLambdaQueryWrapper.eq(User::getId, 1);
} else {
userLambdaQueryWrapper.ne(User::getId, 1);
}
}
});*/
lambdaQueryWrapper.func(i -> {
if(true) {
i.eq(User::getId, 1);
}else {
i.ne(User::getId, 1);
}
});
//3.完成查询
List<Ukafbyqser> users = userMapper.selectList(lambdaQueryWrapper);
System.out.println(users);
}
3.11.2. and
正常拼接默认就是and
@Test void and(){ //1.创建QueryWrapper对象 LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>(); //2.构建条件查询语句 lambdaQueryWrapper.gt(User::getAge,22).lt(User::getAge,30); //3.完成查询 List<User> users = userMapper.selectList(lambdaQueryWrapper); System.out.println(users); }
and嵌套
@Test void and2(){ //1.创建QueryWrapper对象 LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>(); //2.构建条件查询语句 lambdaQueryWrapper.eq(User::getName,"wang").and(i -> i.gt(User::getAge,26).or().lt(User::getAge,22)); //3.完成查询 List<User> users = userMapper.selectList(lambdaQueryWrapper); System.out.println(users); }
3.11.3. or
@Test void or(){ //1.创建QueryWrapper对象 LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>(); //2.构建条件查询语句 lambdaQueryWrapper.lt(User::getAge,20).or().gt(User::getAge,23); //3.完成查询 List<User> users = userMapper.selectList(lambdaQueryWrapper); System.out.println(users); }
or嵌套
@Test void or2(){ LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>(); lambdaQueryWrapper.eq(User::getName,"wang").or(i -> i.gt(User::getAge,22).lt(User::getAge,26)); List<User> users = userMapper.selectList(lambdaQueryWrapper); System.out.println(users); }
3.11.4. nested
查询条件直接拼在where后面
@Test void nested(){ //1.创建QueryWrapper对象 LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>(); //2.构建条件查询语句 lambdaQueryWrapper.nested(i -> i.eq(User::getName, "Billie").ne(User::getAge, 22)); //3.完成查询 List<User> users = userMapper.selectList(lambdaQueryWrapper); System.out.println(users); }
3.12.自定义查询
3.12.1. apply
查询条件通过字符串编写直接拼在where后面
@Test void apply(){ //1.创建QueryWrapper对象 LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>(); //2.构建条件查询语句 lambdaQueryWrapper.apply("id = 1"); //3.完成查询 List<User> users = userMapper.selectList(lambdaQueryWrapper); System.out.println(users); }
3.13.分页查询
3.13.1. last
查询条件通过字符串编写直接拼在Sql语句最后
@Test void last(){ //1.创建QueryWrapper对象 LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>(); //2.构建条件查询语句 lambdaQueryWrapper.last("limit 0,2"); //3.完成查询 List<User> users = userMapper.selectList(lambdaQueryWrapper); System.out.println(users); }
3.14. exists 查询
3.14.1 exists
exists后的子查询如果有结果,则exists返回true,执行exits前的主查询语句;反之不执行主查询语句。
@Test void exists(){ //1.创建QueryWrapper对象 LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>(); //2.构建查询条件 lambdaQueryWrapper.exists("select id from powershop_user where age = 18"); //3.查询 List<User> users = userMapper.selectList(lambdaQueryWrapper); System.out.println(users); }
3.14.2 notExists
@Test void notExists(){ //1.创建QueryWrapper对象 LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>(); //2.构建查询条件 lambdaQueryWrapper.notExists("select id from powershop_user where age = 33"); //3.查询 List<User> users = userMapper.selectList(lambdaQueryWrapper); System.out.println(users); }
3.15. select 查询
选择要查询的字段
@Test void select(){ //1.创建QueryWrapper对象 LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>(); //2.构建查询条件 lambdaQueryWrapper.select(User::getId,User::getName); //3.查询 List<User> users = userMapper.selectList(lambdaQueryWrapper); System.out.println(users); }
4.高级篇
4.1.主键策略
4.1.1.AUTO策略
该策略为跟随数据库表的主键递增策略,前提是数据库表的主键要设置为自增
4.1.2.INPUT策略
该策略表示,必须由我们手动的插入id,否则无法添加数据
4.1.3.ASSIGN_ID策略
解决主键自增问题。表的数据量很大,我们需要进行分表
水平拆分就是将一个大的表按照数据量进行拆分
垂直拆分就是将一个大的表按照字段进行拆分
拆分后的数据,有三点需求
- 拆分前后主键保持有序
- 主键唯一性
- 主键不要暴露数据量
雪花算法是由一个64位的二进制组成的,最终就是一个Long类型的数值。
主要分为四部分存储
【1】1位的符号位,固定值为0
【2】41位的时间戳
【3】10位的机器码,包含5位机器id和5位服务id
【4】12位的序列号
数据表插入数据后发现一个19位长度的id,该id就是雪花算法生成的id,这是二级制的十进制表示形式
4.1.4.NONE策略
NONE策略表示不指定主键生成策略,当我们没有指定主键生成策略或者主键策略为NONE的时候,他跟随的是全局策略。默认是雪花算法策略。
4.1.5.ASSIGN_UUID策略
UUID(Universally Unique Identifier)全局唯一标识符,定义为一个字符串主键,采用32位数字组成,编码采用16进制,定义了在时间和空间都完全唯一的系统信息。
UUID的编码规则:
【1】1~8位采用系统时间,在系统时间上精确到毫秒级保证时间上的唯一性;
【2】9~16位采用底层的IP地址,在服务器集群中的唯一性;
【3】17~24位采用当前对象的HashCode值,在一个内部对象上的唯一性;
【4】25~32位采用调用方法的一个随机数,在一个对象内的毫秒级的唯一性。
通过以上4种策略可以保证唯一性。在系统中需要用到随机数的地方都可以考虑采用UUID算法。
我们想要演示UUID的效果,需要改变一下表的字段类型和实体类的属性类型
将数据库表的字段类型改为varchar(50),将实体类的属性类型改为String,并指定主键生成策略为IdType.ASSIGN_UUID
4.2.分页
分页的本质就是需要设置一个拦截器,通过拦截器拦截了SQL,通过在SQL语句的结尾添加limit关键字,来实现分页的效果
4.2.1.MybatisPlus分页插件
【1】通过配置类来指定一个具体数据库的分页插件
@Configuration public class MybatisPlusConfig { @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.mysql)); return interceptor; } }
【2】实现分页查询效果
@Test void selectPage(){ //1.创建QueryWrapper对象 LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>(); //2.创建分页查询对象,指定当前页和每页显示条数 IPage<User> page = new Page<>(1,3); //3.执行分页查询 userMapper.selectPage(page, lambdaQueryWrapper); //4.查看分页查询的结果 System.out.println("当前页码值:"+page.getCurrent()); System.out.println("每页显示数:"+page.getSize()); System.out.println("总页数:"+page.getPages()); System.out.println("总条数:"+page.getTotal()); System.out.println("当前页数据:"+page.getRecords()); }
4.2.2.自定义分页插件
【1】在UserMapper.XML映射配置文件中提供查询语句
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.powernode.mapper.UserMapper"> http://www.chinasem.cn <select id="selectByName" resultType="com.powernode.domain.User"> select * from powershop_user where name = #{name} </select> </mapper>
【2】在Mapper接口中提供对应的方法,方法中将IPage对象作为参数传入
@Mapper public interface UserMapper extends BaseMapper<User> { IPage<User> selectByName(IPage<User> page, String name); }
【3】实现分页查询效果
@Test void selectPage2(){ //1.创建分页查询对象,指定当前页和每页显示条数 IPage<User> page = new Page<>(1,2); //2.执行分页查询 userMapper.selectByName(page,"Mary"); //3.查看分页查询的结果 System.out.println("当前页码值:"+page.getCurrent()); System.out.println("每页显示数:"+page.getSize()); System.out.println("总页数:"+page.getPages()); System.out.println("总条数:"+page.getTotal()); System.out.println("当前页数据:"+page.getRecords()); }
到此这篇关于史上最全MybatisPlus从入门到精通的文章就介绍到这了,更多相关MybatisPlus从入门到精通内容请搜索China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程China编程(www.chinasem.cn)!
这篇关于史上最全MybatisPlus从入门到精通的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!