插入测试和主键策略

插入测试

@Test
void insertTest(){
user user = new user();
user.setAge(20);
user.setEmail("2034281742@qq.com");
user.setName("小落");
userMapper.insert(user);
}

查看日志

==> Preparing: INSERT INTO user ( id, name, age, email ) VALUES ( ?, ?, ?, ? )
==> Parameters: 1524640315505459202(Long), 小落(String), 20(Integer), 2034281742@qq.com(String)
<== Updates: 1

发现问题,我们并没有设置主键,但结果却有主键,那主键默认是哪来的呢?

我们可以查看实体类的id属性,添加@TableId注解

public @interface TableId {
/**
* <p>
* 字段值(驼峰命名方式,该值可无)
* </p>
*/
String value() default "";
/**
* <p>
* 主键ID
* </p>
* {@link IdType}
*/
IdType type() default IdType.NONE;
}

查看IdType

/**
* 数据库ID自增
*/
AUTO(0),
/**
* 该类型为未设置主键类型
*/
NONE(1),
/**
* 用户输入ID
* 该类型可以通过自己注册自动填充插件进行填充
*/
INPUT(2),
/* 以下3种类型、只有当插入对象ID 为空,才自动填充。 */
/**
* 全局唯一ID (idWorker)
*/
ID_WORKER(3),
/**
* 全局唯一ID (UUID)
*/
UUID(4),
/**
* 字符串全局唯一ID (idWorker 的字符串表示)
*/
ID_WORKER_STR(5);

我们可以发现是TableId自动帮我们生成ID的使用的是ID_WORKER

我们知道了有这些自动生成主键的类型,我们可以尝试一下
AUTO

//主键设置了自增,表的ID也要设置自增,这个设置才会有效

INPUT

public class user {
@TableId(type = IdType.INPUT)
private Long id;
private String name;
private Integer age;
private String email;
}

当ID的类型设置为INPUT时,我们需要手动设置ID

@Test
void insertTest(){
user user = new user();
user.setId(8L);
user.setAge(20);
user.setEmail("2034281742@qq.com");
user.setName("小落");
userMapper.insert(user);
}

之后的哪些类型,在我们工作的时候,我们需要什么,就设置什么

posted @   小罗要有出息  阅读(93)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
点击右上角即可分享
微信分享提示