MybatisPlus
是简化开发,基本的增删改查都不需要开发人员写,insert插入是怎么样的过程呢?
@Test
void TestInsert() {
tb_user user = new tb_user();
user.setName("李四");
user.setPsw("123");
int i = userMapper.insert(user);
if(i > 0){
System.out.println("插入成功!!!");
}
System.out.println(user);
System.out.println(user.getUserId());
}
JDBC Connection [HikariProxyConnection@1856128687 wrapping com.mysql.cj.jdbc.ConnectionImpl@2e4389ed] will not be managed by Spring
==> Preparing: INSERT INTO tb_user ( user_id, psw, name ) VALUES ( ?, ?, ? )
==> Parameters: 1462266553855746050(Long), 123(String), 张三1(String)
<== Updates: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@692dba54]
插入成功!!!
tb_user(userId=1462266553855746050, name=张三1, psw=123)
1462266553855746050
2021-11-21 10:52:20.473 INFO 19488 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown initiated...
2021-11-21 10:52:20.493 INFO 19488 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown completed.
需要在spring boot的配置文件中加入输出日志配置信息
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
插入成功,但是并没有设置id值
,肯定是主键自动生产的,这个主键自动生成有不同,有个枚举类列举主键id生成模式,而且还是生成一堆类似UUID的主键id,MybatisPlus默认的id主键自动生成
是ID_WORKER
。
public enum IdType {
AUTO(0),
NONE(1),
INPUT(2),
ASSIGN_ID(3),
ASSIGN_UUID(4),
/** @deprecated */
@Deprecated
ID_WORKER(3),
/** @deprecated */
@Deprecated
ID_WORKER_STR(3),
/** @deprecated */
@Deprecated
UUID(4);
private final int key;
private IdType(int key) {
this.key = key;
}
public int getKey() {
return this.key;
}
}
是否非常疑惑,为什么是生成一串类似UUID的数字,其实MybatisPlus默认id主键生成使用雪花算法
,那么何为雪花算法
呢
SnowFlake算法,是Twitter开源的分布式id生成算法
,核心思想
:使用64 bit 的long类型的数字作为全局唯一id
具体详细过程分析参考文章:https://blog.csdn.net/lq18050010830/article/details/89845790
1)AUTO
:自增的,数据库的表id也必须自增的
@TableId(type = IdType.AUTO)
private Long userId;
2)NONE
:无状态,该类型没有设置主键类型
@TableId(type = IdType.NONE)
private Long userId;
3)INPUT
:插入时必须手动setId()设置id的值
@TableId(type = IdType.INPUT)
private Long userId;
4)ID_WORKER
:默认的全局唯一id,雪花算法
生成的
@TableId(type = IdType.ID_WORKER)
private Long userId;
5)UUID
:32位UUID字符串
@TableId(type = IdType.UUID)
private Long userId;
字符串无法转为Long类型
'userId' of 'class sz.kingdom.testmybatisplus.pojo.tb_user' with value '038681c3c560fba688693469b72bbb2d' Cause: java.lang.IllegalArgumentException: argument type mismatch
数据库表
的id值类型需要设置成bigint类型
,对应的JavaBean
的类型设置成对应的Long类型
,不然不会使用雪花算法
生成自增id值