Mybatis-plus
基于mybatis框架上的加强版,拥有mybatis的所有优点,同时也加了一些属于自己的优点,加入mybatis-plus不会对之前存在的mybatis产生冲突
官网
https://baomidou.com/introduce/
所有详细的内容可访问这个网站
使用mybatis-plus
导入依赖
这里需要根据自己的spring框架的版本,自行去导入相应的依赖即可
配置yml文件
第一个是这个项目的名字,第二个是JDBC的连接,需要指明使用哪个库然后把账号密码一并写入,第三个是mybatis-plus的打印日志
代码实现
先创建实体类
写mapper接口
这个接口需要继承mybatis-plus的BaseMapper接口,由于是继承,basemapper里面实现了基本的CRUD,所以我们自己写的接口就可以直接调用父类的方法
这个basemapper接口是泛型类的,里面实现了基础的CRUD功能
测试用例
增
首先实例化一个对象,然后甚至对应的属性即可
删
删除基类也有很多个方法,只需要按照对应的使用即可
改
查
按照自己的需求去调用即可
为什么这个mybatis-plus知道我们要操作哪个表
这个和我们的命名规范有关,当我们命名规范的时候,这个框架会进行简单的隐式转化(驼峰自动转换)
类名:UserInfo
数据库名:user_info
当我们创建了对应的实体类以及里面对应的属性的时候,mybatis-plus会进行驼峰自动转换,只要我们的语法规范,那么他就可以自动识别,如果不规范的情况就会出现转换不超过,报无法找到对应的错误
错误1:
类名不规范
解决方法
使用注解@TableName
指定表名就可以让他找到对应的问题
错误2:属性名不规范
和表名不规范一样,都会报错,这个报错的是bad sql表示语法错误
自增主键
使用注解@TableId
如果主键就是id就不需要加这个注解,如果主键不是id,就需要加注解@Tableid指定主键
指定主键的名字(如果就叫id就不需要指定),还有自动递增(在mybatis-plus中,由这个框架自动生成的,所以自增的主键会很大)
条件构造器
官方:https://baomidou.com/guides/wrapper/
构造器:mybatis-plus框架为我们提供的,用于构造更复杂的数据库查询条件的。
常见的几个:
查
Mybatis写法
Plus构造器写法
创建一个wrapper,然后把你想要的语句进行拼接即可,wrapper支持链式拼接,select表示选择,eq表示等于,like表示and
更新
创建一个wrapper,然后使用链式拼接,lt表示less than,小于的意思,上面这个wrapper表示age<20,后续这个创建一个类是为了前面的deleteflag的值,最后调用
第二种写法
不创建实体对象直接设置更新的字段和条件
这里使用的是updateWrapper,只有这个才不用创建新的对象,这个可以直接使用set表示你要修改的字段名,in表示的在范围之内
更新sql计算式
这里需要使用setsql这个来写即可,把需要写的写进去即可
删除
依旧创建一个wrapper然后开始拼接需要的条件
总结
可以使用构造器进行拼接你所需要的sql语句,使用的时候只需要遵守规则即可,都是先创建一个对象,然后开始链式拼接调用
注意点:
如果有字段使用了@TableFiled起了别名,当去数据库查询的时候,会自动映射到对应驼峰转换的属性上,不会赋值到别名的位置,会导致出现赋值为空的情况
LambdaQueryWrapper && LambdaUpdateWrapper
LambdaQueryWrapper和LambdaUpdateWrapper存在就是为了解决上述两个存在的问题,字段名被写死了,后续如果发生变更就会很难发现
LambdaQueryWrapper
Select username,password,age from user_info where gender =1;
依旧创建一个wrapper对象,然后使用这个对象调用lambda表达式,后续的拼接逻辑是一样的
LambdaUpdateWrapper
Update user_info set delete_flag =1,age=5 where id in(1,2,3)
依旧创建一个对象,然后需要使用lambda表达式,然后按照需求进行拼接即可
自定义SQL
硬性要求:mybatis-plus版本不低于3.0.7
Mapper层
${ew.customSqlSegment}:
可以理解为一个动态的占位符,在写sql语句传参的时候,就必须使用${ew.customSqlSegment}来接收wrapper对象的sql片段
@Param(Constants.WRAPPER) QueryWrapper<UserInfo> wrapper
这个进行的是参数绑定,把传入的wrapper对象绑定到默认的ew(默认的参数名)
测试
这里负责写你的sql语句,后续只需要拼接,有修改也只是需要修改这里就行
这样做的意义就是为了解耦和,解决之前出现的写死的情况
Xml实现
先配置xml的路径
接着先写mapper
写测试用例
总结
使用自定义SQL主要是为了提供自己实现sql语句,让你按照自己的需求进行设计sql语句
注意点;
在sql语句中,${ew.customSqlSegment}作为动态占位符,负责拼接
使用@Param(Constants.WRAPPER)来接收传输的wrapper对象,进行参数绑定默认到ew中
后续只需要传wrapper对象即可
Mybatis-plus
一个基于mybatis升级的框架,提升我们的开发效率,拥有mybatis的所有优势
使用自定义sql需要注意版本问题