mybatis plus实体类注解使用
前言
MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
特性
- 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
- 损耗小:启动即会自动注入基本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、SQLServer 等多种数据库
- 内置性能分析插件:可输出 Sql 语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢查询 - 内置全局拦截插件:提供全表 delete、 update 操作智能分析阻断,也可自定义拦截规则,预防误操作
支持数据库
- mysql 、 mariadb 、 oracle 、 db2 、 h2 、 hsql 、 sqlite 、 postgresql 、 sqlserver 、 presto
- 达梦数据库 、 虚谷数据库 、 人大金仓数据库
框架结构
@TableName
- @TableName(表名注解)
@TableName(value = "em_t")
public class Test {
private String id;
private String name;
}
@TableId
- @TableId(表名主键)
value:主键字段名
type:主键类型:
写法:IdType.NONE- AUTO——数据库自增
- INPUT——自行输入
- ID_WORKER——分布式全局唯一ID长整型类型
- UUID——32位UUID字符串
- NONE——无状态
- ID_WORKER_STR——分布式全局唯一ID字符串类型
- @TableId(value = “id”, type = IdType.AUTO):自增
- @TableId(value = “id”, type = IdType.ID_WORKER_STR):分布式全局唯一ID字符串类型
- @TableId(value = “id”, type = IdType.INPUT):自行输入
- @TableId(value = “id”, type = IdType.ID_WORKER):分布式全局唯一ID 长整型类型
- @TableId(value = “id”, type = IdType.UUID):32位UUID字符串
- @TableId(value = “id”, type = IdType.NONE):无状态
@TableName(value = "em_t")
public class Test {
@TableId(value = "emid",type= IdType.AUTO)
private String emid;
private String name;
}
@TableField
-
@TableField
value:字段名
exit:是否为数据库表字段
Strategy:字段验证
写法:FieldStrategy.NOT_NULL- IGNORED——忽略判断
- NOT_NULL——非NULL判断
- NOT_EMPTY——非空判断(字符串类型)
- DEFAULT——追随全局配置
fill:字段自动填充策略(需要写相关的配置类)
写法:FieldFill.DEFAULT- DEFAULT——默认不处理
- INSERT——插入时填充字段
- UPDATE——更新时填充字段
- INSERT_UPDATE——插入和更新时填充字段
- @TableField(value = “age”)// 用来解决数据库中的字段和实体类的字段不匹配问题
- @TableField(exist = false) // 用来解决实体类中有的属性但是数据表中没有的字段,默认为true
- @TableField(condition = SqlCondition.LIKE):表示该属性可以模糊搜索。
- @TableField(fill = FieldFill.INSERT):注解填充字段 ,生成器策略部分也可以配置!
- FieldStrategy
值 | 描述 |
---|---|
value | 字段值(驼峰命名方式,该值可无) |
update | 预处理 set 字段自定义注入 |
condition | 预处理 WHERE 实体条件自定义运算规则 |
el | 详看注释说明 |
exist | 是否为数据库表字段( 默认 true 存在,false 不存在 ) |
strategy | 字段验证 (默认 非 null 判断,查看 com.baomidou.mybatisplus.enums.FieldStrategy ) |
fill | 字段填充标记 ( FieldFill, 配合自动填充使用 ) |
- 字段填充策略 FieldFill
值 | 描述 |
---|---|
DEFAULT | 默认不处理 |
INSERT | 插入填充字段 |
UPDATE | 更新填充字段 |
INSERT_UPDATE | 插入和更新填充字段 |
@TableField(value = "ename")
private String ename;
@TableField(.. , update="%s+1") 其中 %s 会填充为字段
输出 SQL 为:update 表 set 字段=字段+1 where ...
@TableField(.. , update="now()") 使用数据库时间
输出 SQL 为:update 表 set 字段=now() where ...
@TableField(condition = SqlCondition.LIKE)
private String name;
输出 SQL 为:select 表 where name LIKE CONCAT('%',值,'%')