MyBatis-Plus 框架
MyBatis-Plus(简称 MP)是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生。
简化开发、提高效率,这是MyBatis-Plus核心思想。一种集MyBatis与Hibernate的优点一起的框架。它提供了Hibernate的单表CRUD操作的方便同时,又保留了MyBatis的特性。
特性(官网提供)
- 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
- 损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作,BaseMapper
- 强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求,简单的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、SQLServer 等多种数据库
- 内置性能分析插件:可输出 SQL 语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢查询
- 内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,也可自定义拦截规则,预防误操作
开发环境搭建
软件 | 版本 |
---|---|
HGDB | 安全版V4、企业版v5及以上版本 |
JDK | 1.6、1.7、1.8 |
Java IDE | Eclipse、IntelliJ IDEA |
MyBatis-Plus | 3.5.1 |
示例项目
结构图如下:
主要文件介绍:
pom.xml
:导入依赖的jar包
<dependencies> |
注意
使用mybatis-plus可以节省大量代码,不要同时导入mybatis和mybatis-plus,可能存在版本冲突。
User.java
:编写实体类,Lombok简化代码
@Data |
注意
mybaitsplus,为mybaits的升级版,不需要写xml配置文件,直接写一个接口,model实体类的多加几个注解即可实现。
不管是mybaits,还是mybaitsplus,数据库里的字段必须和实体类对接上,一模一样,不然就会报错。
此时需要使用 @TableName 表名注解指定当前实体类对应的表名,比如上文中的 User 实体类对应表名为 test_user,此外还可以用使用@TableId 注解(标注在主键上)和 @TableField 注解(标注在其他成员属性上)来指定对应的字段名。
UserMapper.java
:创建一个User对象的持久层接口,只需要继承BaseMapper并且把User对象传进去即可
import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
DemoApplication.java
:启动类加上扫描mapper的注解
@SpringBootApplication |
application.yml
:全局配置文件,采用yml格式
# DataSource Config |
DemoApplicationTests.java
: 测试类
@SpringBootTest |
结果:
注意事项
1、使用PaginationInterceptor分页插件
MyBatis-Plus自带了一个分页插件Interceptor,帮我们封装好了分页的功能,节省大量的开发时间。
针对MyBatis-Plus版本不同,PaginationInterceptor引用的包有所不同。
MyBatis-Plus2.x引用的包:com.baomidou.mybatisplus.plugins.PaginationInterceptor;
MyBatis-Plus3.x引用的包:com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor
采用@Bean注入的方式进行配置数据库方言
paginationInterceptor.setDialectType("postgresql")
见下方代码:
@Bean |
2、Mybatis-plus3.4.0使用MybatisPlusInterceptor拦截
3.4.0版本对此部分有更新,如果是旧版本升级,会出现分页失效问题,同时会提示PaginationInterceptor过时,新版本改用了MybatisPlusInterceptor
代码示例: