文章目录
- MybatisPlus的知识点
- 常用注解
-
- 条件查询方式
- 按条件查询
- NULL值处理
- 查询投影
- 查询条件的设定
- 字段映射与表名映射
- id生成策略(insert)
- 逻辑删除(Delete/Update)
- 乐观锁
MybatisPlus的知识点
![在这里插入图片描述](https://img-blog.csdnimg.cn/791d0cbca81b4f1da30392d69a26af86.png)
通过使用dao的接口来调用方法
- insert() 给数据库中插入某个元素或对象
- deleteById() 通过id进行产删除
- updateById(Object) 修改元素的某项值
- selectById() 通过id来进行查询
- selectList(null) 查询所有
常用注解
- @Data,为当前实体类在编译期设置对应的get/set方法,无参/无参构造方法,toString方法,
hashCode方法,equals方法等
分页功能
@Configuration
public class MybatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor(){
MybatisPlusInterceptor mpInterceptor = new MybatisPlusInterceptor();
mpInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());
mpInterceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
return mpInterceptor;
}
@Test
void testSelectPage(){
IPage<User> page=new Page<>(1,3);
userDao.selectPage(page,null);
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将条件查询的条件封装在Wrapper中,从而进行条件查询
- 方式一
QueryWrapper qw = new QueryWrapper();
qw.lt("age", 18);
List<User> userList = userDao.selectList(qw);
System.out.println(userList);
QueryWrapper<User> wq = new QueryWrapper<>();
wq.lambda().lt(User::getAge,10);
List<User> userList = userDao.selectList(wq);
System.out.println(userList);
` lqw.lt(User::getAge, 30);
lqw.gt(User::getAge,10);
lqw.lt(User::getAge,10).or().gt(User::getAge,30);
and
NULL值处理
lqw.lt(null!=uq.getAge2(), User::getAge, uq.getAge2());
lqw.gt(null!=uq.getAge(), User::getAge,uq.getAge());
查询投影
- LambdaQueryWapper只能查询字段内中的属性名
- QueryWrapper可以查询字段名和一些函数
LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<>();
lqw.select(User::getId,User::getUsername,User::getAge);
List<User> userList = userDao.selectList(lqw);
System.out.println(userList);
qw.select("count(*) as count","gender");
qw.groupBy("gender");
List<Map<String, Object>> userList = userDao.selectMaps(qw);
查询条件的设定
- 范围匹配(> 、 = 、between)
- 模糊匹配(like)
- 空判定(null)
- 包含性匹配(in)
- 分组(group)
- 排序(order)
wrapper.eq("username", "周周");
list.add(18);
list.add(19);
userDao.deleteBatchIds(list);
字段映射与表名映射
- 在模型类属性上方,使用@TableField属性注解,通过value属性,设置当前属性对应的数据库表中的字段关系。
@TableField(value = “password”,select = false) //将密码暴露很危险,不能被轻易查询 - 使实体类类名与数据表表名对应
@TableName(value = “tb_user”)
id生成策略(insert)
![在这里插入图片描述](https://img-blog.csdnimg.cn/5c8650106cfc4cb28b695cee5793ab4b.png)
逻辑删除(Delete/Update)
- 逻辑删除:为数据设置是否可用状态字段,删除时设置状态字段为不可用状态,数据保留在数据库中
@TableLogic(value = "0",delval = "1")
private int deleted;
乐观锁
乐观锁主张的思想是什么?
- 业务并发现象带来的问题:秒杀
- 使用@Version来定义一个乐观锁的字段
@Version
private Integer version;
mpInterceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
- 添加乐观锁后,操作成功后,version会+1, 当要操作同一个值时
User user = userDao.selectById(3L);
User user2 = userDao.selectById(3L);
user2.setName("Jock aaa");
userDao.updateById(user2);
user.setName("Jock bbb");
userDao.updateById(user);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)