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 数据库级别自动填充
这个方式不推荐使用,因为在实际工作中一般不允许修改数据库
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)