使用mybatis-push提供的方法实现公共字段填充
依赖:
<!-- mybatis-plus 依赖 --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.2</version> </dependency> <!-- mysql 依赖 --> <dependency> <groupId>com.mysql</groupId> <artifactId>mysql-connector-j</artifactId> <scope>runtime</scope> </dependency> <!-- lombok依赖 为实体类生成get、set方法 --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency>
数据库表数据:
SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table structure for message -- ---------------------------- DROP TABLE IF EXISTS `message`; CREATE TABLE `message` ( `id` int NULL DEFAULT NULL, `name` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, `sex` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, `startTime` datetime NULL DEFAULT NULL, `updateTime` datetime NULL DEFAULT NULL ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of message -- ---------------------------- INSERT INTO `message` VALUES (1, '张三丰', '男', '2024-03-26 11:20:22', '2024-03-26 13:25:52'); INSERT INTO `message` VALUES (2, '李四', '女', '2024-03-25 11:20:40', '2024-03-25 11:20:46'); INSERT INTO `message` VALUES (3, '吴六熊', '女', '2024-03-26 13:46:56', '2024-03-26 13:46:56'); SET FOREIGN_KEY_CHECKS = 1;
配置文件:
spring: datasource: url: jdbc:mysql://localhost:3306/commun?useSSL=false username: root password: 123456 driver-class-name: com.mysql.jdbc.Driver mybatis-plus: configuration: #开启驼峰命名 作用在于当数据库中的表带有下划线之类的表名可以使用驼峰形式 map-underscore-to-camel-case: true
实体类:
@Data public class Message implements Serializable { private int id; private String name; private String sex; //插入填充字段 @TableField(fill= FieldFill.INSERT,value = "startTime") private LocalDateTime startTime; // 插入和更新填充字段 @TableField(value = "updateTime",fill = FieldFill.INSERT_UPDATE) private LocalDateTime updateTime; }
数据处理器:
@Component public class TimeMetaObjecthandler implements MetaObjectHandler { /** * 插入时自动填充 * @param metaObject */ @Override public void insertFill(MetaObject metaObject) { metaObject.setValue("startTime", LocalDateTime.now()); metaObject.setValue("updateTime", LocalDateTime.now()); } /** * 更新时自动填充 * @param metaObject */ @Override public void updateFill(MetaObject metaObject) { metaObject.setValue("updateTime", LocalDateTime.now()); } }
mapper、service和service实现类省略
controller层:
@RestController
@RequestMapping("/message")
public class MessageController {
@Autowired
private MessageService messageService;
/**
* 测试修改数据之后公共字段是否更新
* @return
*/
@GetMapping("/update")
public String update(){
int id = 1;
LambdaQueryWrapper<Message> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(Message::getId,id);
Message message = new Message();
message.setName("张三丰");
message.setId(1);
message.setSex("男");
System.err.println(message);
messageService.updateById(message);
return messageService.getById(id).toString();
}
/**
* 测试新增数据之后公共字段是否更新
* @return
*/
@GetMapping("/insert")
public String insert(){
Message message = new Message();
message.setId(3);
message.setName("吴六熊");
message.setSex("女");
messageService.save(message);
return messageService.getById(message.getId()).toString();
}
}