MybatisPlus的插入insert

MybatisPlus是简化开发,基本的增删改查都不需要开发人员写,insert插入是怎么样的过程呢?

1、测试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());
    }

2、查看控制台输出日志

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主键生成使用雪花算法,那么何为雪花算法

3、具体分析ID主键生成机制

3.1、雪花算法:

SnowFlake算法,是Twitter开源的分布式id生成算法核心思想:使用64 bit 的long类型的数字作为全局唯一id
具体详细过程分析参考文章:https://blog.csdn.net/lq18050010830/article/details/89845790

3.2、ID主键生成具体分析

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

4、注意点

数据库表的id值类型需要设置成bigint类型,对应的JavaBean的类型设置成对应的Long类型,不然不会使用雪花算法生成自增id值

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值