`
valiant025
  • 浏览: 17088 次
  • 性别: Icon_minigender_2
  • 来自: 广州
社区版块
存档分类
最新评论

Spring Boot : Mybatis 增强工具 MyBatis-Plus

 
阅读更多

 

Spring Boot (八): Mybatis 增强工具 MyBatis-Plus
 

 

1. 简介

在目前微服务的架构模式下,每个服务拥有自己的单独的数据库,单表的使用场景会越来越多, Mybatis 的使用无疑会产生很多重复劳动。

Mybatis Plus 在这样的背景下应运而生了,MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。而开源团队对这个开源项目的愿景如下:

愿景
我们的愿景是成为 MyBatis 最好的搭档,就像 魂斗罗 中的 1P、2P,基友搭配,效率翻倍。

2. 特性

  • 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
  • 损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作
  • 强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求
  • 支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错
  • 支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器 – Sequence),可自由配置,完美解决主键问题
  • 支持 ActiveRecord 模式:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可进行强大的 CRUD 操作
  • 支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )
  • 内置代码生成器:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎,更有超多自定义配置等您来使用
  • 内置分页插件:基于 MyBatis 物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通 List 查询
  • 分页插件支持多种数据库:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer2005、SQLServer 等多种数据库
  • 内置性能分析插件:可输出 Sql 语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢查询
  • 内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,也可自定义拦截规则,预防误操作

Mybatis-Plus 相比较 Mybatis 更好的支持了单表的相关操作,并且直接支持分页功能,还加入了一系列有助于开发的插件。下面将会介绍 Mybatis-Plus 的单表操作和引入 SQL 分析插件。

3. 工程实战

3.1 工程依赖 pom.xml 如下:

代码清单:spring-boot-mybatis-plus/pom.xml

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.2.0</version>
</dependency>

<!-- https://mvnrepository.com/artifact/p6spy/p6spy -->
<dependency>
    <groupId>p6spy</groupId>
    <artifactId>p6spy</artifactId>
    <version>3.8.6</version>
</dependency>

 

  • mybatis-plus-boot-starter 为 mybatis-plus 所需依赖
  • p6spy 为 SQL 分析打印依赖,如不需要,可以单独引入 mybatis-plus-boot-starter 。
  • 3.2 配置

配置文件 application.yml 如下:

代码清单:spring-boot-mybatis-plus/src/main/resources/application.yml

server:
  port: 8080
spring:
  application:
    name: spring-boot-mybatis-xml
  datasource:
    url: jdbc:p6spy:mysql://172.16.96.112:3306/test?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8&useSSL=false
    username: root
    password: 123456
    driver-class-name: com.p6spy.engine.spy.P6SpyDriver
    type: com.zaxxer.hikari.HikariDataSource
    hikari:
      auto-commit: true
      minimum-idle: 2
      idle-timeout: 60000
      connection-timeout: 30000
      max-lifetime: 1800000
      pool-name: DatebookHikariCP
      maximum-pool-size: 5
# 配置slq打印日志
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

 注意:开启 mybatis-plus 的 SQL 分析打印

  • 需要配置 mybatis-plus.configuration.log-impl 。
  • 修改配置 spring.datasource.driver-class-name 为 com.p6spy.engine.spy.P6SpyDriver ,这个配置是使用 p6spy 提供的驱动类。
  • url 前缀为 jdbc:p6spy 跟着冒号为对应数据库连接地址。
  • 该插件有性能损耗,不建议生产环境使用。
  • 还需增加 spy.properties ,如下:

代码清单:spring-boot-mybatis-plus/src/main/resources/spy.properties

module.log=com.p6spy.engine.logging.P6LogFactory,com.p6spy.engine.outage.P6OutageFactory
# 自定义日志打印
logMessageFormat=com.baomidou.mybatisplus.extension.p6spy.P6SpyLogger
#日志输出到控制台
appender=com.baomidou.mybatisplus.extension.p6spy.StdoutLogger
# 使用日志系统记录 sql
#appender=com.p6spy.engine.spy.appender.Slf4JLogger
# 设置 p6spy driver 代理
deregisterdrivers=true
# 取消JDBC URL前缀
useprefix=true
# 配置记录 Log 例外,可去掉的结果集有error,info,batch,debug,statement,commit,rollback,result,resultset.
excludecategories=info,debug,result,batch,resultset
# 日期格式
dateformat=yyyy-MM-dd HH:mm:ss
# 实际驱动可多个
#driverlist=org.h2.Driver
# 是否开启慢SQL记录
outagedetection=true
# 慢SQL记录标准 2 秒
outagedetectioninterval=2

 3.3 Mapper 类

代码清单:spring-boot-mybatis-plus/src/main/java/com/springboot/springbootmybatisplus/mapper/UserMapper.java

public interface UserMapper extends BaseMapper<User> {
}

 这里只需要继承 BaseMapper 即可, BaseMapper 为我们提供了丰富的单表操作,具体的操作可以查看源码 com.baomidou.mybatisplus.core.mapper.BaseMapper<T> ,其中的注释非常详尽。

3.4 Service 类

Mybatis-Plus 除了为我们提供了基础的 Mapper 类以外,还为我们提供了 IService ,通用 Service CRUD 封装IService接口,进一步封装 CRUD 采用 get 查询单行 remove 删除 list 查询集合 page 分页 前缀命名方式区分 Mapper 层避免混淆。并且官方建议我们如果存在自定义通用 Service 方法的可能,请创建自己的 IBaseService 继承 Mybatis-Plus 提供的基类。

UserService.java 代码如下:

代码清单:spring-boot-mybatis-plus/src/main/java/com/springboot/springbootmybatisplus/service/UserService.java

public interface UserService extends IService<User> {
}

 UserServiceImpl.java 代码如下;

代码清单:spring-boot-mybatis-plus/src/main/java/com/springboot/springbootmybatisplus/service/impl/UserServiceImpl.java

@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
}

 相关测试代码已经创建测试 controller ,这里就不列出了,有需要的读者可以访问 Github 代码仓库自行取用。

3.5 分页配置类

代码清单:spring-boot-mybatis-plus/src/main/java/com/springboot/springbootmybatisplus/config/MybatisPlusConfig.java

@Configuration
public class MybatisPlusConfig {

    /**
     * 注册分页插件
     * @return
     */
    @Bean
    public PaginationInterceptor paginationInterceptor(){
        return  new PaginationInterceptor();
    }

}

 

4. 测试

启动工程后,打开浏览器访问:http://localhost:8080/findPage ,可以看到 json 正常返回,如下:

{
    "records":[
        {
            "id":"a0ac692d-e1f1-11e9-9a69-0242ac110002",
            "nickName":"geekdigging.com",
            "age":108,
            "createDate":"2019-09-28T13:12:31.000+0000"
        },
        {
            "id":"b9168576-e1f1-11e9-9a69-0242ac110002",
            "nickName":"www.geekdigging.com",
            "age":18,
            "createDate":"2019-09-28T13:13:12.000+0000"
        }
    ],
    "total":2,
    "size":5,
    "current":1,
    "orders":[

    ],
    "searchCount":true,
    "pages":1
}

 这时我们查看控制台的日志,可以看到 SQL 分析的相关日志,如下:

 

Spring Boot (八): Mybatis 增强工具 MyBatis-Plus
 

 

从日志中,我们可以清楚的看到当前日志执行的过程,先执行了什么后执行了什么,并且耗时是多少,有助于我们的进行 SQL 的性能分析,知道具体是哪些 SQL 耗时会比较长。

5. 小结

Mybatis-Plus 整体使用都比较简单,Mybatis 支持的使用方式 Mybatis-Plus 都支持,只是原本配置文件 application.yml 中的 mybatis.*** 需要替换成为 mybatis-plus.*** ,并且增强了 Mybatis 原本单表操作的不足之处,对于官方的宣言:只做增强不做改变,为简化开发、提高效率而生。笔者认为是十分贴切的。本文仅介绍了 Mybatis-Plus 的一些基础使用方式,官方除了增强了单表操作、分页、 SQL 分析等功能外,还提供了很多实用的插件,例如:热加载、逻辑删除、SQL 注入器、攻击 SQL 阻断解析器等功能,如有需要的读者朋友可以访问官方文档自取。

 

分享到:
评论

相关推荐

    mybatis-plus-boot-starter-3.3.0.jar

    mybatis-plus-boot-starter.jar 各个版本下载, ...Mybatis-Plus(简称MP)是一个基于MyBatis的增强工具库,它简化了与数据库的交互操作并提供了一系列增强功能,使开发者能够更加方便快捷地进行数据库访问。

    mybatis-plus-boot-starter-3.4.3.3.jar

    mybatis-plus-boot-starter.jar 各个版本下载, ...Mybatis-Plus(简称MP)是一个基于MyBatis的增强工具库,它简化了与数据库的交互操作并提供了一系列增强功能,使开发者能够更加方便快捷地进行数据库访问。

    mybatis-plus-boot-starter-3.5.3.1.jar

    mybatis-plus-boot-starter.jar 各个版本下载, ...Mybatis-Plus(简称MP)是一个基于MyBatis的增强工具库,它简化了与数据库的交互操作并提供了一系列增强功能,使开发者能够更加方便快捷地进行数据库访问。

    mybatis-spring-boot-starter-3.0.1.jar

    MyBatis Spring Boot Starter.jar 各个版本,免费下载。 MyBatis Spring Boot Starter.jar 起步依赖和自动配置。

    mybatis-plus-boot-starter-3.5.3.2.jar

    mybatis-plus-boot-starter.jar 各个版本下载, ...Mybatis-Plus(简称MP)是一个基于MyBatis的增强工具库,它简化了与数据库的交互操作并提供了一系列增强功能,使开发者能够更加方便快捷地进行数据库访问。

    spring-boot-starter-mybatis-spring-boot-2.1.2.zip

    `spring-boot-starter-mybatis`是Spring Boot为MyBatis提供的一站式解决方案,它包含MyBatis核心库、MyBatis-Spring以及相关的依赖,使得开发者无需手动管理这些依赖,只需简单配置即可实现MyBatis的集成。...

    spring-boot-starter-mybatis-spring-boot-2.0.0.tar.gz

    总结,"spring-boot-starter-mybatis-spring-boot-2.0.0"是一个强大且便捷的工具,让Spring Boot与MyBatis的集成变得简单。理解其工作原理并熟练运用,能显著提升开发效率,为构建高效、健壮的企业级应用打下坚实...

    spring-boot-starter-mybatis-spring-boot-3.0.0.tar.gz

    - MyBatis Plus:基于MyBatis的增强工具,提供更丰富的CRUD操作,简化开发。 - MyBatis-Plus-Spring-Boot-Starter:与Spring Boot的集成,可以自动配置MyBatis Plus。 - 自定义拦截器:通过实现`Interceptor`接口...

    mybatis-plus-boot-starter-3.1.1.jar

    java运行依赖jar包

    spring-boot-starter-mybatis-spring-boot-2.1.4.tar.gz

    《Spring Boot集成MyBatis详解:基于spring-boot-starter-mybatis-2.1.4》 在现代Java开发中,Spring Boot以其简化配置、快速启动的优势成为主流框架。而MyBatis作为轻量级持久层框架,以其灵活的SQL映射和强大的...

    外卖点餐系统,后端:springboot+mybatis+mybatis-plus 前端:vue+elmen

    后端使用Spring Boot和MyBatis作为开发框架,而前端使用Vue和ElementUI作为开发工具。 后端开发框架 后端使用Spring Boot作为开发框架,Spring Boot是一个轻量级的框架,易于学习和使用,可以快速搭建项目。它提供...

    基于spring boot 2集成mybatis-plus的简单实例

    在本文中,我们将深入探讨如何在Spring Boot 2框架中集成MyBatis-Plus,并通过一个简单的实例来演示这一过程。MyBatis-Plus是一个强大的MyBatis扩展,它简化了数据库操作,提供了诸如CRUD操作、条件查询、分页等功能...

    spring-boot-starter-mybatis-spring-boot-2.3.1.zip

    Spring Boot Starter MyBatis是Spring Boot官方提供的一个起步依赖,它包含了MyBatis和Spring Data JPA等组件,使得开发者可以快速搭建基于MyBatis的Spring Boot应用。在2.3.1版本中,这个起步依赖已经进行了优化和...

    spring-boot-starter-mybatis-spring-boot-1.1.0.tar.gz

    比如,从1.1.0版本到2.x版本,Spring Boot提供了更多的自动配置功能,如对多数据源的支持、对MyBatis Plus的集成等。同时,MyBatis自身也进行了优化,包括增强的SQL映射、更好的事务管理等。 此外,对于Linux环境的...

    持久层开源工具MyBatis-Plus快速入门,Spring Boot整合MyBatis-Plus简化开发示例代码

    MyBatis-Plus是MyBatis的增强工具,它包含了MyBatis的所有特性,并在其基础上进行了增强。主要特点包括自动化 CRUD 操作、支持自定义全局通用操作、提供强大的条件构造器等。`MetaObject`是MyBatis中的一个辅助类,...

    spring-boot-starter-mybatis-spring-boot-3.0.1.tar.gz

    `spring-boot-starter-mybatis`还支持Mybatis的其他功能,如Mybatis Plus、PageHelper分页插件等,可以通过添加相应依赖,实现更高级的功能,如动态SQL、条件构造、一键分页等。 总结,`spring-boot-starter-...

    spring-boot-starter-mybatis-spring-boot-1.3.2.zip

    - 结合MyBatis Plus增强工具,简化通用的CRUD操作。 6. **版本差异** 提到的`spring-boot-starter-mybatis-spring-boot-1.3.2`,这是特定版本的集成包,每个版本可能包含不同的特性、修复和性能优化。升级或降级...

    基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 微信小程序

    基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 微信小程序基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 微信小程序基于 Spring Boot + MyBatis Plus + Vue & ...

    spring-boot-starter-mybatis-spring-boot-2.1.4.zip

    5. **MyBatis Plus**:MyBatis的增强工具,提供了丰富的CRUD操作,简化了开发工作。 四、最佳实践 1. **Mapper接口设计**:接口方法应清晰明确,遵循单一职责原则,避免方法过于复杂。 2. **SQL优化**:尽量避免...

    使用kotlin语言基于spring boot、mybatis-plus、sa-token等框架开发的项目脚手架

    zeta-kotlin是使用kotlin语言基于spring boot、mybatis-plus、sa-token等框架开发的项目脚手架。zeta-kotlin目前只提供了一个最基础的RBAC用户角色权限功能。不像其它开源项目那样大而全,zeta-kotlin项目相当精简

Global site tag (gtag.js) - Google Analytics