文章目录
- 表名注解 @TableName
- 主键注解 @TableId
- 字段注解 @TableField
- @Version(opens new window)
- @EnumValue(opens new window)
- @TableLogic 是否逻辑删除
简介
MyBatis-Plus 是一个 MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
1.快速开始
开发工具 IDEA, Springboot,数据库使用mysql.
1.1 创建一个表person
mysql> create database mybatisplus;
Query OK, 1 row affected (0.00 sec)
mysql> use mybatisplus;
Database changed
mysql> CREATE TABLE person
-> (
-> id BIGINT(20) NOT NULL COMMENT '主键ID',
-> name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',
-> age INT(11) NULL DEFAULT NULL COMMENT '年龄',
-> email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱',
-> PRIMARY KEY (id)
-> );
Query OK, 0 rows affected (0.02 sec)
1.2 基础配置
引入依赖
<!--mysql数据库驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--mybatis-plus-boot-starter-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.1</version>
</dependency>
定义实体类,使用lombok注解
import lombok.Data;
@Data
public class Person {
private Long id;
private String name;
private Integer age;
private String email;
}
定义mapper
/**
* 定义mapper接口继承mybatis-plus提供的baseMapper
*/
@Mapper
public interface PersonMapper extends BaseMapper<Person> {
}
测试
@Autowired
PersonMapper personMapper;
/**
* 测试新增
*/
@Test
public void TestInsert()
{
Person person = new Person();
person.setId(1L);
person.setName("elite");
person.setAge(22);
person.setEmail("elite@qq.com");
int insert = personMapper.insert(person);
}
/**
* 测试查询
*/
@Test
public void TestSelect()
{
Person person = personMapper.selectById(1L);
System.out.println(person);
//Person(id=1, name=elite, age=22, email=elite@qq.com)
}
/**
* 测试更新
*/
@Test
public void TestUpdate()
{
Person person = new Person();
person.setId(1L);
person.setName("elite11");
person.setAge(24);
person.setEmail("elite11@qq.com");
int updateCount = personMapper.updateById(person);
System.out.println("updatedPerson:" + personMapper.selectById(1L));
//updatedPerson:Person(id=1, name=elite11, age=24, email=elite11@qq.com)
}
/**
* 测试删除
*/
@Test
public void TestDelete()
{
int i = personMapper.deleteById(1L);
}
查询结果
mysql> select * from person;
+----+-------+------+--------------+
| id | name | age | email |
+----+-------+------+--------------+
| 1 | elite | 22 | elite@qq.com |
+----+-------+------+--------------+
1 row in set (0.00 sec)
2.实体中常用的注解
表名注解 @TableName
描述:标识实体类对应的表
使用位置:实体类
@TableName("person")
public class Person {
private Long id;
private String name;
private Integer age;
private String email;
}
主键注解 @TableId
描述:主键注解
使用位置:实体类主键字段
@Data
@TableName("person")
public class Person {
//主键,可以设置主键策略 NONE 无状态,该类型为未设置主键类型(注解里等于跟随全局,全局里约等于 INPUT)
/* IdType 默认就是None
AUTO 数据库 ID 自增 1,2,3,....
INPUT insert 前自行 set 主键值
ASSIGN_ID 分配 ID(主键类型为 Number(Long 和 Integer)或 String)(since 3.3.0),使用接口IdentifierGenerator的方法nextId(默认实现类为DefaultIdentifierGenerator雪花算法)
ASSIGN_UUID '42c0e12e0e975cd707751d98b82f7567 分配 UUID,主键类型为 String(since 3.3.0),使用接口IdentifierGenerator的方法nextUUID(默认 default 方法)
*/
@TableId(type=IdType.ASSIGN_ID)
private Long id;
private String name;
private Integer age;
private String email;
}
字段注解 @TableField
描述:字段注解(非主键)
@TableName("person")
public class Person {
//主键,可以设置主键策略 NONE 无状态,该类型为未设置主键类型(注解里等于跟随全局,全局里约等于 INPUT)
/* IdType 默认就是None
AUTO 数据库 ID 自增 1,2,3,....
INPUT insert 前自行 set 主键值
ASSIGN_ID 分配 ID(主键类型为 Number(Long 和 Integer)或 String)(since 3.3.0),使用接口IdentifierGenerator的方法nextId(默认实现类为DefaultIdentifierGenerator雪花算法)
ASSIGN_UUID '42c0e12e0e975cd707751d98b82f7567 分配 UUID,主键类型为 String(since 3.3.0),使用接口IdentifierGenerator的方法nextUUID(默认 default 方法)
*/
@TableId(type=IdType.ASSIGN_ID)
private Long id;
/**
* value String 否 "" 数据库字段名
* exist boolean 否 true 是否为数据库表字段
* condition String 否 "" 字段 where 实体查询比较条件,有值设置则按设置的值为准,没有则为默认全局的 %s=#{%s},参考(opens new window)
* update String 否 "" 字段 update set 部分注入,例如:当在version字段上注解update="%s+1" 表示更新时会 set version=version+1(该属性优先级高于 el 属性)
* insertStrategy Enum 否 FieldStrategy.DEFAULT 举例:NOT_NULL
* insert into table_a(<if test="columnProperty != null">column</if>) values (<if test="columnProperty != null">#{columnProperty}</if>)
* updateStrategy Enum 否 FieldStrategy.DEFAULT 举例:IGNORED
* update table_a set column=#{columnProperty}
* whereStrategy Enum 否 FieldStrategy.DEFAULT 举例:NOT_EMPTY
* where <if test="columnProperty != null and columnProperty!=''">column=#{columnProperty}</if>
* fill Enum 否 FieldFill.DEFAULT 字段自动填充策略
* select boolean 否 true 是否进行 select 查询
* keepGlobalFormat boolean 否 false 是否保持使用全局的 format 进行处理
* jdbcType JdbcType 否 JdbcType.UNDEFINED JDBC 类型 (该默认值不代表会按照该值生效)
* typeHandler Class<? extends TypeHandler> 否 UnknownTypeHandler.class 类型处理器 (该默认值不代表会按照该值生效)
* numericScale String 否 "" 指定小数点后保留的位数
*/
@TableField(value = "name")
private String name;
private Integer age;
private String email;
}
@Version(opens new window)
描述:乐观锁注解、标记 @Version 在字段上
版本乐观锁可以使用
@EnumValue(opens new window)
描述:普通枚举类注解(注解在枚举字段上)
@TableLogic 是否逻辑删除
是否逻辑删除