mybatis 乐观锁和逻辑删除

本篇介绍easymybatis如配置乐观锁和逻辑删除。java

乐观锁

easymybatis提供的乐观锁使用方式跟JPA同样,使用@Version注解来实现。即:数据库增长一个int或long类型字段version,而后实体类version字段上加上@Version注解便可。实现原理是根据mysql的行锁机制(InnoDB下),同一条记录只能被一条SQL执行,后面的SQL排队等待。这样version改变后,等待中的SQL仍是老的version号,所以更新失败。mysql

@Version private Long version; 
  • 注:更新不成功不会抛出异常,而是update返回值为0

逻辑删除

从1.7版本开始支持逻辑删除功能,即更新一个字段标记为已删除。查询的时候会自动过滤掉已删除的数据。spring

假设数据库表中有一个字段is_deleted类型为tinyint,0表示未删除,1表示已删除。sql

实体类对应代码以下:数据库


 
 
 
 
public class User { @LogicDelete private Byte isDeleted; }

在执行dao.del(user);时会触发UPDATE语句,将is_deleted字段更新为1。springboot

若是is_deleted类型为char(1),f表示未删除,t表示已删除。mybatis

@LogicDelete(notDeleteValue = "f", deleteValue = "t") private String isDeleted;

@LogicDelete提供两个属性mvc

  • notDeleteValue:指定未删除时的值,不指定默认为0
  • deleteValue:指定删除后保存的值,不指定默认为1

假设1表示未删除,2表示已删除,@LogicDelete的设置方法以下:@LogicDelete(notDeleteValue = “1”, deleteValue = “2”)。若是每一个实体类都要这样设置的话会很麻烦,easymybatis提供了全局配置app

  • springboot下,application.properties添加
# 未删除数据库保存的值,默认为0 mybatis.logic-not-delete-value=1 # 删除后数据库保存的值,默认为1 mybatis.logic-delete-value=2
  • springmvc设置方式以下:
<!-- 替换org.mybatis.spring.SqlSessionFactoryBean --> <bean id="sqlSessionFactory" class="net.oschina.durcframework.easymybatis.ext.SqlSessionFactoryBeanExt"> <property name="dataSource" ref="dataSource" /> <property name="configLocation"> <value>classpath:mybatis/mybatisConfig.xml</value> </property> <property name="mapperLocations"> <list> <value>classpath:mybatis/mapper/*.xml</value> </list> </property> <!-- 如下是附加属性 --> <!-- dao所在的包名,跟MapperScannerConfigurer的basePackage一致 多个用;隔开 --> <property name="basePackage" value="com.myapp.dao" /> <property name="config"> <bean class="net.oschina.durcframework.easymybatis.EasymybatisConfig"> <property name="logicNotDeleteValue" value="1"/> <property name="logicDeleteValue" value="2"/> </bean> </property> </bean>

 

  • 注:若是同时设置了@LogicDelete参数和全局配置,会优先读取注解中的配置。
相关文章
相关标签/搜索