[兔子私房课] Mybatis开发详解与项目实战02

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 大家好,本章主要讲解mybatisPlus的日志配置和ID生成策略!

8cb308d673bdfd2cea964e1028584923.png

大家好,本章主要讲解mybatisPlus的日志配置和ID生成策略!

配置日志

配置日志是指,我们希望看到mybatisPlus执行sql的时候,把具体的sql语句打印出来。这样有助于我们观察具体的jdbc操作,方便排查错误。

我们来看一下MP如何配置日志的,很简单,加一个声明即可。

# 配置日志
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl


再来一个新增数据的方法,可以看到日志会默认打出来

@Test
public void testInsert(){
    //1. 创建user实例对象
    User user = new User();
    //2.填充属性(注意:ID不用填充)
    user.setName("jack");
    user.setAge(18);
    user.setEmail("jack@qq.com");
    //3.直接调用MP框架的新增方法
    int insert = userMapper.insert(user);
    log.info("成功插入" + insert + "条数据!");
}

3f49abb0c352ebdad1816cbb135cea39.png


MybatisPlus主键生成策略

MybatisPlus主键生成策略是指,在我们做新增操作的时候,对主键ID的默认值设定规则,常见的有UUID,自动递增,雪花算法等。

回顾一下表结构:


38805d80c5eac1e2895293d7d36afe41.png

我们设置了自动递增。

我们做个测试,修改User类的id字段:

@Data
@ToString
public class User {
    @TableId
    private Long id;
    //省略...
}

然后再来一次新增的操作:testInsert

24713997ada319df9ef320221a7dd337.png

报错了,原因是:

Cause: com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Out of range value for column 'id' at row 1

现在,我们把id字段的类型改为bigint

38100e57bfb24e30082b490f1a31a600.png

重新执行刚才的方法:

ff1022dbc93f0fa41bf3b6ee945e27a5.png

成功了,id是老长的一串数字。

为什么会这样呢?

那是因为MP框架默认的ID生成策略是雪花算法。


雪花算法:

snowflake是Twitter开源的分布式ID生成算法,结果是一个long型的ID。其核心思想是:使用41bit作为 毫秒数,10bit作为机器的ID(5个bit是数据中心,5个bit的机器ID),12bit作为毫秒内的流水号(意味 着每个节点在每毫秒可以产生 4096 个 ID),最后还有一个符号位,永远是0。可以保证几乎全球唯 一!

2a84ec51366a162bdfcd9f16d8eb4631.png

基础概念 snowflake中文的意思是雪花,所以常被称为雪花算法


它是twitter用scala语言编写的一个用于简单规则运算就能高效生成唯一ID的算法,下面是源码地址:


github源码地址


网上还有各种其他语言的版本,思路基本上都是参考上述源码


特性


生成的ID不重复


生成性能高


基于时间戳,可以基本保证有序递增


总之,这是一种比较高效的ID生成策略,也是MP框架默认的ID生成策略。在分布式架构中,用雪花算法也是不错的选择,能够应对大部分的场景。


其他ID生成策略:

/**
 * 生成ID类型枚举类
 *
 * @author hubin
 * @since 2015-11-10
 */
@Getter
public enum IdType {
    /**
     * 数据库ID自增
     */
    AUTO(0),
    /**
     * 该类型为未设置主键类型(注解里等于跟随全局,全局里约等于 INPUT)
     */
    NONE(1),
    /**
     * 用户输入ID
     * <p>该类型可以通过自己注册自动填充插件进行填充</p>
     */
    INPUT(2),
    /* 以下3种类型、只有当插入对象ID 为空,才自动填充。 */
    /**
     * 分配ID (主键类型为number或string),
     * 默认实现类 {@link com.baomidou.mybatisplus.core.incrementer.DefaultIdentifierGenerator}(雪花算法)
     *
     * @since 3.3.0
     */
    ASSIGN_ID(3),
    /**
     * 分配UUID (主键类型为 string)
     * 默认实现类 {@link com.baomidou.mybatisplus.core.incrementer.DefaultIdentifierGenerator}(UUID.replace("-",""))
     */
    ASSIGN_UUID(4),
    /**
     * @deprecated 3.3.0 please use {@link #ASSIGN_ID}
     */
    @Deprecated
    ID_WORKER(3),
    /**
     * @deprecated 3.3.0 please use {@link #ASSIGN_ID}
     */
    @Deprecated
    ID_WORKER_STR(3),
    /**
     * @deprecated 3.3.0 please use {@link #ASSIGN_UUID}
     */
    @Deprecated
    UUID(4);
    private final int key;
    IdType(int key) {
        this.key = key;
    }
}

在新版本的MP中,有好几种方式已经废弃了,使用的时候要注意。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
7月前
|
Java 测试技术 数据库连接
【MyBatisPlus】MyBatisPlus 整合开发
【1月更文挑战第19天】【MyBatisPlus】MyBatisPlus 整合开发
|
2月前
|
前端开发 Java 数据库连接
表白墙/留言墙 —— 中级SpringBoot项目,MyBatis技术栈MySQL数据库开发,练手项目前后端开发(带完整源码) 全方位全步骤手把手教学
本文是一份全面的表白墙/留言墙项目教程,使用SpringBoot + MyBatis技术栈和MySQL数据库开发,涵盖了项目前后端开发、数据库配置、代码实现和运行的详细步骤。
59 0
表白墙/留言墙 —— 中级SpringBoot项目,MyBatis技术栈MySQL数据库开发,练手项目前后端开发(带完整源码) 全方位全步骤手把手教学
|
3月前
|
Java 数据库连接 数据格式
【Java笔记+踩坑】Spring基础2——IOC,DI注解开发、整合Mybatis,Junit
IOC/DI配置管理DruidDataSource和properties、核心容器的创建、获取bean的方式、spring注解开发、注解开发管理第三方bean、Spring整合Mybatis和Junit
【Java笔记+踩坑】Spring基础2——IOC,DI注解开发、整合Mybatis,Junit
|
4月前
|
SQL Java 数据库连接
Spring Boot联手MyBatis,打造开发利器:从入门到精通,实战教程带你飞越编程高峰!
【8月更文挑战第29天】Spring Boot与MyBatis分别是Java快速开发和持久层框架的优秀代表。本文通过整合Spring Boot与MyBatis,展示了如何在项目中添加相关依赖、配置数据源及MyBatis,并通过实战示例介绍了实体类、Mapper接口及Controller的创建过程。通过本文,你将学会如何利用这两款工具提高开发效率,实现数据的增删查改等复杂操作,为实际项目开发提供有力支持。
214 0
|
4月前
|
SQL Java 数据库连接
后端框架的学习----mybatis框架(7、使用注解开发)
这篇文章讲述了如何使用MyBatis框架的注解方式进行开发,包括在接口上使用注解定义SQL语句,并通过动态代理实现对数据库的增删改查操作,同时强调了接口需要在核心配置文件中注册绑定。
|
6月前
|
SQL XML Java
后端数据库开发JDBC编程Mybatis之用基于XML文件的方式映射SQL语句实操
后端数据库开发JDBC编程Mybatis之用基于XML文件的方式映射SQL语句实操
75 3
|
6月前
|
Java 数据库连接 API
后端开发之用Mybatis简化JDBC的开发快速入门2024及数据库连接池技术和lombok工具详解
后端开发之用Mybatis简化JDBC的开发快速入门2024及数据库连接池技术和lombok工具详解
66 3
|
6月前
|
SQL Java 数据库连接
2万字实操案例之在Springboot框架下基于注解用Mybatis开发实现基础操作MySQL之预编译SQL主键返回增删改查
2万字实操案例之在Springboot框架下基于注解用Mybatis开发实现基础操作MySQL之预编译SQL主键返回增删改查
78 2
|
6月前
|
SQL Java 数据库连接
Mybatis如何使用mapper代理开发
Mybatis如何使用mapper代理开发
|
6月前
|
存储 Java 数据库连接
SSMP整合案例第三步 业务层service开发及基于Mybatis的接口功能拓展
SSMP整合案例第三步 业务层service开发及基于Mybatis的接口功能拓展
38 0