MyBatis 持久层代码
MyBatis-Plus 持久层代码
只需要继承 BaseMapper,就可以实现单表 CRUD 操作,无须自己再编写SQL
一、MyBatis-Plus简介
MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生
官网:MyBatis-Plus
MyBatis-Plus特性:
--无侵入:只做增强不做改变,不会对现有工程产生影响
--强大的 CRUD 操作:内置通用 Mapper,少量配置即可实现单表CRUD 操作
--支持 Lambda:编写查询条件无需担心字段写错
--支持主键自动生成
--内置分页插件
--……
开发方式:
--单独使用 MyBatis-Plus
--基于 Spring 使用 MyBatis-Plus
--基于 SpringBoot 使用 MyBatis-Plus
在SpringBoot中使用MP需要导入如下坐标:
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.3</version>
</dependency>
导入以上坐标以后,如下jar包会自动导入
二、CRUD接口
1、开发环境搭建
①:创建maven工程,并配置相关基础信息
②:配置pom文件
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.3</version>
</dependency>
③:配置数据源(application.yml)
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/mybatisplus_db?serverTimezone=UTC
username: root
password: root
注意:如果使用Druid数据源,需要导入对应maven坐标
④:编写 SpringBoot 启动类
⑤:创建实体类与表结构(类名与表名对应,属性名与字段名对应)
CREATE TABLE `user` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '编号' ,
`name` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '用户名' ,
`password` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '密码' ,
`age` int(3) NOT NULL COMMENT '龄年' ,
`tel` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '电话' ,
PRIMARY KEY (`id`)
)
⑥:定义Mapper接口,继承 BaseMapper<User>
其中BaseMapper的泛型User是实体类
MP 所有接口方法
注意事项:学习MP,主要就是需要学习 BaseMapper 接口中的方法,开发过程中会经常使用到这些方法来操作数据库
2、新增操作
开启日志,将SQL打印在控制台:
在yml中加入以下配置:
控制台输出如图:
3、删除操作
传进去的id是long型所以要加L
4、修改操作
根据主键更新
5、查询操作
配置MyBatis-Plus的分页拦截器:
测试代码如下:
三、常用注解
TableName注解
名称:@TableName
类型:类注解
位置:模型类上
作用:设置当前类对应与数据库表关系
范例:
注意:如果类名和表名一致,MP可以自动进行映射,此时 TableName 注解可以省略
无须添加 TableName 注解,自动完成类名和表名映射的例子:
注意:如果类名使用驼峰命名法命名,表名使用对应的下划线分隔命名,MP可以自动进行映射,此时 TableName 注解可以省略
TableField注解
名称:@TableField
类型:属性注解
位置:模型类属性上
作用:设置当前属性对应的数据库表中的字段关系
相关属性
--value:设置数据库表字段名称
--exist:设置属性在数据库表字段中是否存在,默认为true
(数据库中表的属性不一定和类中的属性一致,所以有些情况是要设置为false)
范例:
注意:如果属性名和字段名一致,MP可以自动进行映射,此时 TableField 注解可以省略
TableId注解
名称:@TableId
类型:属性注解
位置:模型类中用于表示主键的属性上
作用:映射类中属性和表中主键对应关系,设置主键的生成策略
范例:
相关属性
value:设置数据库主键字段名称,如果属性名和字段名一致,可以省略此属性
type:设置主键属性的生成策略,值参照IdType枚举值
主键生成策略:
AUTO(0):使用数据库id自增策略控制id生成
NONE(1):不设置id生成策略
INPUT(2):用户手工输入id
ASSIGN_ID(3):雪花算法生成id(可兼容数值型与字符串型)
ASSIGN_UUID(4):以UUID生成算法作为id生成策略
雪花算法
--雪花算法(SnowFlake):是Twitter公司推出的专门针对分布式ID的解决方案
--结构:符号位+时间戳+工作进程位+序列号位,一个64bit的整数,8字节,正好为一个long类型数据
注意:如果不设置主键的生成策略,默认使用ASSIGN_ID(3)策略。
主键生成策略全局设置:
只需要在yml文件中加入如下配置:
然后在实体类中的主键id加上@TableId注解就可以了,如图:
四、条件构造器
1、条件构造器介绍
通过条件构造器(Wrapper),可以控制最终生成的 SQL 语句的条件部分。
select * from user where name like ? and age > ? and tel = ? order by ?
如图就是BaseMapper父接口,其中圈起来的就是条件构造器对象。
Wapper是MP定义的条件构造器顶级父接口,最常用的就是圈起来的四个子类
2、QueryWrapper
通过 QueryWrapper 条件构造器,可以控制最终生成的查询类的SQL语句
结构:select _____ from table_name where _____ order by _____
通过 QueryWrapper 条件构造器,可以控制最终生成的查询类的SQL语句
测试代码如下:
3、LambdaQueryWrapper
使用频率较高,主要是解决QueryWrapper条件构造器中字段容易写错的问题,使用LambdaQueryWrapper,字段有错的话,在编译阶段就会报错。
查询条件可以添加执行条件,如图,第一个参数只有为true时才会执行查询条件,其它的查询条件也一样可以设置
4、UpdateWrapper
通过 UpdateWrapper 条件构造器,可以控制最终生成的更新类的SQL语句。
结构:update table_name set _____ where _____
测试代码如下:
5、LambdaUpdateWrapper
通过 LambdaUpdateWrapper 条件构造器,可以控制最终生成的更新类的SQL语句。
测试代码如下:
条件构造器的链式编程风格
在使用条件构造器进行条件构造时,可以使用链式编程风格,如下:
额外知识点:
在设置里面关联数据库
这样sql语句就不会报错,(关联到了数据库)
为了进一步增强 mybatis 的功能,我们还可以在 Mapper 中声明方法时,方法的参数使用MP提供的Wrapper条件构造器对象,如下:
此处Mapper中声明的findByCondition方法的参数为 Wrapper类型,即条件构造器对象。并且通过@Param注解修饰,为其指定了别名为ew,这样就可以在SQL语句中通过 ${ew.customSqlSegment} 来获取到对应的SQL片段,这个SQL片段就是通过当前Wrapper对象解析成的。
注意:customSqlSegment 为固定写法,底层会调用Wrapper对象的getCustomSqlSegment 方法来获取对应的SQL片段。
五、扩展功能
1、逻辑删除
删除数据库中的数据,可以通过物理删除,也可以通过逻辑删除。
物理删除 指的是直接将数据从数据库中删除
逻辑删除 指的是修改数据的某个字段,使其表示为已删除状态,(如图中的deleted字段,1代表删除、0代表未删除)
对于重要的、后期可能需要恢复的数据,可以考虑使用逻辑删除
逻辑删除操作步骤:
第一步:在表中添加逻辑删除字段
第二步:在 application.yml 中配置逻辑删除相关配置项
第三步:在实体类中添加逻辑删除的属性,并加入 @TableLogic 注解
2、MP对于Service层的支持
MP 框架除了可以简化持久层代码开发,还为 Service 层提供了业务接口和实现类,可以简化 Service 层的开发
使用步骤:
1、业务接口继承 MP 提供的 IService 接口
2、业务实现类继承 MP 提供的 ServiceImpl 类
测试代码如下:
3、代码生成
MybatisX 是一款基于 IDEA 的快速开发插件,为效率而生。
安装方法:打开 IDEA,进入 File -> Settings -> Plugins -> Browse Repositories,输入 mybatisx 搜索并安装。
操作步骤:
1、配置数据源
2、生成代码