MybatisPlus之基本使用
小胡不吃芹菜 · 收录于 2023-09-24 04:52:41 · source URL
实体类相关注解
@TableName注解用于指定当前实体类映射的表名: 如果实体类类名和表名一致,该注解可以忽略;如果不一致,则必须指定表名; 1)value:指定表名
@TableId注解指定主键列映射的属性: 1)value = "id":指定主键列列名 2)type = IdType.AUTO:表示主键列开启了主键自增;添加操作还会自动实现主键值回填;
@TableField注解指定非主键列的属性映射的列名: 如果实体类的属性名和表的列名一致,该注解可以忽略;如果不一致,则必须指定列名; 1)value:指定列名
//表示该属性在表中没有映射的列,当从数据库中查询后返回对象的时候,如果数据库中不存在该列,则需要给该属性上添加该注解,不然会报错 @TableField(exist = false)
主启动类添加注解
`
//配置扫描器指定Mapper接口的包 @MapperScan(basePackages = "com.xa.mapper")
不想在主启动类上添加这个注解的话,可以在mapper包下的接口上都添加**@Mapper**注解
参数Wrapper对象
参数Wrapper对象表示(封装的是)条件,所以将其称为条件对象,其常用的子类有两个:
1)QueryWrapper
2)LambdaQueryWrapper
QueryWrapper
1)一般都是无参构造器创建对象
2)调用相应的方法向QueryWrapper对象中封装相应的条件:
方法大致解析
- eq(String cloumn, Object value) — 参数一列等于参数二的值 — =
- ge(String cloumn, Object value) — 参数一列大于等于参数二的值 — >=
- gt(String cloumn, Object value) — 参数一列大于参数二的值 — >
- le(String cloumn, Object value) — 参数一列小于等于参数二的值 — <=
- lt(String cloumn, Object value) — 参数一列小于参数二的值 — <
- ne(String cloumn, Object value) — 参数一列不等于参数二的值 — !=
- between(String cloumn, Object v1, Object v2) — 参数一列的值在参数二和参数三值之间 — between and
- in(String cloumn, Object…values) — 参数一列的值在参数二可变长参数内 — in (值…)
- notin(String cloumn, Object…values) — 参数一列的值不在参数二可变长参数内 — not in (值…)
- like(String cloumn, Object value) — 参数一列的值像参数二值 — like …
- notLike(String cloumn, Object value) — not like …
- orderByAsc(String…cloumn) — 按照参数列升序排序
- orderByDesc(String…cloumn) — 按照参数列降序排序
- groupBy(String…cloumn) — 按照参数列分组
LambdaQueryWrapper对象
LambdaQueryWrapper的创建 – 一般也是无参构造器
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
组装(封装)条件:
用的方法和QueryWrapper是一样的,区别是QueryWrapper的方法中列名是字符串形式,而LambdaQueryWrapper列名是函数式接口 – 实体类列名::属性的get方法名 – 从实体类中通过get方法拿到属性即列;可以采用连调方式来进行封装条件,更加简洁
示例:
List<User> userList = userMapper.selectList( new LambdaQueryWrapper<User>() .eq(!StringUtils.isEmpty(sex), User::getSex, sex) .gt(age > 0, User::getAge, age) );
分页
第一步:
注入MybatisPlusInterceptor 类
@Bean public MybatisPlusInterceptor mybatisPlusInterceptor(){ MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); return interceptor; }
第二步:不带条件
//对查询的所有用户分页,每页2行第1页 Page<Users> pg = new Page<>(1,2); pg = usersService.page(pg); long total = pg.getTotal();//总行数 System.out.println(total);//4 long pages = pg.getPages();//总页数 System.out.println(pages);//2 List<Users> userList = pg.getRecords();//当前页数据 //[Users(id=2, name=张三, age=21, sex=男, birthday=2021-06-24), // Users(id=3, name=李四, age=22, sex=女, birthday=2021-06-24)] System.out.println(userList); }
第二步:带条件
@Test public void pageTest2(){ //查询所有性别为女的用户并分页,每页1行第1页 Page<Users> pg = new Page<>(1,1); pg = usersService.page(pg, new LambdaQueryWrapper<Users>() .eq(Users::getSex, "女") ); //[Users(id=3, name=李四, age=22, sex=女, birthday=2021-06-24)] System.out.println(pg.getRecords()); }