栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

MybatisPlus的插入insert

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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
    ID_WORKER(3),
    
    @Deprecated
    ID_WORKER_STR(3),
    
    @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值

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/585251.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号