(傲娇的白狐)Mybatis-plus乐观锁 条件构造器wrapper
Mybatis-plus乐观锁 条件构造器wrapper
1.条件构造器wrapper
- 平时直接获取数据库的所有数据 是 userceshimapper.selectList(null);
wapper 写为空值 现在可以对 wapper 进行操作 来实现各种复杂的 查询条件
列:// 查询不为空的 摸条件大于的 update_time不空 version 等于2
QueryWrapper<Userceshi> que=new QueryWrapper();
que.isNotNull("update_time") //查询条件为 某某不为空
.ge("id",2); // 条件为 某某大于等于 多少
List<Userceshi> list = userceshimapper.selectList(que);
// 输出
list.forEach(
System.out::println
);
-------- 某数多少之间
// 查询 某个属性 在 多少之间的
wrapper.between("id",2,4);
List<Userceshi> list = userceshimapper.selectList(wrapper);
---------- 模糊查询
wrapper.notLike("name","1")
.likeRight("name","洛")
;
// selectMaps 用于 wrapper 模糊查询 一般是 selectByMap 用于 hasmap
List<Map<String, Object>> maps = userceshimapper.selectMaps(wrapper);
---------- 插入sql语句 条件加上 筛选自己所写的查询语句的结果
// 插入SQL语句 此时 条件就变为 and id in (自己所写的查询语句的结果)
wrapper.inSql("id","select id from userceshi where id < 3 ");
List<Object> objects = userceshimapper.selectObjs(wrapper);
例:
//

// 插入SQL语句 此时 条件就变为 and id in (自己所写的查询语句的结果)
wrapper.inSql("id","select id from userceshi where id < 3 ");
--------- 筛选
// 根据所填条件 进行排序
wrapper.orderByAsc("version");
2.乐观锁
乐观锁
顾名思义 是非常乐观的,他总是认为不会出现问题,无论干什么不去上锁!如果出了问题
再次更新测试
悲观锁
顾名思义 是非常悲观的
如果没有乐观锁 ,那么插队进入的数据将会被覆盖
首先确定 表中有version int 字段 每次执行操作都会加上 条件 version=1 也就是上一次操作时 version的值。
已修改为例:
首先 在实体类里 的version变量上方 加上
@Version
private int version;
新建一个 config类 用于注释 乐观类
@EnableTransactionManagement //自动管理事务
@MapperScan("com.example.demo.mapper") //扫描包 个人习惯 用于扫描作用mybatis-plus
@Configuration// 配置类类
public class Myversion {
// 乐观锁
@Bean
public OptimisticLockerInterceptor optimisticLockerInterceptor() {
return new OptimisticLockerInterceptor();
}
}
----------- 运行
当有其他方法插队调用同一个对象时,乐观锁就会启动
认为不出错,如果没有乐观锁,默认插队进入的就会被覆盖
Userceshi user = userceshimapper.selectById(1); //虽然原有方法先实例化,但被插队。他人先执行
user.setName("洛洛11");
Userceshi user1 = userceshimapper.selectById(1);
user.setName("洛洛22");
userceshimapper.updateById(user1); //插入者先执行,没有乐观锁就会被覆盖
userceshimapper.updateById(user); //原有后执行

浙公网安备 33010602011771号