MybatisPlus CRUD扩展(二)

540 阅读2分钟

这是我参与11月更文挑战的第8天,活动详情查看:2021最后一次更文挑战

update更新

//测试更新  
@Test  
public void testUpdate() {  
    User user = new User();  
    //通过条件自动拼接动态sql  
    user.setId(1L);  
    user.setName("zbc");  
    user.setAge(14);  
    //注意:updateById 实际传参是一个 对象,并不是id  
    int result = userMapper.updateById(user);  
    System.out.println(result);  
    System.out.println(user);  
}

所有的sql都是自动帮你配置的

自动填充

创建时间、修改时间,这些字段都是自动化完成的,我们不希望手动更新。(阿里巴巴开发手册:所有的数据库表:gmt_creategmt_modified这两个字段几乎所有的表都需要配置上,而且需要自动化)

数据库级别(不建议使用)

  • 在表中新增字段create_timeupdate_time
-- 添加 create_time 设置默认时间 CURRENT_TIMESTAMP
ALTER TABLE `table_name`  
ADD COLUMN `create_time` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间';

-- 修改 create_time 设置默认时间 CURRENT_TIMESTAMP
ALTER TABLE `table_name`  
MODIFY COLUMN `create_time` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间';

-- 添加 update_time 设置默认时间 CURRENT_TIMESTAMP 设置更新时间为 ON UPDATE CURRENT_TIMESTAMP
ALTER TABLE `table_name`  
ADD COLUMN `update_time` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间';

-- 修改 update_time 设置默认时间 CURRENT_TIMESTAMP 设置更新时间为 ON UPDATE CURRENT_TIMESTAMP
ALTER TABLE `table_name`  
MODIFY COLUMN `update_time` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间';
  • 测试插入方法,需要同步实体类字段
private Date createTime;  
private Date updateTime;
idnameageemailcreate_timeupdate_time
1456795944390905861zbc20test@163.com2021-11-07 17:29:332021-11-07 17:29:33
  • 测试更新方法
idnameageemailcreate_timeupdate_time
1456795944390905861zbc14test@163.com2021-11-07 17:29:332021-11-07 17:34:39

代码级别

  • 删除数据库级别
-- 去掉 create_time 默认值
ALTER TABLE `table_name`  
MODIFY COLUMN `create_time` TIMESTAMP NULL COMMENT '创建时间';

-- 去掉 update_time 默认值和默认更新
ALTER TABLE `table_name`  
MODIFY COLUMN `update_time` TIMESTAMP NULL COMMENT '修改时间';
  • 实体类字段数据增加注解
@TableField(fill = FieldFill.INSERT)  
private Date createTime;  
@TableField(fill = FieldFill.INSERT_UPDATE)  
private Date updateTime;
//填充类型说明:
public enum FieldFill {  
	 /**  
	 * 默认不处理  
	 */  
	 DEFAULT,  
	/**  
	 * 插入时填充字段  
	 */  
	 INSERT,  
	/**  
	 * 更新时填充字段  
	 */  
	 UPDATE,  
	/**  
	 * 插入和更新时填充字段  
	 */  
	 INSERT_UPDATE  
}
  • 编写处理器来处理这个注解
package com.zbc.mybatis_plus_demo.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;  
  
/**  
 * 不要忘记把处理器加到IOC容器中  
 *  
 * @author zbc * @date 2021/11/7 
 */  
@Slf4j  
@Component  
public class MyMetaObjectHandler implements MetaObjectHandler {  
  
 /**  
 * 插入时的填充策略  
 *  
 * @param metaObject 元数据  
 */  
 @Override  
 public void insertFill(MetaObject metaObject) {  
 	//setFieldValByName(String fieldName, Object fieldVal, MetaObject metaObject)  
 	this.setFieldValByName("createTime", new Date(), metaObject);  
	this.setFieldValByName("updateTime", new Date(), metaObject);  
 }  
  
 /**  
 * 更新时的填充策略  
 *  
 * @param metaObject 元数据  
 */  
 @Override  
 public void updateFill(MetaObject metaObject) {  
 	this.setFieldValByName("updateTime", new Date(), metaObject);  
 }  
}
  • 测试插入和修改,查看结果