在Config类下创建插件(Bean)
@Configuration
public class MybatisPlusConfig {
//乐观锁插件
@Bean
public MybatisPlusInterceptor lockInterceptor() {
MybatisPlusInterceptor lockInterceptor = new MybatisPlusInterceptor();
lockInterceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
return lockInterceptor;
}
//分页插件
@Bean
public MybatisPlusInterceptor pageInterceptor() {
MybatisPlusInterceptor pageInterceptor = new MybatisPlusInterceptor();
pageInterceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.H2));
return pageInterceptor;
}
}
一.乐观锁(需要数据库有version字段)
当要更新一条记录的时候,希望这条记录没有被别人更新;若更新成功,则版本号+1
//乐观锁
@Test
void lock(){
User user = userMapper.selectById(5L);
user.setName("TestLock");
user.setEmail("TestLock@qq.com");
userMapper.updateById(user);
}
@Test
void lock2(){
//线程1
User user = userMapper.selectById(5L);
user.setName("TestLock");
user.setEmail("TestLock@qq.com");
//模拟线程2
User user2 = userMapper.selectById(5L);
user2.setName("TestLock2");
user2.setEmail("TestLock2@qq.com");
userMapper.updateById(user2);
//乐观锁触发 此次修改不生效
userMapper.updateById(user);
}
版本字段
执行第一个测试后,可以看到第五条数据的版本号变成了2
执行第二个测试,可以看到最终执行了第一次更新,第二次更新由于乐观锁的存在而失败了
这是由于第一次更新之后,版本号变成了3,而第二次更新需要在版本号2上进行,所以更新失败
二.自动分页
//分页查询
@Test
void limit() {
Page<User> page = new Page<>(2, 3);
userMapper.selectPage(page,null);
//获取分页记录表并循环输出
page.getRecords().forEach(System.out::println);
//获取数据总行数(不限于当前页)
System.out.println("total row = " + page.getTotal());
}
注:page的参数为"当前页数"与"分页行数"
一些基础查询
//查询
@Test
void query() {
List<User> users = userMapper.selectList(null);
users.forEach(System.out::println);
}
@Test
void selectById() {
User user = userMapper.selectById(1L);
System.out.println(user);
}
@Test
void selectByBatchIds() {
List<User> user = userMapper.selectBatchIds(Arrays.asList(1, 2, 3));
user.forEach(System.out::println);
}
@Test
void selectByMap() {
HashMap<String, Object> map = new HashMap<>();
map.put("name", "Jone");
List<User> user = userMapper.selectByMap(map);
user.forEach(System.out::println);
}