插入测试和主键策略
插入测试
@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);
}
之后的哪些类型,在我们工作的时候,我们需要什么,就设置什么