接受两个参数
value = 主键列名
type = 主键类型
可选类型:
**使用@TableId注解时,类型为: type = IdType.AUTO 数据库也需要设置自增
否则会出 Cause: java.sql.SQLException: Field ‘id’ doesn’t have a default value**
===================================================================
//测试插入
@Test
public void testInsert(){
User user = new User();
user.setName(“淮城一只猫”);
user.setAge(5);
user.setEmail(“2424496907@qq.com”);
int result = userMapper.insert(user); //自动生成id
System.out.println(result); //受影响的行数
System.out.println(user); //发现id自动回填
}
=====================================================================
默认使用ID_WORKER,全局唯一id----雪花算法
snowflake是Twitter开源的分布式ID生成算法,结果是一个long型的ID。其核心思想是:使用41bit作为毫秒数,10bit作为机器的ID(5个bit是数据中心,5个bit的机器ID),12bit作为毫秒内的流水号(意味着每个节点在每毫秒可以产生 4096 个 ID),最后还有一个符号位,永远是0。可以保证几乎全球唯一!
我们需要配置注解自增:
-
实体类字段上:@TableId(type = IdType.AUTUO)
-
数据库字段一定要自增
public enum IdType {
AUTO(0), //id自增
NONE(1), //未设置主键
INPUT(2), //手动输入,一旦手动输入后,就需要自己去写id,否则id为空
ID_WORKER(3), //默认值,全局唯一id
UUID(4), //全局唯一id,uuid
ID_WORKER_STR(5); //ID_WORKER的字符串表示法
}
===================================================================
//测试更新
@Test
public void testUpdate(){
User user = new User();
user.setId(6L);
user.setName(“我的博客叫:淮城一只猫”);
user.setAge(6);
user.setEmail(“2424496907@qq.com”);
//注意:updateById参数是一个对象
int result = userMapper.updateById(user); //自动生成id
System.out.println(result); //受影响的行数
}
===================================================================
创建时间、修改时间!这些操作一般自动化完成的,我们不希望手动更新!
阿里巴巴开发手册:所有的数据库表:gmt_create、gmt_modified几乎所有表都要配置上!而且需要自动化!
1.在表中新增字段create_time、update_time
2. 再次测试插入方法,需要先把实体类同步!
private Date creteTime;
private Date updateTime;
MySQL-datetime类型的列设置默认值为CURRENT_TIMESTAMP
MySQL中datetime字段的默认值CURRENT_TIMESTAMP
1.删除数据库中的默认值、更新操作
2.在实体类字段属性上需要注释
//字段必须声明TableField注解,属性fill选择对应策略,该声明告知Mybatis-Plus需要预留注入SQL字段
// 注意!这里需要标记为填充字段
@TableField(fill = FieldFill.INSERT)
private Date creteTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
策略枚举如下:
public enum FieldFill {
/**
- 默认不处理
*/
DEFAULT,
/**
- 插入填充字段
*/
INSERT,
/**
- 更新填充字段
*/
UPDATE,
/**
- 插入和更新填充字段
*/
INSERT_UPDATE
}
3.自定义实现类 MyMetaObjectHandler(实现元对象处理器接口)
@Slf4j
@Component//填充处理器MyMetaObjectHandler在 Spring Boot 中需要声明@Component或@Bean注入
public class MyMetaObjectHandler implements MetaObjectHandler
{
//插入时填充策略
@Override
public void insertFill(MetaObject metaObject) {
log.info(“start insert fill …”);
this.set