为了账号安全,请及时绑定邮箱和手机立即绑定

ID值是从哪里得到的?

CREATE TABLE user (

    id BIGINT(20) PRIMARY KEY NOT NULL COMMENT '主键',

    name VARCHAR(30) DEFAULT NULL COMMENT '姓名',

    age INT(11) DEFAULT NULL COMMENT '年龄',

    email VARCHAR(50) DEFAULT NULL COMMENT '邮箱',

    manager_id BIGINT(20) DEFAULT NULL COMMENT '直属上级id',

    create_time DATETIME DEFAULT NULL COMMENT '创建时间',

    CONSTRAINT manager_fk FOREIGN KEY (manager_id)

        REFERENCES user (id)

)  ENGINE=INNODB CHARSET=UTF8;

老师,有个疑问,在定义表结构时没有指定id为自增长,当执行

@Test
public void insert() {
    User user = new User();
    user.setName("张三");
    user.setAge(20);
    user.setManagerId(1088248166370832385L);
    user.setCreateTime(LocalDateTime.now());
    int rows = userMapper.insert(user);
    System.out.println("影响记录数:" + rows);
}

执行插入数据代码后,1134646077845229570这个id值是从哪里来的?

DEBUG==>  Preparing: INSERT INTO user ( id, name, age, manager_id, create_time ) VALUES ( ?, ?, ?, ?, ? ) 

DEBUG==> Parameters: 1134646077845229570(Long), 张三(String), 20(Integer), 1088248166370832385(Long), 2019-06-01 10:21:20.15(Timestamp)

DEBUG<==    Updates: 1

影响记录数:1


正在回答

2 回答

       同学,如果自己没有配置主键策略,MP的默认主键策略是基于雪花算法的自增主键。在MP的源码中有雪花算法的实现代码。1134646077845229570这个值是MP框架通过代码调用计算出来的值。

2 回复 有任何疑惑可以回复我~
#1

qq_釋懷_0

我这个没设置主键策略啊,MP也没管我啊,Junit直接报错了,怎么解决啊
2019-12-09 回复 有任何疑惑可以回复我~
#2

qq_釋懷_0

按照您的视频打的,但是报错了: org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionException: Could not set property 'id' of 'class com.mp.entity.User' with value 'cf3f71e3a5570906f20ce144af7b7515' Cause: java.lang.IllegalArgumentException: argument type mismatch
2019-12-09 回复 有任何疑惑可以回复我~
#3

老猿 回复 qq_釋懷_0

同学,你用的是最新的mp3.3.0吧,最新版本的默认主键策略变更了。自3.3.0开始,默认使用雪花算法+UUID(不含中划线)。给你生成的主键实际是个字符串,所以你数据库和实体中都应该是字符串,不然报错。
2019-12-09 回复 有任何疑惑可以回复我~

我这个没设置主键策略啊,MP也没管我啊,Junit直接报错了,怎么解决啊

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

ID值是从哪里得到的?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信