MyBatis Plus(1)

目录

1.MyBatisPlus是啥?

[2.MyBatis Plus的配置](#2.MyBatis Plus的配置)

1.添加依赖

2.配置数据库相关信息

3.配置打印MyBatis日志(可选)

[3.MyBatis Plus的使用](#3.MyBatis Plus的使用)

1.mapper

2.表名的自动驼峰转换

具体转换规则如下:

3.@TableName

1.@TableName("str")注解的作用:

2.注意:

3.举例

不加@TableNmae注解:

加@TableName注解:

[4.为什么SQL里这个id是自增的,调用insert插入的结果不是自增的 而是一个无规律的数?](#4.为什么SQL里这个id是自增的,调用insert插入的结果不是自增的 而是一个无规律的数?)

为什么会出现上述现象?

修改方案:加@TableId(type=)注解

注意要先修改【自增计数器】

5.字段与属性之间的映射关系

@TableField

改为:

4.结语


1.MyBatisPlus是啥?

MyBatis Plus是MyBatis的进化版,在MyBatis的基础上,简化开发,提高了效率。

2.MyBatis Plus的配置

1.添加依赖

SpringBoot 3x的使用这个依赖:

复制代码
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-spring-boot3-starter</artifactId>
    <version>3.5.15</version>
</dependency>

SpringBoot 2x的使用这个依赖:

复制代码
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-spring-boot-starter</artifactId>
    <version>3.5.7</version>
</dependency>

2.配置数据库相关信息

3.配置打印MyBatis日志(可选)

复制代码
mybatis-plus:
  configuration: # 配置打印 MyBatis日志
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

这个配置打印的就是这部分内容:

3.MyBatis Plus的使用

1.mapper

继承BaseMapper<>

BaseMapper提供了操作数据库的各种方法

2.表名的自动驼峰转换

如上图所示,idea的类叫【UserInfo】,数据库的表名叫【user_info】,那么在使用mybatis plus操作数据库时,直接使用父类的方法,那么mybatis是怎么知道发给数据库的预编译SQL 中的表名是【user_info】呢?

因为mybatis plus自带 类名驼峰转下划线的规则:MP在启动时,读取到BaseMapper<T>,这里【T】是【UserInfo】,拿到实体类,根据规则转换类名,后续使用时用转换后的类名。

具体转换规则如下:

3.@TableName

1.@TableName("str")注解的作用:

告诉MyBatis Plus,这个实体类对应的数据库表名叫做str,不再用自动驼峰转下划线的规则推算表名。

2.注意:

如果不加@TableName这个注解,MP就自动转换实体类名;

如果加了@TableName注解,就覆盖掉自动转换逻辑,使用str去数据库找对应表。

3.举例

把表名从【user_info】改为【userinfo】:

不加@TableNmae注解:

可以看到MP把实体类名自动转化为【user_info】,结果报错。

加@TableName注解:

4.为什么SQL里这个id是自增的,调用insert插入的结果不是自增的 而是一个无规律的数?

为什么会出现上述现象?

数据库里虽然把id设为AUTO_INCREMENT,但是MP默认的主键策略是【雪花算法】,雪花算法会在Java层面里提前生成一个随机数,赋值给实体对象的id里,再发送给数据库;

数据库接收到id已经有值了,就不会触发自增。

总结就是:MP先把id填好了,数据库的自增就跳过了。

修改方案:加@TableId(type=)注解

注意要先修改【自增计数器】

5.字段与属性之间的映射关系

【实体属性名】与【数据库字段名】MP也会自动转换

如果字段名与MP自动转换的不一致,实体类属性就要加@TableField注解

@TableField

结果:

改为:

4.结语

相关推荐
科创致远1 小时前
ESOP 电子作业指导书 WiFi 网络应用实测报告
运维·服务器·网络
香蕉大香蕉(06敬畏市场)1 小时前
MySQL 单点详解(08)
java·数据库·mysql·面试·八股
重生之小比特1 小时前
【Linux系统】17 库制作与原理(下)
linux·运维·服务器
thefool1122661 小时前
HTTPS协议
java
acd120091 小时前
Nginx 反向代理的缓冲区坑:后端响应大时接口偶发 502
java·运维·nginx
装不满的克莱因瓶1 小时前
支付订单成功异步MQ权益发放设计和开发
java·架构·系统架构·rabbitmq·硬件架构
程序员清风1 小时前
AI 编程助手的权限边界:文件、命令、密钥与人工确认
运维·服务器·网络
wacsii1 小时前
【Linux进程(二)】深入 Linux 内核:进程状态切换与底层数据结构的秘密
linux·服务器
高冷小鱼殿下2 小时前
内部类Lambda与枚举
java·开发语言