插入测试和主键策略

插入测试

    @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 @ 2022-05-12 15:00  小罗要有出息  阅读(92)  评论(0编辑  收藏  举报