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

Mybatis-plus只对单表查询做了增强,方便你操作,但是对于多表查询并没有什么出路.....

都是Mybatis的

实现复杂关系映射

@Results:代替<resultMap>标签,该注解中可以加入单个或多个@Result注解

@Result:代替<id>标签和<Result>标签,@Result标签中可以使用以下属性

                --column:数据表的字段名称

                --property:类中对应的属性名

                --one:与@One注解配合,进行一对一的映射

                --many:与@Many注解配合,进行一对多的映射

@One:代替<assocation>标签,用于指定查询中返回的单一对象,通过select属性指定用于多表查询                 的方法

@Many:代替<collection>标签,用于指定查询中返回的集合对象

                使用格式:@Result(column="xxx",property="xxx",many=@Many(select="xxxx"))

演示一下

外键约束没有必要,也不建议

@TableField(exist=false)用来告诉Mybatis-plus该字段不存在,不然单表查询时候使用mybatis-plus提供的方法,会在sql里将该字段名用在SQL里报错

比如  select id,user_name,pass_word,orders from t_user 而数据表里没有orders字段,自然报错了

 

 这是一对多

 java类属性如果和数据表字段相同,@Result可以不写

 注意下  其实@TableId已经指明了是  可以不写   最多@Result里写一下  

因为看到一个提示,注意下去掉即可

 

 

多表联查时候用的都是MyBatis的   @TableField只用于Mybatis-plus  定义的方法

 其实通过上面的例子

一对多,一对一,多对一,其实都已经差不多相同套路

再来演示个一对一关系,查询订单的用户

 

 

 

注意注意注意,最好实体类实现序列化接口,暂时没全搞懂序列化意义,但是实现不会报错,只有好处,没坏处的事多干些

关于多个参数,发挥你的想象

@Result(column="{age=age,gender=gender}", property="lunch", 
        one=@One(select="com.example.demo.mapper.StudentMapper.getLunchByAgeAndGender")),
    })
 

用Mybatis-plus的方法   注意@TableName   @TableFild   @TableId的使用   注意使用Mybatis-plus方法时,不存在的字段用@TableFild(exits=false)

关于条件构造器  AbstractWrapper

QueryWrapper用于查询

UpdateWrapper用于更新

关于分页

select * from XXX limit 0,10

配置:告诉Mybatis-plus你所使用的数据库

创建一个MybatisPlus的拦截器

注意  如果是3.4.0以前

配置的是PaginationInterceptor

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hrui0706

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值