简介
Mybatis-Plus(简称MP)是一个 Mybatis 的增强工具,在 Mybatis 的基础上只做增强不做改变,为简化开发、提高效率而生。是一种集mybatis与hibernate的优点一起的框架,它提供了hibernate的单表CRUD操作的方便同时,又保留了mybatis的特性。
特性
-
无侵入:Mybatis-Plus 在 Mybatis 的基础上进行扩展,只做增强不做改变,引入 Mybatis-Plus 不会对您现有的 Mybatis 构架产生任何影响,而且 MP 支持所有 Mybatis 原生的特性
-
依赖少:仅仅依赖 Mybatis 以及 Mybatis-Spring
-
损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作
-
预防Sql注入:内置 Sql 注入剥离器,有效预防Sql注入攻击
-
通用CRUD操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求
-
多种主键策略:支持多达4种主键策略(内含分布式唯一ID生成器),可自由配置,完美解决主键问题
-
支持热加载:Mapper 对应的 XML 支持热加载,对于简单的 CRUD 操作,甚至可以无 XML 启动
-
支持ActiveRecord:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可实现基本 CRUD 操作
-
支持代码生成:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎,更有超多自定义配置等您来使用(P.S. 比 Mybatis 官方的 Generator 更加强大!)
-
支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )
-
支持关键词自动转义:支持数据库关键词(order、key......)自动转义,还可自定义关键词
-
内置分页插件:基于 Mybatis 物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通List查询
-
内置性能分析插件:可输出 Sql 语句以及其执行时间,建议开发测试时启用该功能,能有效解决慢查询
-
内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,预防误操作
特别说明:Mybatis及Mybatis-Spring依赖请勿加入项目配置,以免引起版本冲突!!!Mybatis-Plus会自动帮你维护!
注解说明
表名注解 @TableName
-
com.baomidou.mybatisplus.annotations.TableName
值 描述
value | 表名( 默认空 ) |
resultMap | xml 字段映射 resultMap ID |
主键注解 @TableId
-
com.baomidou.mybatisplus.annotations.TableId
值 描述
value | 字段值(驼峰命名方式,该值可无) |
type | 主键 ID 策略类型( 默认 INPUT ,全局开启的是 ID_WORKER ) |
暂不支持组合主键
字段注解 @TableField
-
com.baomidou.mybatisplus.annotations.TableField
值 描述
value | 字段值(驼峰命名方式,该值可无) |
el | 详看注释说明 |
exist | 是否为数据库表字段( 默认 true 存在,false 不存在 ) |
strategy | 字段验证 ( 默认 非 null 判断,查看com.baomidou.mybatisplus.enums.FieldStrategy ) |
fill | 字段填充标记 ( FieldFill, 配合自动填充使用 ) |
-
字段填充策略 FieldFill
值 描述
DEFAULT | 默认不处理 |
INSERT | 插入填充字段 |
UPDATE | 更新填充字段 |
INSERT_UPDATE | 插入和更新填充字段 |
序列主键策略 注解 @KeySequence
-
com.baomidou.mybatisplus.annotations.KeySequence
值 描述
value | 序列名 |
clazz | id的类型 |
乐观锁标记注解 @Version
-
com.baomidou.mybatisplus.annotations.Version
常用条件
Mybatis-Plus 通过 EntityWrapper(简称 EW,MP 封装的一个查询条件构造器)或者 Condition(与EW类似) 来让用户自由的构建查询条件,简单便捷,没有额外的负担,能够有效提高开发效率。
经常使用的条件有:
.eq("id", 10) 字段 参数 查出对应条件
.ge("id", 10) 字段 参数 大于等于10
.gt("id",10) 字段 参数 大于10
.le("id", 10) 字段 参数 小于等于10
.lt("id",10) 字段 参数 小于10
.in("id",值(或者集合或数组)) 和普通in方法相同
.like("name","q")
.between("id",10,15) 字段 开始区间,结束区间 包左包右
.notbetween 不解释 了
.setSqlSelect("age") 查询指定字段
.setSqlSelect("name,age") 指定多个字段(
.where("id={0}",52) 正常应该这样写 但是为了方便 可以忽略第二个参数直接写个sql条件即可
.where("id=52")
.or("id=1")
.and("id=1")
不常用的
.ne("age",20) age 20> 同时 20<
.exists() 根据这个条件判断 如果为true 默认返回所有行的所有字段
.group by() 因为group 基本要和函数一起使用 所以不建议用
.having()
还有一些notlike notexists 等很好理解的就没放上去
可以进行一些稍复杂一点的逻辑
如:
查询id字段或者age字段包括1的
.like("id","1").or().like("age","1")