前言
重复代码写一次就够了,剩下的交给ctrl+c和ctrl+v吧。
内容
SQL-DDL
CREATE TABLE IF NOT EXISTS `atta_mail_event_record` (
id bigint unsigned not null AUTO_INCREMENT comment '主键',
event_record_id bigint not null comment '事件记录id',
ext varchar(512) null comment '扩展字段',
created_time datetime not null comment '创建时间',
modified_time datetime not null comment '更新时间',
version int default 1 not null comment '版本号',
deleted tinyint default '0' not null comment '是否删除',
PRIMARY KEY (`id`),
unique key `uniq_date_esp_ip_type` (`cur_date`, `esp`, `ip`, `event_type`),
key `idx_date_esp_type`(`cur_date`,`esp`,`event_type`),
key `idx_date_type`(`cur_date`,`event_type`)
) AUTO_INCREMENT = 1 DEFAULT CHARSET = utf8mb4 COMMENT = '邮件事件记录表';
以上ddl遵守‘数据库规范’如下:
- id:类型是bigint unsigned,无负数,增大了正数范围;
- commont:声明了字段含义;
- 必备字段:id、created_time、modified_time、version;
- 逻辑删除:deleted;且定义为tinyint类型;
- 索引取名;
实体类
package com.atta.infra.edmmailserv.component.repository.dao.pojo;
import com.atta.infra.dal.BaseDO;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.Version;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@TableName("atta_mail_event")
public class EventDO {
/**
* 主键ID。 插入的时候不需要额外赋值,雪花算法会自动生成
*/
@TableId(value = "id", type = IdType.ID_WORKER)
private Long id;
/**
* 事件ID
*/
private Long eventId;
/**
* 数据是否有效 0-有效 1-无效
*/
private Integer deleted;
/**
* 数据版本
*/
private Integer version;
/**
* 创建时间. 插入的时候,手动赋值。
*/
// @TableField(fill = FieldFill.INSERT)
private Date createdTime;
/**
* 更新时间。 更新的时候,手动赋值。
*/
// @TableField(fill = FieldFill.UPDATE)
private Date modifiedTime;
/**
* 扩展字段
*/
private String ext;
}
如果想要让@TableField(fill = FieldFill.INSERT/UPDATE)生效,需要实现MetaObjectHandler接口然后重写插入填充和更新填充两个方法。Mybatis-plus实现自动填充创建时间、更新时间
插入
MailEventRecordDO mailEventRecordDO = new MailEventRecordDO();
mailEventRecordDO.setEventRecordId(IdWorker.getId());
mailEventRecordDO.setCreatedTime(new Date());
mailEventRecordDO.setModifiedTime(new Date());
mailEventRecordDO.setVersion(0);
mailEventRecordDO.setDeleted(0);