七、插件扩展
7.1.注册分页插件
<bean id="sqlSessionFactoryBean" class="com.baomidou.mybatisplus.spring.MybatisSqlSessionFactoryBean">
<!-- 数据源 -->
<property name="dataSource" ref="dataSource"></property>
<property name="configLocation" value="classpath:mybatis-config.xml"></property>
<!-- 别名处理 -->
<property name="typeAliasesPackage" value="com.luo.beans"></property>
<!-- 注入全局MP策略配置 -->
<property name="globalConfig" ref="globalConfiguration"></property>
<property name="plugins">
<list>
<bean class="com.baomidou.mybatisplus.plugins.PaginationInterceptor"></bean>
</list>
</property>
</bean>
真正的分页查询
ApplicationContext ioc = new ClassPathXmlApplicationContext("applicationContext.xml");
private UserMapper userMapper = ioc.getBean("userMapper",UserMapper.class);
@Test
public void testPage(){
Page<User> page = new Page<User>(1,4);
List<User> users = userMapper.selectPage(page,null);
page.setRecords(users);
System.out.print("总记录数"+page.getTotal());
System.out.print("当前页码"+page.getCurrent());
System.out.print("总页码"+page.getPages());
System.out.print("每页记录数"+page.getSize());
System.out.print("是否有前一页"+page.hasPrevious());
System.out.print("是否有后一页"+page.hasNext());
}
说明:我们可以将分页查询的数据放在page对象中,返回前端一个page对象即可
7.2.执行分析插件
<bean class="com.baomidou.mybatisplus.plugins.SqlExplainInterceptor">
<property name="stopProceed" value="true"></property>
</bean>
测试如下:
@Test
public void testDeltetAll(){
userMapper.delete(null);
}
sql分析插件只支持mysql5.6.3以上的版本,本质就是通过sql分析命令Explain分析当前的sql语句,根据结果集中的Extra列来断定当前是否全表操作;
7.3.性能分析插件
性能分析插件用于输出每秒sql语句和其执行时间,首先注册插件,如下:
<bean class="com.baomidou.mybatisplus.plugins.PerformanceInterceptor">
<property name="format" value="true"></property>
</bean>
测试如下:
@Test
public void testPer(){
Dept dept = new Dept();
dept.setDeptName("开发部");
dept.setDeptCount("34");
dept.setDeptBegintime(new Date());
dept.insert();
}
结果如下:
Time:142 ms - ID:com.luo.mapper.DeptMapper.insert
Execute SQL:
INSERT
INTO
tbl_dept
( dept_count, dept_name, dept_beginTime )
VALUES
( '34', '开发部', '2018-08-26 23:09:17.293' )]
7.4.乐观锁插件
当我们在开发中,有时需要判断,当我们更新一条数据库记录时,希望这条记录没有被别人更新,这个时候就可以使用乐观锁插件,他的原理就是,取出记录时,获取当前的version,更新的时候带上这个version,执行更新的时候set version = yourVersion+1 where version = yourVersion
,如果version不对,则更新失败,注意的是:@version用于注解实体字段,必须要有
;
首先,注册插件
<bean class="com.baomidou.mybatisplus.plugins.OptimisticLockerInterceptor"></bean>
实体类添加对应属性,同时数据库表也要添加对应字段
@Version
private Integer version;
测试如下:
@Test
public void testVersion(){
Dept dept = new Dept();
dept.setDeptName("测试部");
dept.setVersion(1);
dept.setId(1);
dept.updateById();
}
如果:这个时候将数据库version改为2,在执行更新就会显示更新记录数为0;