MyBatis-plus框架下資料庫表中的建立時間(create_time)、修改時間(update_time)的處理
我們在一般的資料庫操作中可能經常見到這種操作,表中有兩列,分別為這條資料的建立時間和修改時間,那我們該如何處理呢?在新增資料的或者修改資料的時候 new Date嗎?這樣太low了。
兩種處理方式:
一、資料庫層面的處理
一般不推薦使用,工作中不允許修改資料庫
1、表中新增create_time、update_time兩列,並設定預設值和
欄位:create_time
欄位:修改時間
2、單元測試
1、實體類
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Book {
@TableId(type = IdType.AUTO) //主鍵自增策略
private Integer id;
private String bookname;
private String author;
private Date createTime;
private Date updateTime;
}
2、定義BookMapper介面
@Repository
public interface BookMapper extends BaseMapper<Book> {
}
3、編寫測試類進行測試並檢視結果
@RunWith(SpringRunner.class)
@SpringBootTest
public class BookTimeTest {
@Autowired
private BookMapper bookMapper;
@Test
public void insertBook(){
Book book=new Book();
book.setBookname("白夜行");
book.setAuthor("東野圭吾");
bookMapper.insert(book);
System.out.println("新增結果:"+book);
//1 白夜行 東野圭吾 2020-12-06 21:24:34 2020-12-06 21:24:34
}
@Test
public void updateBook(){
Book book=new Book();
book.setId(1);
book.setBookname("白夜行222");
book.setAuthor("東野圭吾");
bookMapper.updateById(book);
//表中資料:
// 1 白夜行222 東野圭吾 2020-12-06 21:24:34 2020-12-06 21:28:19
}
}
結果證明我們的建立時間和修改時間都能自動完成新增與更新,完全由資料庫端執行,不需要我們人為操作。
二、程式碼側層面上的處理(推薦使用)
通過MyBatis-plus註解與執行器幫我們實現
1、表中只需建立兩個欄位create_time、update_time,不需要像上面那樣進行任何處理。
2、實體類中新增註解
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Book {
@TableId(type = IdType.AUTO) //主鍵自增策略
private Integer id;
private String bookname;
private String author;
@TableField(fill = FieldFill.INSERT) //新增時自動填充
private Date createTime;
@TableField(fill = FieldFill.INSERT_UPDATE) //新增或修改時自動填充
private Date updateTime;
}
public enum FieldFill {
DEFAULT, ——預設不進行任何操作
INSERT,——新增時進行填充操作
UPDATE,——修改時進行填充操作
INSERT_UPDATE; ——新增或修改時進行填充操作
}
3、編寫處理器處理註解
@Component //一定要將處理器新增到 Ioc容器中
@Slf4j
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override //1、重寫插入時候的填充策略
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 //2、重寫修改時候的填充策略
public void updateFill(MetaObject metaObject) {
log.info("start update fill ...");
this.setFieldValByName("updateTime", new Date(), metaObject);
}
}
4、測試結果成功
相關文章
- 時間序列資料的處理
- 基於Mybatis-Plus實現自動化操作建立時間和修改時間MyBatis
- 修改SQL Server資料庫表的建立時間最簡單最直接有效的方法SQLServer資料庫
- Java中對時間的處理Java
- RTL 時間的處理
- Tensorflow 視窗時間序列資料的處理
- Java8中的時間處理Java
- jackson時間格式的處理
- python資料庫查詢返回時間為datetime型別時候的特殊處理Python資料庫型別
- Oracle臨時表空間檢視、新增臨時表空間資料檔案、修改預設臨時表空間 方法!Oracle
- Python中的時間處理大總結Python
- java時間處理Java
- PHP 時間處理PHP
- oracle建立臨時表空間和資料表空間以及刪除Oracle
- NPM酷庫:moment,時間物件處理NPM物件
- Pandas中時間和日期處理
- 字串和日期時間的處理字串
- VNPY2 中凌晨0點時間戳的處理問題,和夜盤資料時間戳分析時間戳
- [工具]PHP 中的日期時間處理利器 – CarbonPHP
- laravel sync()同步時修改中間表欄位Laravel
- 建立時間和保持時間
- python中時間處理標準庫DateTime加強版庫:pendulumPython
- DB2建立資料庫,建立表空間DB2資料庫
- 用bat批次修改檔案建立和修改時間BAT
- 日期時間處理包 Carbon
- c++ 獲取檔案建立時間、修改時間、訪問時間、檔案內容長度C++
- 時間序列化資料庫選型?時序資料庫的選擇?資料庫
- Linux修改時間Linux
- Linux 修改時間Linux
- 模型取到的資料庫時間created_at慢8小時模型資料庫
- 關於Oracle資料庫的時間查詢Oracle資料庫
- golang版carbon日期時間處理庫,PHP開發者的福利GolangPHP
- django2中關於時間處理策略Django
- Calendar類在Java中的應用與日期時間處理Java
- Laravel日期時間處理包 CarbonLaravel
- MySQL實現當前資料表的所有時間都增加或減少指定的時間間隔(推薦)MySql
- 批處理以當前時間為檔名建立檔案
- ubuntu 修改時區或時間 及網路同步時間Ubuntu