2、自动填充
项目中经常会遇到一些数据,每次都使用相同的方式填充,例如记录的创建时间,更新时间等。
我们可以使用MyBatis Plus的自动填充功能,完成这些字段的赋值工作:
1)数据库表中添加自动填充字段
在User表中添加datetime类型的新的字段 create_time、update_time
2)实体类上添加属性以及注解
@Data public class User { ... //注意使用小驼峰,框架会自动将下划线转为小驼峰 //设置自动填充时机 @TableField(fill = FieldFill.INSERT) private Date createTime; @TableField(fill = FieldFill.INSERT_UPDATE) private Date updateTime; }
3)实现元对象处理器接口
@Component public class MyMetaObjectHandler implements MetaObjectHandler { //使用mp实现添加的自动填充时,这个方法就会执行 @Override public void insertFill(MetaObject metaObject) { this.setFieldValByName("createTime", new Date(), metaObject); this.setFieldValByName("updateTime", new Date(), metaObject); } //使用mp实现更新的自动填充时,这个方法就会执行 @Override public void updateFill(MetaObject metaObject) { this.setFieldValByName("updateTime", new Date(), metaObject); } }
注意:不要忘记添加 @Component 注解
delete
1、根据id删除记录
//测试删除,物理删除 @Test void testDelete() { int row = userMapper.deleteById(1L); System.out.println(row); }
可以看到id为1的数据被删除
//批量物理删除 @Test void testDeleteBatch(){ int row = userMapper.deleteBatchIds(Arrays.asList(2, 3, 4)); System.out.println(row); }
根据条件删除:
Map<String,Object> columnMap = new HashMap<>(); columnMap.put("gender",0); columnMap.put("age",18); emplopyeeDao.deleteByMap(columnMap);
3、逻辑删除
- 物理删除:真实删除,将对应数据从数据库中删除,之后查询不到此条被删除数据
- 逻辑删除:假删除,将对应数据中代表是否被删除字段状态修改为“被删除状态”,之后在数据库中仍旧能看到此条数据记录
1)数据库中添加 deleted字段
ALTER TABLE `user` ADD COLUMN `deleted` boolean DEFAULT 0
2)实体类添加deleted 字段
@TableLogic private Integer deleted;
3)application.properties 加入配置
此为默认值,如果你的默认值和mp默认的一样,该配置可无
mybatis-plus.global-config.db-config.logic-delete-value=1
mybatis-plus.global-config.db-config.logic-not-delete-value=0
4)在 MybatisPlusConfig 中注册 逻辑删除Bean
//逻辑删除插件 @Bean public ISqlInjector sqlInjector() { return new LogicSqlInjector(); }