Mybatis-Plus 是国内大牛在 Mybatis3 的基础上做了一些封装
简化了一些操作(分页,自动生成实体类 ps:不再需要逆向工程) 快速开发的工具插件
核心思想
Mybatis 增强工具包-只做增强不做改变 简化 CRUD 操作
优点
无侵入:只做增强不做改变,引入它不会对现有工程产生影响;
损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作;
强大的 CURD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单标大部分 CURD 操作,更有强大的条件构造器,满足各类使用需求;
支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需担心字段写错;
支持多种数据库:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLLite、Postgre、SQLServer2005、SQLServer等多种数据库;
支持主键自动生成:支持多达4种主键策略,(内含分布式唯一ID生成器 - Sequence) 可自由配置 完美解决主键问题;
支持 XML 热加载:Mapper 对应的 XML 支持热加载,对于简单的 CURD操作,甚至可以无XML启动
支持 ActiveRecord 模式:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可进行强大的 CURD 操作;
支持自定义全局通用操作:支持全局通用方法注入(Write once,use anywhere);
支持关键词总动转义:支持数据库关键词(order、key…)自动转义,还可自定义关键词
内置代码生成器:采用代码或者Maven插件可快速生成 Mapper、Model、Service、Controller层代码,支持模板引擎,更有超多自定义配置供使用;
内置分页插件:基于 Mybatis 物理分页,开发者无需关系具体操作,配置好插件之后,写分页等同于普通List查询;
内置性能分析插件:可输出 Sql 语句及其执行时间,方便开发测试时区分慢查询;
内置全局拦截插件:提供全表 delete、update操作智能分析阻断,可自定义拦截规则,预防误操作;
内置 Sql 注入剥离器:支持 sql 注入剥离,有效预防 Sql 注入攻击;
插件
Lombok 插件,配合 Mybatis-Plus 添加 @Data 注解到实体,可以自动使用 get/set 方法,实体类中不必再添加繁杂的方法,包括 toString 方法,同样在实体类上加入 @toString 注解,也可自动进行到string的转换。
##注解解析:
插件注解
@Data: 上面已经说过了,相当于我们实体中添加好了 get/set 方法,可直接调用。
@toString: 同理,相当于添加了 toString 方法。
@Accessors(): 为了get/set更流畅 ,参数解释
1.fluent 如果为 true 则 pepper 的 getter 就是 pepper(),setter 方法就是 pepper (T newValue),除非特别
说明,chain 默认为真。
2.chain 如果为 true 则 set 方法返回值为 this 而不是 void 默认是假。如果 fluent 为 true 则 chain 为真
Mybatis-Plus 注解
@TableName(参数=表名):加载类上的注解,类似 hibernate
@TableId(参数=主键字段名):通常id主键
@TableField(参数=普通字段):
这三个注解需注意,如果使用区分大小写的数据库时 如 pgsql (注意区分) 注解中参数值不区分大小写,如果想要使用,需要使用转义符 "
##例如:idea-setting-plugins-搜索 lombok 安装即可,需要重启开发工具(IDE)
使用 Mybatis-Plus 之后的 Mapper 与 Service 文件等。
实体类
刚刚已经说过类似 hibernate 加入注解可完成对数据库表的映射。
mapper 接口
我们将所有 mapper 统一继承 BaseMapper 接口,然后通过泛型规范实体类型 统一 CRUD 方法
BaseMapper 可以完成大部分简单的CRUD, 同 Mybatis 一样,mapper 会自动调用 mapper.xml
中的方法去进行增删改查操作。
mapper.xml 文件
需要注意的是 Mybatis-Plus 可以选择性不需要 mapper.xml 文件,简单的增删改查操作会自动组装拼接语句,复杂的操作仍需要手工拼接,但是位置不是在 mapper.xml 中。而是挪移到
与数据库映射借助的是 EntityWrapper 类,此类继承自 Wrapper 类,依赖此类进行对象封装操作,定义 T-SQL 语法。
service 文件
同样统一继承自 BaseService 同样通过泛型约束不同类的 service ,其中 BaseService 中生成了,几乎全部简单的增删改查方法。
需要我们自定义的条件查询、复杂查询
我们需要自定义语句,拼接操作不同于之前的 Mybatis (使用条件封装类 XXQueryEntity 创建 Criteria 对象,来拼接条件再利用 XXMapper 查询) 但是类似,我们仍然在service/serviceImpl层进行条件的组织拼接。注意的是:Mybatis-Plus 是增强而不是改变 所以如果需要或者为了改写代码方便等,依然可以选择延用 mapper.xml 文件。这也是 Mybatis-Plus 的有点,可选择方式更多,不想 hibernate 一样完全的全自动。
核心功能概述
代码生成器:
类似常用的逆向工程,替代繁杂的机械性代码的书写,提前进行配置,Mybatis-Plus 提供了大量的自定义设置。相较于逆向工程或工具更快捷、更全面、更多选择性的生成代码。
详情参见上文的类注解,主键注解等。
关于生成代码的路径,同样可以一步配置到位(只需要在配置文件制定输出盘符位置如C:)
通用CRUD功能
这个不必多说,这里注意命名规范(驼峰命名),以及常用注解(上文已说过)。还有就是几个不常用的注解,序列主键策略 @KeySequence 乐观锁标记主键 @Version
条件构造器
条件构造器是 Mybatis-Plus 和核心功能,也是我们使用最频繁最重要的功能。MP 的条件构造主要依赖的是 EntityWrapper 类,依然选择在 service 层拼接条件,同 Mybatis 的条件类比较相似(EntityQuery),sql 拼接,排序,实体参数查询等。
扩展插件
Mybatis-Plus 的扩展插件并不少,且都很实用。
分页插件;
性能分析插件;
乐观锁插件;
XML热加载;等等详情可参见官方文档
Mybatis-Plus中文文档
具体使用
spring 整合 mybatis-plus
(注意 mybatis-plus 的核心思想,只做增强不做改变)
整合两者同样异常简单,只需要将 mybatis 的依赖替换成 mybatis-plus 的依赖即可。
同样 sqlSessionFactory 也需要从mybatis的换成 mybatis-plus 的。
核心依赖如下:
<!-- spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.14.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>4.3.14.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>4.3.14.RELEASE</version>
<scope>test</scope>
</dependency>
<!-- mp 依赖 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus</artifactId>
<version>2.3</version>
</dependency>