问答详情
源自:2-1 通用传统模式简介及通用mapper新增方法

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


提问者:qixin622 2019-06-01 10:30

个回答

  • 老猿
    2019-06-01 11:17:15

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

  • qq_釋懷_0
    2019-12-08 23:50:44

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