更新操作和自動填充功能
阿新 • • 發佈:2022-05-12
更新操作
比較簡單,實現原理是動態sql
@Test
void updateTest(){
user user = new user();
user.setId(1524653412236517378L);
user.setAge(200);
user.setEmail("[email protected]");
userMapper.updateById(user); //沒有設定ID,不知道更新哪條資料,所以一定要設定ID
}
自動填充
這個主要用於更新時間,和建立時間等,不需要認為設定的欄位
- 使用@TableField註解,提示plus哪寫欄位需要自動填充
public class user { @TableId(type = IdType.ID_WORKER) 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; }
- 還沒完,我們只是告訴了plus哪些需要填充,但填充的資料從哪裡來呢?
這裡我們可以實現MetaObjectHandler介面,來填充資料
package top.luoking.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//將MyMetaObjectHandler新增到IOC容器中 public class MyMetaObjectHandler implements MetaObjectHandler { @Override //插入時填充資料 public void insertFill(MetaObject metaObject) { log.info("start insert fill ...."); 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); } }
- 測試
@Test
void insertTest(){
user user = new user();
user.setAge(21);
user.setEmail("[email protected]");
user.setName("小落");
userMapper.insert(user);
}
@Test
void updateTest(){
user user = new user();
user.setId(1524657437254115330L);
user.setAge(200);
user.setEmail("[email protected]");
userMapper.updateById(user); //沒有設定ID,不知道更新哪條資料,所以一定要設定ID
}
insertTest
updateTest
達到了我們理想中的目的,在之後我們就可以利用自動填充來處理時間問題,我個人認為,蠻好用的。