首页 > 编程知识 正文

Spring Boot(springboot 注解)

时间:2023-05-04 20:41:50 阅读:102658 作者:2166

如果我的文章对你有帮助,请关注作者微信官方账号的支持:极客挖掘机,获取最新干货推送:)

1.介绍

在上一篇文章《Mybatis最小配置》中,我们介绍了Mybatis在Spring Boot的基本用法。美中不足的是Mybatis本身不提供分页功能,需要我们手动添加PageHelper插件或者自己实现分页工具,对单表的操作不友好。简单的插入、更新和删除也需要我们添加SQL语句。在目前的微服务架构模式下,每个服务都有自己独立的数据库,单个表的使用场景会越来越多。使用Mybatis无疑会产生大量的重复性工作。

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

愿景我们的愿景是成为MyBatis的最佳合作伙伴,就像《魂斗罗》中的1P和2P,有了同性朋友的匹配,效率会翻倍。

2.特征

非侵入性:只有增强没有变化,它的引入不会影响现有的项目,而且是丝滑的,损失很小:启动时会自动注入basic CURD,性能上基本没有损失,直接面向对象的强大CRUD操作:内置的universal Mapper和universal Service,只需要很少的配置就可以实现单个表的大部分CRUD操作,更强大的条件构造器。满足各种使用需求,支持Lambda表单调用:通过Lambda表达式,方便编写各种查询条件,不用担心字段拼写错误。它支持主键的自动生成:最多支持四种主键策略(包括分布式唯一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语句及其执行时间。建议在开发测试时启用此功能。内置全局阻塞插件,可以快速找出慢查询:可以对整个表的删除和更新操作提供智能分析和阻塞,还可以自定义阻塞规则,防止误操作。与Mybatis-Plus相比,Mybatis更好地支持单个表的相关操作,直接支持分页功能。它还添加了一系列有助于开发的插件。相关详情,建议读者访问官网获取:https://mybatis.plus/guide/.以下将介绍Mybatis-Plus的单表操作以及SQL分析插件的介绍。

3.工程实战

3.1项目依赖于pom.xml,如下所示:

代码:spring-boot-my batis-plus/POM . XML。

属国

groupIdcom.baomidou/groupId

artifactIdmybatis-plus-boot-starter/artifactId

版本3 . 2 . 0/版本

/依赖性

!https://mvnrepository.com/artifact/p6spy/p6spy

属国

groupIdp6spy/groupId

artifactIdp6spy/artifactId

版本3 . 8 . 6/版本

/依赖性

Mybatis-plus-boot-starter是Mybatis-plus的必需依赖项。p6spy是SQL分析和打印的依赖。如果不需要,mybatis-plus-boot-starter可以单独推出。3.2配置

配置文件application.yml如下:

代码:spring-boot-my batis-plus/src/main/resources/application . yml

服务器:

端口: 8080

弹簧:

应用程序:

名称: spring-b

oot-mybatis-xml datasource: url: jdbc:p6spy:mysql://172.16.96.112:3306/test?serverTimezone=Asia/Shanghai&useUnicode=true&mtdsh=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 分析的相关日志,如下:

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

5. 小结

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

5. 示例代码

示例代码-Github:https://github.com/meteor1993/spring-boot-examples/tree/master/spring-boot-mybatis-plus

示例代码-Gitee:https://gitee.com/inwsy/spring-boot-examples/tree/master/spring-boot-mybatis-plus

6. 参考

《Mybatis-Plus官方文档》:https://mybatis.plus/guide/

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。