一、公共字段自動填充簡介
顧名思義:就是在更新或插入數據時,如果數據項沒有設置,則會填充默認的值
在這裏就會涉及到元數據處理接口以及它的兩個方法:
com.baomidou.mybatisplus.mapper.MetaObjectHandler
insertFill(MetaObject metaObject) 這個方法是插入數據時自動填充的邏輯方法
updateFill(MetaObject metaObject) 這個方法是更新數據時自動填充的邏輯方法
而MetaObject這個是MyBatis提供的一個封裝對象的類,用於更好的獲取對象的相關信息。
二、公共字段自動填充的配置如下
2.1、爲需要自動填充的實體屬性添加註解
public class User {
@TableId(type=IdType.AUTO)
private Integer id;
@TableField(fill=FieldFill.INSERT_UPDATE) //當插入和更新都會進行字段的填充
private String name;
@TableLogic //標誌是一個邏輯標識符號
private Integer deleteFlag;
// set methods
// get methods
}
@TableFiled這個註解的fill屬性提供三種自動填充設置
2.2、創建一個類繼承MetaObjectHandler
實現相應的方法,在插入和更新數據時如何自動填充的邏輯
public class MyMetaObjectHandler extends MetaObjectHandler{
//插入時自動填充的邏輯方法
@Override
public void insertFill(MetaObject metaObject) {
// TODO Auto-generated method stub
System.out.println("###調用insertFill方法###");
Object obj = getFieldValByName("name", metaObject);
if (obj == null) {
setFieldValByName("name", "插入填充test", metaObject);
}
}
//更新時自動填充的邏輯方法
@Override
public void updateFill(MetaObject metaObject) {
// TODO Auto-generated method stub
System.out.println("###調用updateFill方法###");
Object obj = getFieldValByName("name", metaObject);
if (obj == null) {
setFieldValByName("name", "更新填充test", metaObject);
}
}
}
2.3、在applicationContext.xml配置文件中進行配置
<!-- mybatis-plus全局配置策略 ,這樣避免重複在每一個實體中使用註解進行配置-->
<bean id="globalConfiguration" class="com.baomidou.mybatisplus.entity.GlobalConfiguration">
<property name="dbColumnUnderline" value="true"></property> <!-- 2.3版本後默認配置數據庫下劃線-->
<!-- 指定數據庫ID生成策略 0:數據庫自增-->
<property name="idType" value="0"></property>
<!-- 指定數據庫表前綴 -->
<property name="tablePrefix" value="tbl_"></property>
<!-- 注入處理器方法 -->
<property name="metaObjectHandler" ref="myMetaObjectHandler"></property>
</bean>
<!-- 注入處理器的bean -->
<bean id="myMetaObjectHandler" class="cn.hjj.mp.handler.MyMetaObjectHandler"></bean>
2.4、測試代碼如下
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:applicationContext.xml"})
public class TestMetaObjectHandler {
@Autowired
private UserMapper userMapper;
@Test
public void testInsert() {
User user = new User();
user.setDeleteFlag(1);
userMapper.insert(user);
}
@Test
public void testUpdate() {
User user = new User();
user.setId(4);
user.setDeleteFlag(1);
userMapper.updateById(user);
}
}