MyBatis-Plus 从入门到精通

小七学习网,助您升职加薪,遇问题可联系:客服微信【1601371900】 备注:来自网站

MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。 只做增强不做改变,引入它不会对现有工程产生影响,如丝…

MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑。

通过介绍 MyBatis-Plus 让读者能够进一步的熟悉半自动化持久层框架,便捷开发。

本文内容将涉及如下:

  • MyBatis-Plus 介绍和环境搭建。
  • MyBatis-Plus 相关注解的使用。
  • MyBatis-Puls 自定义填充 MyMetaObjectHandler 组件
  • MyBatis-Puls 实现乐观锁
  • MyBatis-Puls 的分页插件组件
  • MyBatis-Puls 实现逻辑删除
  • MyBatis-Puls 条件构造器的使用
  • MyBatis-Puls 案例源码与总结

本文主要适用了解持久层框架,熟悉 Mybatis 的更佳。



MyBatis-Plus 介绍和环境搭建

MyBatis-Plus 介绍

我们先来分析一下为什么我们要用 MyBatis-Plus 而不再继续用 MyBatis 了?MyBatis 有什么缺点吗?

首先,我们可以发现传统的 MyBatis 存在很致命的问题,每个实体表对应一个实体类,对应一个 Mapper.java 接口,对应一个 Mapper.xml 配置文件每个 Mapper.java 接口都有重复的 Crud 方法,每一个 Mapper.xml 都有重复的 Crud 的 SQL 配置。这无疑是重复性的工作,大大降低我们开发的效率。

然后,我们再看 MyBatis-Plus 相比较而言有什么好处。

MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

最后,我们从上面官网的截图就可以看出,MyBatis-Plus 在 MyBatis 的基础上做了增强,我们只需要更新一下 Maven 依赖即可,我们只需要继承 BaseMapper 就可以完成大多数 Crud 的功能,无需要编写 XML 格式文件和 SQL 语句,更适合我们开发,效率提升会特别明显。

在这里插入图片描述
在这里插入图片描述

上图中全是 BaseMapper 中的接口方法,已经包含了我们传统的大多数 Crud 接口,比较复杂的 SQL 我们也可用自定义构造器 wrapper 去实现(下文会具体讲解)。

MyBatis-Plus 环境搭建

首先,我们新建一个 Spring Boot 的基础项目,然后再 pom.xml 文件中引入 MyBatis-Plus 的相关依赖。引入 MySQL 和 Druid 连接池相关依赖。

 <properties>        <java.version>1.8</java.version>        <mybatis-plus-boot-starter>3.0.5</mybatis-plus-boot-starter>        <mybatis-plus>3.0.5</mybatis-plus>        <mysql-connector-java>5.1.38</mysql-connector-java>        <druid-spring-boot-starter>1.1.10</druid-spring-boot-starter>    </properties>    <dependencies>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-web</artifactId>        </dependency>        <!--阿里巴巴 druid-->        <dependency>            <groupId>com.alibaba</groupId>            <artifactId>druid-spring-boot-starter</artifactId>            <version>${druid-spring-boot-starter}</version>        </dependency>        <!-- MyBatis-Plus -->        <dependency>            <groupId>com.baomidou</groupId>            <artifactId>mybatis-plus-boot-starter</artifactId>            <version>${mybatis-plus-boot-starter}</version>        </dependency>        <dependency>            <groupId>com.baomidou</groupId>            <artifactId>mybatis-plus</artifactId>            <version>${mybatis-plus}</version>        </dependency>        <dependency>            <groupId>mysql</groupId>            <artifactId>mysql-connector-java</artifactId>            <version>${mysql-connector-java}</version>        </dependency>

然后,我们去编写 application.yml 中 MySQL 和 Druid 和 MyBatis-Plus 的相关配置信息。如下:

在这里插入图片描述

上面的注释也写的十分详细,最后我们要添加我们的扫包策略,不然的话要每个 Dao 层的类文件加 @Mapper 这样的注解,十分麻烦。只需要新建一个匹配类,加上 @MapperScan(\"这里写你 dao 成的包路径\") 即可,看下图:

在这里插入图片描述

至此,我们的环境基本搭建完成了,接下来会已实际的数据库实体和相关接口来演示 MyBatis-Plus 的相关使用。

MyBatis-Plus 相关注解的使用

指定表中主键列的列名,如果实体属性名与列名一致,可以省略不指定:

@TableId(value = \"id\", type = IdType.AUTO) 

自增:

@TableId(value = “id”, type = IdType.AUTO)

分布式全局唯一 ID 字符串类型:

@TableId(value = “id”, type = IdType.ID_WORKER_STR)

自行输入:

@TableId(value = “id”, type = IdType.INPUT)

分布式全局唯一 ID 长整型类型:

@TableId(value = “id”, type = IdType.ID_WORKER)

32 位 UUID 字符串:

@TableId(value = “id”, type = IdType.UUID)

MyBatis-Plus 会默认使用实体类的类名到数据库中找对应的表,value 对应的值就是我们的数据库表名:

@TableName(value = \"sys_user\")

使用该注解的 value 值来指定数据库对应的字段名:

@TableField(value = \"user_name\")

用来标识该属性是否作为数据库的表字段,值为 false 时,不作为数据库的字段:

@TableField(exit = false)

表示该属性可以模糊搜索:

@TableField(condition = SqlCondition.LIKE)

注解填充字段,生成器策略部分下文会说到:

@TableField(fill = FieldFill.INSERT)
  • @Version:乐观锁注解、标记
  • @EnumValue:通枚举类注解
  • @TableLogic:表字段逻辑处理注解(逻辑删除)下文会说到
  • @SqlParser:租户注解

MyBatis-Puls 自定义填充 MyMetaObjectHandler 组件

有些时候我们希望数据的创建时间和更新时间,能够智能一点,不需要我们去单独处理。

所以,MyBatis-Puls 也支持我们自定义填充数据的策略,我们只需要实现 MetaObjectHandler 去重写其中的新增数据时插入和修改时更新的策略就行。

如下代码所示,我们先用上文注解,去在定义到我们对应的字段上:

@TableField(fill = FieldFill.INSERT)
在这里插入图片描述

然后我们去自定义我们的填充策略,记得一定要用 @Component 注解,以便被 Spring 加载到。

在这里插入图片描述

以上步骤完成,在我们调用 MyBatis-Plus 接口的时候,在 insert 的时候我们的 createDate 就会填充 new Date() 的值了,同理在我们 update 数据的时候,就会更新 updateDate 的数据。注意,如果是使用 XML 文件配置的接口的 SQL 的方式来调用接口的,此自定义的填充策略不会生效。

MyBatis-Puls 实现乐观锁

乐观锁认为数据一般情况下不会造成冲突,所以在数据进行提交更新的时候,才会正式对数据的冲突与否进行检测。乐观锁一般通过版本号实现。

首先,我们的实现方式分为以下步骤。

  1. 取出记录时,获取当前 version
  2. 更新时,带上这个 version
  3. 执行更新时 set version = newVersion where version = oldVersion
  4. 如果 version 不对,就更新失败

所以,在 MyBatis-Plus 中已经为我们实现了乐观锁,只需在表中添加一个 version 字段。然后如下图:

在这里插入图片描述

最后,我们在注册一下乐观锁的插件,使其生效。

在这里插入图片描述

是不是很简单?

MyBatis-Puls 的分页插件组件

其实和上文注册组件一样简单,如下图:

在这里插入图片描述

红框里的路径就是你 dao 层接口的包路径,这样配置之后就不用每个 dao 层的接口文件加 @Mapper 注解了,会自动扫描。

MyBatis-Puls 实现逻辑删除

首先,我们需要在配置文件中定义好逻辑删除的规则,如下图:

在这里插入图片描述

然后,我们在实体类对应字段中加入上文提到的注解,如下图:

在这里插入图片描述

可能有的小伙伴也注意到了我多加了一个注解 TableField(select = false),这个是表示我们后面的查询接口会排除这个字段显示。

MyBatis-Puls 条件构造器的使用

首先,我们要知道 MyBatis-Plus 的条件构造器之所以带了“条件”二字,其实就是对我们 SQL 自定义一些我们想要的条件策略。先看下图:

在这里插入图片描述
在这里插入图片描述

QueryWrapper 的使用:

在这里插入图片描述

UpdateWrapper 的使用:

在这里插入图片描述

看了上面的实例是不是发现很简单,都不用我们去写 XML 了,而且常用的接口 MyBatis-Plus 封装的都有,可以直接调用。

MyBatis-Puls 案例源码与总结

首先,总结一下,MyBatis-Plus 还是十分强大的的一个半自动持久层框架,对于我们开发人员来说也特别好用,对于已有的项目,我们只需要把 MyBatis 的依赖替换成 MyBatis-Plus 就行了,不会影响现有项目的使用,这样也非常灵性。

而且如果我们习惯用条件构造器和 MyBatis-Plus 自带的接口方法,那么我们如果在做更换数据库的时候会发现变的特别容易,本案例的源码还未整合完善,后续会发在评论中。

小七学习网,助您升职加薪,遇问题可联系:客服微信【1601371900】 备注:来自网站

免责声明: 1、本站信息来自网络,版权争议与本站无关 2、本站所有主题由该帖子作者发表,该帖子作者与本站享有帖子相关版权 3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和本站的同意 4、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责 5、用户所发布的一切软件的解密分析文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。 6、您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。 7、请支持正版软件、得到更好的正版服务。 8、如有侵权请立即告知本站(邮箱:1099252741@qq.com,备用微信:1099252741),本站将及时予与删除 9、本站所发布的一切破解补丁、注册机和注册信息及软件的解密分析文章和视频仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。