Mybatis-Plus
新建个项目
引入lombok devtools web mysql驱动
pom.xml引入mybatis-plus依赖
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.2</version> </dependency>
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/mydb?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true spring.datasource.username=root spring.datasource.password=123456#指定实体包名 mybatis-plus.type-aliases-package=com.example.mybatisplus.pojo #指定.xml路径 mybatis-plus.mapper-locations=classpath:/mapper/*.xml #开启驼峰命名 mybatis-plus.configuration.map-underscore-to-camel-case=true#Spring 框架自带的日志框架(Spring Framework Logging) logging.level.com.example.mybatisplus=debug
参数的解释:
serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true
是 MySQL 数据库连接字符串中的一组参数,用于指定连接 MySQL 数据库时使用的时区、字符编码、是否启用自动重连、是否允许多个查询等选项。具体含义如下:
serverTimezone=GMT%2B8
:指定 MySQL 服务器所在时区为 GMT+8,即东八区。如果不指定该参数,可能会导致与数据库的时间相关操作出现错误。useUnicode=true
:指定连接时使用 Unicode 字符编码。这样可以确保在传输和处理字符数据时不会出现乱码问题。characterEncoding=utf8
:指定字符编码为 UTF-8。UTF-8 是一种通用的字符编码方式,支持多种语言和字符集,可以确保在处理不同语言的字符数据时不会出现乱码问题。autoReconnect=true
:指定在连接中断时自动尝试重新连接到 MySQL 数据库。这样可以确保在数据库出现连接异常或断开连接时,应用程序可以自动重连并继续工作。allowMultiQueries=true
:指定是否允许在一条 SQL 语句中执行多个查询。这样可以减少应用程序与数据库之间的网络通信次数,提高查询效率。但同时也存在一定的安全风险,可能会导致 SQL 注入等问题。
这些参数可以在 MySQL 数据库连接字符串中按照 URL 参数的方式进行指定,以 key=value
的形式出现,并使用 &
进行分隔。
注意:useAffectedRows=true 看情况配置
useAffectedRows=true
是 MySQL JDBC 驱动程序的一个配置参数,用于指定在执行 UPDATE、INSERT、DELETE 等更新操作时,返回的是受影响的行数还是匹配的行数。具体含义如下:
- 当
useAffectedRows=false
(默认值)时,返回的是匹配的行数,即查询条件匹配的所有记录的总数。 - 当
useAffectedRows=true
时,返回的是受影响的行数,即执行更新操作后,实际受到影响的记录的总数。
在一般情况下,应该使用默认值 false
。但在某些特殊情况下,可能需要使用 true
,比如当更新操作可能影响多个表或多个行时,或者在分布式系统中使用乐观锁时。
新建个库用于测试
新建张用户表用于测试 主键自增
插入几条数据
insert into t_user values(null,'哈哈','123','2022-03-04'),(null,'呵呵','123','2022-05-06')
注意扫描的mapper文件路径和你自己的对应
mybatis-plus依赖是包含mybatis的
先加几个类
以上是用Mybatis实现的一些基本增删改查(苛刻一点讲,不够标准化),部分需要用postman测试
下面测试用Mybatis-plus
这个BaseMapper里所有方法都可以直接使用
这个时候需要注意一点,直接这样查会报错
实体类和数据库表名不一样 加个@TableName 假如你表名和数据库一样,不加也行 不用怀疑 测试过
列名因为在application.properties里配置了自动转驼峰 因此没有问题,假如说,我application.properties里将自动转驼峰去掉
查询时候居然也可以 本以为可以用下@Column注解
测试时候发现会自动转驼峰 只要不设置为false 如果设置为false列名不同报错
但是如果不设置自动转驼峰,也可以自动转 可能是版本原因 毕竟配置相关能免则免了
mybatis-plus.configuration.map-underscore-to-camel-case=false
试下插入方法
报错了,看样子
很明显这个值超过了int最大值 改成bigint
实体类id 改成Long
这里还是没有用@Column注解 照样可以插入 看样子配置了自动转驼峰,即使不配置,只要转驼峰不是false,都用不着@Column了 这个还是看具体版本
注意下面,我没在实体类上加其他注解,光加了个@TableName("t_user")来做表映射
可以看出,Mybatis-plus插入时候默认用了雪花算法,而且自动生成了主键(主键是插入前就自动生成了,就是说不添加@TableId 是默认用雪花算法,生成之后插入,而用了@TableId(type=Idtype.AUTO)则会递增之后返回),而且我们也不需要再额外去配置返回主键了(这个很重要,自己感觉很重要,记得有次看源码debug到雪花算法是插入前生成的,那么输出user时候id有值是正常的,但是加了@TableId(type=Idtype.AUTO)是根据插入之后数据库生成的id值来进行主键返回的) 不知道对不对 猜的
下面关于@TableId注解,用来设置生成主键的策略
新建张表 注意id自增递增
mybatis-plus如果没有指定@TableId生成策略的话,默认用的雪花算法,为什么叫雪花算法我也不知道,记得N年前老师这么教的.........雪花好记
其他的哪些主键生成策略,可以自己尝试,UUID那很明显了不是
这里我故意将userName 随便改了下
驼峰不行了 这个时候用@TableField 别用@Column.......用一次报错一次.
当然此时测试时候前端传过来的时usersname 这样即使胡乱写 不是驼峰 也可以转换 但是没必要,没人这么无聊吧......知道就好,驼峰照开, 如果真的某种情况下,不想用驼峰对照,那么用
@TableField来对应字段即可 我这边还是改回userName 不然怪怪的
改日继续