本篇介紹easymybatis如配置樂觀鎖和邏輯刪除。java
easymybatis提供的樂觀鎖使用方式跟JPA同樣,使用@Version註解來實現。即:數據庫增長一個int或long類型字段version,而後實體類version字段上加上@Version註解便可。實現原理是根據mysql的行鎖機制(InnoDB下),同一條記錄只能被一條SQL執行,後面的SQL排隊等待。這樣version改變後,等待中的SQL仍是老的version號,所以更新失敗。mysql
@Version private Long version;
從1.7版本開始支持邏輯刪除功能,即更新一個字段標記爲已刪除。查詢的時候會自動過濾掉已刪除的數據。spring
假設數據庫表中有一個字段is_deleted類型爲tinyint,0表示未刪除,1表示已刪除。sql
實體類對應代碼以下:數據庫
在執行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
假設1表示未刪除,2表示已刪除,@LogicDelete的設置方法以下:@LogicDelete(notDeleteValue = 「1」, deleteValue = 「2」)。若是每一個實體類都要這樣設置的話會很麻煩,easymybatis提供了全局配置app
# 未刪除數據庫保存的值,默認爲0 mybatis.logic-not-delete-value=1 # 刪除後數據庫保存的值,默認爲1 mybatis.logic-delete-value=2
<!-- 替換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>