这是我参与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_create、gmt_modified这两个字段几乎所有的表都需要配置上,而且需要自动化)
数据库级别(不建议使用)
- 在表中新增字段
create_time、update_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;
| id | name | age | create_time | update_time | |
|---|---|---|---|---|---|
| 1456795944390905861 | zbc | 20 | test@163.com | 2021-11-07 17:29:33 | 2021-11-07 17:29:33 |
- 测试更新方法
| id | name | age | create_time | update_time | |
|---|---|---|---|---|---|
| 1456795944390905861 | zbc | 14 | test@163.com | 2021-11-07 17:29:33 | 2021-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);
}
}
- 测试插入和修改,查看结果