1.分页插件PaginationInterceptor
@Configuration
@MapperScan("com.baomidou.mybatisplus.samples.pagination.mapper")
public class MybatisPlusConfig {
/**
* 分页插件
*/
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}
}
测试代码
1.调用selectPage方法
2.调用mySelectPage自定义方法
@Test
public void tests() {
System.out.println("----- baseMapper 自带分页 ------");
Page<User> page = new Page<>(1, 5);
IPage<User> userIPage = mapper.selectPage(page, new QueryWrapper<User>()
.eq("age", 20).eq("name", "Jack"));
assertThat(page).isSameAs(userIPage);
System.out.println("总条数 ------> " + userIPage.getTotal());
System.out.println("当前页数 ------> " + userIPage.getCurrent());
System.out.println("当前每页显示数 ------> " + userIPage.getSize());
print(userIPage.getRecords());
System.out.println("----- baseMapper 自带分页 ------");
System.out.println("json 正反序列化 begin");
String json = JSON.toJSONString(page);
Page<User> page1 = JSON.parseObject(json, TypeBuilder.newInstance(Page.class).addTypeParam(User.class).build());
print(page1.getRecords());
System.out.println("json 正反序列化 end");
System.out.println("----- 自定义 XML 分页 ------");
MyPage<User> myPage = new MyPage<User>(1, 5).setSelectInt(20).setSelectStr("Jack");
ParamSome paramSome = new ParamSome(20, "Jack");
MyPage<User> userMyPage = mapper.mySelectPage(myPage, paramSome);
assertThat(myPage).isSameAs(userMyPage);
System.out.println("总条数 ------> " + userMyPage.getTotal());
System.out.println("当前页数 ------> " + userMyPage.getCurrent());
System.out.println("当前每页显示数 ------> " + userMyPage.getSize());
print(userMyPage.getRecords());
System.out.println("----- 自定义 XML 分页 ------");
}
IPage<T> selectPage(IPage<T> page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
<select id="mySelectPage" resultType="com.baomidou.mybatisplus.samples.pagination.entity.User">
select *
from user where (age = #{pg.selectInt} and name = #{pg.selectStr})
or (age = #{ps.yihao} and name = #{ps.erhao})
</select>
2.性能分析插件PerformanceInterceptor
@Configuration
public class MybatisPlusConfig {
@Bean
public PerformanceInterceptor performanceInterceptor(){
//启用性能分析插件
return new PerformanceInterceptor();
}
}
日志输出
Time:10 ms - ID:com.baomidou.samples.performance.mapper.StudentMapper.selectList
Execute SQL:SELECT id,name,age FROM student
3.乐观锁插件OptimisticLockerInterceptor
需要加Version注解
@Data
public class User {
@TableId(value = "id", type = IdType.AUTO)
private Long id;
private String name;
private Integer age;
private String email;
@Version
private Integer version;
}
测试代码:
@Test
public void testUpdateByIdSucc() {
User user = new User();
user.setAge(18);
user.setEmail("test@baomidou.com");
user.setName("optlocker");
user.setVersion(1);
userMapper.insert(user);
Long id = user.getId();
User userUpdate = new User();
userUpdate.setId(id);
userUpdate.setAge(19);
userUpdate.setVersion(1);
Assert.assertEquals("Should update success", 1, userMapper.updateById(userUpdate));
Assert.assertEquals("Should version = version+1", 2, userUpdate.getVersion().intValue());
}
输出结果
Time:10 ms - ID:com.baomidou.mybatisplus.samples.optlocker.mapper.UserMapper.insert
Execute SQL:INSERT INTO user ( name, age, email, version ) VALUES ( ?, ?, ?, ? ) {1: 'optlocker', 2: 18, 3: 'test@baomidou.com', 4: 1}
Time:0 ms - ID:com.baomidou.mybatisplus.samples.optlocker.mapper.UserMapper.updateById
Execute SQL:UPDATE user SET age=?, version=? WHERE id=? AND version=? {1: 19, 2: 2, 3: 6, 4: 1}
4.执行分析插件SqlExplainInterceptor
拦截防止更新和删除表时不带条件的全局操作