mybatisPlus-自動填充
阿新 • • 發佈:2022-03-31
建立時間,修改時間!這些操作一遍都是自動化完成的,我們不希望手動更新!
阿里巴巴開發手冊:所有的資料庫表:gmt_create,gmt_modified幾乎所有的表都要配置上!而且需要自動化!
1 在user表中新增建立時間和修改時間的欄位
2 在實體類中編寫對應的屬性並新增@TableField註解
src/main/java/com/lv/mybatis_plus/pojo/User.java
package com.lv.mybatis_plus.pojo; import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import java.util.Date; @Data @AllArgsConstructor @NoArgsConstructor public class User { @TableId(type = IdType.AUTO) private Long id; private String name; private Integer age; private String email; //欄位新增填充內容 @TableField(fill = FieldFill.INSERT) private Date createTime; @TableField(fill = FieldFill.INSERT_UPDATE) private Date updateTime; }
3 編寫一個處理類
新建一個handler包,並在該包下建立一個MyMetaObjectHandler.java
src/main/java/com/lv/mybatis_plus/handler/MyMetaObjectHandler.java
package com.lv.mybatis_plus.handler; import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; import lombok.extern.slf4j.Slf4j; import org.apache.ibatis.reflection.MetaObject; import org.springframework.stereotype.Component; import java.util.Date; @Slf4j @Component //一定不要忘記把處理器加到IOC容器中! public class MyMetaObjectHandler implements MetaObjectHandler { //插入時的填充策略 @Override public void insertFill(MetaObject metaObject) { log.info("start insert fill...."); // setFieldValByName(String fieldName, Object fieldVal, MetaObject metaObject) this.setFieldValByName("createTime",new Date(),metaObject); this.setFieldValByName("updateTime",new Date(),metaObject); } //更新時的填充策略 @Override public void updateFill(MetaObject metaObject) { log.info("start update fill...."); this.setFieldValByName("updateTime",new Date(),metaObject); } }
4 執行插入測試方法
//測試插入 @Test public void testInsert(){ User user = new User(); user.setName("最新插入"); user.setAge(66); user.setEmail("[email protected]"); int result = userMapper.insert(user); // mybatis-plus會幫我們自動生成id System.out.println(result); //受影響的行數 System.out.println(user); //發現,id會自動回填 }
5 檢視資料庫
插入資料的兩個時間欄位自動填充成功
6 再修改一下更新方法,執行
//測試更新
@Test
public void testUpdate(){
User user = new User();
//通過條件自動拼接動態sql
user.setId(1508697310695383045L);
user.setName("修改最新插入");
user.setAge(99);
// 注意: updateById 引數是一個物件
int i = userMapper.updateById(user);
System.out.println(i);
}
7 檢視資料庫
修改時間的欄位發生了變化,說明自動填充修改時間欄位成功
8 資料庫級別自動填充
這個方式不推薦使用,因為在實際工作中一般不允許修改資料庫