MyBatis-Plus

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、生成代码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值