MybatisPlus学习之(五)逻辑删除/ 自动填充/ 性能分析/ 乐观锁
程序员文章站
2022-07-13 09:20:29
...
一.配置文件
1.逻辑删除的全局配置logicDeleteValue在dbconfig配置里面
2.分页,性能分析,乐观锁都在sqlSessionFactoryBean的plugins里面配置
3.逻辑删除,自动填充,自定义SQL注入在MP全局配置里面
<!-- 配置 SqlSessionFactoryBean (Mybatis_PLUS)-->
<bean id="sqlSessionFactoryBean" class="com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean">
<!-- 数据源 -->
<property name="dataSource" ref="dataSource"/>
<!-- 别名处理 -->
<property name="typeAliasesPackage" value="com.it.mp.bean"/>
<!--加载配置-->
<property name="configLocation" value="mybatis-config.xml"/>
<!--全局MybatisPlus策略配置-->
<property name="globalConfig" ref="globalConfig"/>
<!-- 插件注册-拦截器 -->
<property name="plugins">
<list>
<!-- 1.注册分页插件 -->
<bean class="com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor"></bean>
<!-- 3.注册性能分析插件 -->
<bean class="com.baomidou.mybatisplus.extension.plugins.PerformanceInterceptor">
<property name="format" value="true"></property>
<property name="maxTime" value="100"></property>
</bean>
<!-- 4.注册乐观锁插件 -->
<bean class="com.baomidou.mybatisplus.extension.plugins.OptimisticLockerInterceptor">
</bean>
</list>
</property>
</bean>
<!--定义MP的全局策略配置-->
<bean id="globalConfig" class="com.baomidou.mybatisplus.core.config.GlobalConfig">
<!--全局配置注入-->
<property name="dbConfig" ref="dbConfig"/>
<!-- 1.定义自定义注入器 -->
<property name="sqlInjector" ref="mySqlInjector"></property>
<!-- 2.注入逻辑删除 -->
<!--<property name="sqlInjector" ref="logicSqlInjector"></property>-->
<!-- 3.字段填充-->
<property name="metaObjectHandler" ref="myMetaObjectHandler"></property>
</bean>
<!--dbConfig是globalConfig的一个内置类-->
<bean id="dbConfig" class="com.baomidou.mybatisplus.core.config.GlobalConfig.DbConfig">
<!--配置主键策略(这里选择的是主键自增)-->
<property name="idType" value="AUTO"/>
<!--配置表名前缀-->
<!--<property name="tablePrefix" value="tbl_"></property>-->
<!-- 注入逻辑删除全局值 -->
<property name="logicDeleteValue" value = "-1"></property>
<property name="logicNotDeleteValue" value="1"></property>
</bean>
<!-- 公共字段填充 处理器 -->
<bean id="myMetaObjectHandler" class="com.Alice.mp.metaObjectHandler.MyMetaObjectHandler"> </bean>
二.逻辑删除
1.在实体类中确定字段
2.dbConfig配置里面加入
<!-- 注入逻辑删除全局值 -->
<property name="logicDeleteValue" value = "-1"></property>
<property name="logicNotDeleteValue" value="1"></property>
3.在applicationContexy.xml中注入插件
<!--定义MP的全局策略配置-->
<bean id="globalConfig" class="com.baomidou.mybatisplus.core.config.GlobalConfig">
<!--全局配置注入-->
<property name="dbConfig" ref="dbConfig"/>
<!-- 1.定义自定义注入器 -->
<property name="sqlInjector" ref="mySqlInjector"></property>
<!-- 2.注入逻辑删除 -->
<!--<property name="sqlInjector" ref="logicSqlInjector"></property>-->
<!-- 3.字段填充-->
<property name="metaObjectHandler" ref="myMetaObjectHandler"></property>
</bean>
<!-- 逻辑删除 -->
<bean id="logicSqlInjector" class="com.baomidou.mybatisplus.extension.injector.LogicSqlInjector"></bean>
4.测试
/**
* 测试逻辑删除
*
*/
@Test
public void testLogicDelete(){
TblEmployee ee = new TblEmployee();
ee.setId(31);
tblEmployeeMapper.deleteById(ee);
}
结果:
三.字段填充
1.在entity实体类中指定要填充的字段,例子是lastName字段填充,insert和update操作都需要填充
2.自定义填充内容设置
//自定义的填充内容
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
//当插入时,该字段为空的话,就填充
Object fieldValue = getFieldValByName("lastName",metaObject);
if(null == fieldValue) {
System.out.println("*******插入操作 满足填充条件*********");
setFieldValByName("lastName", "weiyunhui", metaObject);
}
}
@Override
public void updateFill(MetaObject metaObject) {
//当修改时,该字段为空的话,就填充
Object fieldValue = getFieldValByName("lastName",metaObject);
if(null == fieldValue) {
System.out.println("*******修改操作 满足填充条件*********");
setFieldValByName("lastName", "xqw", metaObject);
}
}
}
3.测试
/**
* 测试字段填充
*/
@Test
public void testMetaObjectHandler(){
TblEmployee ee = new TblEmployee();
TblEmployee ee1 = new TblEmployee();
//插入时字段填充
ee.setAge(28);
ee.setGender("0");
ee.setEmail("aaa@qq.com");
tblEmployeeMapper.insert(ee);
//修改时字段填充
ee1.setEmail("aaa@qq.com");
ee1.setGender("1");
Integer result = tblEmployeeMapper.update(ee1, null);
System.out.println(ee + "; result = "+ result);
}
四.性能分析
参数:maxTime SQL 执行最大时长,超过自动停止运行,有助于发现问题。
参数:format SQL SQL是否格式化,默认false。
五.乐观锁
乐观锁实现方式:
取出记录时,获取当前version
更新时,带上这个version
执行更新时, set version = newVersion where version = oldVersion
如果version不对,就更新失败
1.在entity实体类中指定字段为锁控制字段
2.测试
/**
* 测试乐观锁
* 版本低于数据库的版本的话就不能执行
*/
@Test
public void testLock(){
TblEmployee ee = new TblEmployee();
ee.setId(27);
//必须要加上.setVersion(原来版本)之后才能更新version的数值
ee.setVersion(1);
ee.setEmail("@atguigu.com");
tblEmployeeMapper.updateById(ee);
System.out.println(ee);
}
参考:https://blog.csdn.net/xiaozhegaa/article/details/85042299
上一篇: Map集合