mybatisPlus-自动填充
创建时间,修改时间!这些操作一遍都是自动化完成的,我们不希望手动更新!
阿里巴巴开发手册:所有的数据库表:gmt_create,gmt_modified几乎所有的表都要配置上!而且需要自动化!
1 在user表中添加创建时间和修改时间的字段
2 在实体类中编写对应的属性并添加@TableField注解
src/main/java/com/lv/mybatis_plus/pojo/User.java
package com.lv.mybatis_plus.pojo;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
@TableId(type = IdType.AUTO)
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;
}
3 编写一个处理类
新建一个handler包,并在该包下创建一个MyMetaObjectHandler.java
src/main/java/com/lv/mybatis_plus/handler/MyMetaObjectHandler.java
package com.lv.mybatis_plus.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 //一定不要忘记把处理器加到IOC容器中!
public class MyMetaObjectHandler implements MetaObjectHandler {
//插入时的填充策略
@Override
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
public void updateFill(MetaObject metaObject) {
log.info("start update fill....");
this.setFieldValByName("updateTime",new Date(),metaObject);
}
}
4 运行插入测试方法
//测试插入
@Test
public void testInsert(){
User user = new User();
user.setName("最新插入");
user.setAge(66);
user.setEmail("1148397597@qq.com");
int result = userMapper.insert(user); // mybatis-plus会帮我们自动生成id
System.out.println(result); //受影响的行数
System.out.println(user); //发现,id会自动回填
}
5 查看数据库
插入数据的两个时间字段自动填充成功
6 再修改一下更新方法,运行
//测试更新
@Test
public void testUpdate(){
User user = new User();
//通过条件自动拼接动态sql
user.setId(1508697310695383045L);
user.setName("修改最新插入");
user.setAge(99);
// 注意: updateById 参数是一个对象
int i = userMapper.updateById(user);
System.out.println(i);
}
7 查看数据库
修改时间的字段发生了变化,说明自动填充修改时间字段成功
8 数据库级别自动填充
这个方式不推荐使用,因为在实际工作中一般不允许修改数据库