分页插件
在applicationContext.xml的spring与MaBatis整合的SqlSessionFactoryBean中配置一个属性
1)com.baomidou.mybatisplus.plugins.PaginationInterceptor
编写测试类
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
EmployeeMapper employeeMapper = ctx.getBean("employeeMapper",EmployeeMapper.class);
/**
分页测试
*/
@Test
public void testPage(){
List<Employee> employees = employeeMapper.selectPage(new Page<>(1, 1), null);
System.out.println(employees);
}
使用了分页插件后的分页就不是以前的假分页了
查询的SQL语句中就有limit关键字了,以前没有使用分页插件的时候,就是使用的内存分页,将所有的数据查出来,再进行分页。
查看分页的其他信息
Page page = new Page<>(1, 1);
@Test
public void testPage(){
List<Employee> employees = employeeMapper.selectPage(page, null);
System.out.println(employees);
System.out.println("》》》》获取与页面相关的一些信息《《《《");
System.out.println("总条数:"+page.getTotal());
System.out.println("当前页数:"+page.getCurrent());
System.out.println("总页码:"+page.getPages());
System.out.println("每页显示的条数:"+page.getSize());
System.out.println("是否有上页:"+page.hasPrevious());
System.out.println("是否有下页:"+page.hasNext());
}
可以将查询的对象封装到Page对象中
//通过setRecords()方法将查询出来的对象放到Page对象中
page.setRecords(employees);
这样的话我们进行分页功能的编写会更加简单方便
执行分析插件
- com.baomidou.mybatisplus.plugins.SqlExplainInterceptor
配置插件同上
-
SQL 执行分析拦截器,只支持 MySQL5.6.3 以上版本
-
该插件的作用是分析 DELETE UPDATE 语句,防止小白 或者恶意进行 DELETE UPDATE 全表操作
例如:当我们不小心或者故意对数据库进行全表删除时,此插件会阻止此操作
当我们执行下列的方法时
由于我的MySQL版本是5.5的,所以当我删除全表的时候还是生效了,同时也会给你一个警告,告诉你这个插件无法使用,除非升级到5.6.3以上
4) 只建议在开发环境中使用,不建议在生产环境使用
- 在插件的底层 通过 SQL 语句分析命令:Explain 分析当前的 SQL 语句, 根据结果集中的 Extra 列来断定当前是否全表操作
性能分析插件
1)com.baomidou.mybatisplus.plugins.PerformanceInterceptor
当超过规定的时间时,会显示如下错误。
2)性能分析拦截器,用于输出每条SQL语句及执行时间
3)性能执行分析,开发环境使用,超过指定时间,停止运行,有助于发现问题
乐观锁
- com.baomidou.mybatisplus.plugins.OptimisticLockerInterceptor
2) 如果想实现如下需求: 当要更新一条记录的时候,希望这条记录没有被别人更新
-
乐观锁的实现原理: 取出记录时,获取当前 version2更新时,带上这个 version2执行更新时, set version = yourVersion+1 where version = yourVersion 如果 version 不对,就更新失败
-
@Version 用于注解实体字段,必须要有。
需要在实体类中添加version属性,并加上注解@Version,还有数据库中也加上此属性。
测试:
当数据库中version为2时,测试一下代码
/**
* 测试乐观锁
*/
@Test
public void testOptimisticLockerInterceptor(){
Employee emp = new Employee();
emp.setId(8);
emp.setAge(4);
emp.setEmail("zzn@blh.com");
emp.setGender("0");
emp.setLastName("ycy");
emp.setVersion(1);
employeeMapper.updateById(emp);
}
此时数据库影响条数为0,说明没有进行更改。