插入测试和主键策略
插入测试
@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); }
之后的哪些类型,在我们工作的时候,我们需要什么,就设置什么
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决