当前位置: 首页 > news >正文

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 不然怪怪的

改日继续

http://www.lryc.cn/news/33753.html

相关文章:

  • yolov8行人识别教程(2023年毕业设计+源码)
  • CAD指令框找不到了怎么调出来?CAD指令框调出方法
  • 一般用哪些工具做大数据可视化分析?
  • Python每日一练(20230308)
  • jvm之堆解读
  • 重构·改善既有代码的设计.02
  • 脑电信号处理总成
  • 判断推理之图形推理
  • 【预告】ORACLE Unifier v22.12 虚拟机发布
  • Sql执行流程与Redo log、 Undo log、 Bin log日志文件
  • 如何提高软件测试执行力
  • Open3D 计算点到平面的距离
  • DDD领域驱动设计初探
  • C中AES_cbc_encrypt加密对应java中的解密
  • 演化算法:乌鸦搜索算法 (Crow Search Algorithm)
  • 基于open62541的OPC UA服务器和客户端开发技术
  • 测试测开面试要知道的那些事01
  • 物联网毕设 -- 智能厨房监测系统(改)
  • macOS 13.3 Beta 3 (22E5236f)发布
  • Failed to configure a DataSource: ‘url‘ attribute
  • Mysql高级——锁
  • Spring的Async注解线程池扩展方案
  • wfb-ng 锁定WiFi接口
  • Python所有方向的入门和进阶路线,20年老师傅告诉你方法
  • RLOAM/RO-LOAM
  • JUC并发编程之Semaphore-应用与深度源码剖析
  • JWT详细介绍使用
  • C/C++开发,无可避免的多线程(篇六).线程池封装类
  • HIVE中如何实现针对IPv6 CIDR的查询
  • 【微信小程序】-- 生命周期(二十八)