使用主键注解@TableId,加到pojo类的主键上
属性
类型
必须指定
默认值
描述
value
String
否
""
主键字段名
type
Enum
否
IdType.NONE
主键类型
IdType
值
描述
AUTO
数据库ID自增
NONE
无状态,该类型为未设置主键类型(注解里等于跟随全局,全局里约等于 INPUT)
INPUT
insert前自行set主键值
ASSIGN_ID
分配ID(主键类型为Number(Long和Integer)或String)(since 3.3.0),使用接口IdentifierGenerator的方法nextId(默认实现类为DefaultIdentifierGenerator雪花算法)
ASSIGN_UUID
分配UUID,主键类型为String(since 3.3.0),使用接口IdentifierGenerator的方法nextUUID(默认default方法)
ID_WORKER
分布式全局唯一ID 长整型类型(please use ASSIGN_ID)
UUID
32位UUID字符串(please use ASSIGN_UUID)
ID_WORKER_STR
分布式全局唯一ID 字符串类型(please use ASSIGN_ID)
数据库自增主键 - AUTO
插入时不会带ID列,需要数据库设置ID自增
插入日志:
JDBC Connection [HikariProxyConnection@1681215776 wrapping com.mysql.cj.jdbc.ConnectionImpl@64b7225f] will not be managed by Spring
==> Preparing: INSERT INTO user ( name, age, email ) VALUES ( ?, ?, ? )
==> Parameters: Mimi(String), 19(Integer), mimi@163.com(String)
<== Updates: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2a389173]
用户输入 - INPUT
insert前自行set主键值
插入日志:
JDBC Connection [HikariProxyConnection@952288009 wrapping com.mysql.cj.jdbc.ConnectionImpl@1a480135] will not be managed by Spring
==> Preparing: INSERT INTO user ( id, name, age, email ) VALUES ( ?, ?, ?, ? )
==> Parameters: 9(Long), Mimi(String), 19(Integer), mimi@163.com(String)
<== Updates: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@70e02081]
无状态 - NONE
未设置主键类型,类似于ASSIGN_ID
插入日志:
JDBC Connection [HikariProxyConnection@79620878 wrapping com.mysql.cj.jdbc.ConnectionImpl@6e8a9c30] will not be managed by Spring
==> Preparing: INSERT INTO user ( id, name, age, email ) VALUES ( ?, ?, ?, ? )
==> Parameters: 1307978008895885313(Long), Mimi(String), 19(Integer), mimi@163.com(String)
<== Updates: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7573e12f]
分配ID - ASSIGN_ID
默认使用插入对象ID,当插入对象ID为空时,使用雪花算法
雪花算法结构图:
雪花算法
插入日志:
JDBC Connection [HikariProxyConnection@79620878 wrapping com.mysql.cj.jdbc.ConnectionImpl@6e8a9c30] will not be managed by Spring
==> Preparing: INSERT INTO user ( id, name, age, email ) VALUES ( ?, ?, ?, ? )
==> Parameters: 1307978926462754817(Long), Mimi(String), 19(Integer), mimi@163.com(String)
<== Updates: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7573e12f]
分配UUID - ASSIGN_UUID
默认使用插入对象ID,当插入对象ID为空时,使用UUID,并去除“-”,主键类型为String
插入日志:
JDBC Connection [HikariProxyConnection@81355344 wrapping com.mysql.cj.jdbc.ConnectionImpl@9a6fbc0] will not be managed by Spring
==> Preparing: INSERT INTO dept ( id, name ) VALUES ( ?, ? )
==> Parameters: 4b0e878b5bfc2f22f44f1a3691403116(String), 研发部(String)
<== Updates: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4ae263bf]
1