目录
一. 引入依赖
二.定义Mapper
三.常见注解
3.1@TableName
3.2.@TableId
3.3@TableField
3.4常见配置
一. 引入依赖
由于这个starter包含对mybatis的自动装配,因此完全可以替换掉Mybatis的starter。
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.3.1</version>
</dependency>
二.定义Mapper
为了简化单表CRUD,MybatisPlus提供了一个基础的 BaseMapper 接口,其中已经实现了单表的CRUD:
因此我们自定义的Mapper只要继承了这个BaseMapper
,就无需自己实现单表CRUD了。
三.常见注解
我们刚才仅仅引入了依赖,继承了BaseMapper就能使用MybatisPlus, 但是 MybatisPlus如何知道我们要查询的是哪张表?表中有哪些字段呢?
UserMapper在继承BaseMapper的时候指定了一个泛型:
泛型中的User就是与数据库对应的PO.
MybatisPlus就是根据PO实体的信息来推断出表的信息,从而生成SQL的。默认情况下:
MybatisPlus会把PO实体的类名驼峰转下划线作为表名
MybatisPlus会把PO实体的所有变量名驼峰转下划线作为表的字段名,并根据变量类型推断字段类型
MybatisPlus会把名为id的字段作为主键
但很多情况下,默认的实现与实际场景不符,因此MybatisPlus提供了一些注解便于我们声明表信息。
3.1@TableName
说明:
描述:表名注解,标识实体类对应的表
使用位置:实体类
示例:
@TableName("user") public class User {private Long id;private String name; }
TableName注解除了指定表名以外,还可以指定很多其它属性:
3.2.@TableId
说明:
描述:主键注解,标识实体类中的主键字段
使用位置:实体类的主键字段
示例:
@TableName("user") public class User {@TableId(value = "id", type = IdType.AUTO)private Long id;private String name; }
这里 type 比较常见的有三种:
AUTO
:利用数据库的id自增长
INPUT
:手动生成id(insert 前自行 set 主键值)
ASSIGN_ID
:雪花算法生成Long
类型的全局唯一id,这是默认的ID策略(分配 ID(主键类型为 Number(Long 和 Integer)或 String)(since 3.3.0),使用接口IdentifierGenerator的方法nextId(默认实现类为DefaultIdentifierGenerator雪花算法))
3.3@TableField
说明:
- 描述:普通字段注解
示例:
@TableName("user") public class User {@TableIdprivate Long id;private String name;private Integer age;@TableField("isMarried")private Boolean isMarried;@TableField("concat")private String concat; }
一般情况下我们并不需要给字段添加
@TableField
注解,一些特殊情况除外:
成员变量名与数据库字段名不一致
成员变量是以
isXXX
命名,按照JavaBean
的规范,MybatisPlus
识别字段时会把is
去除,这就导致与数据库不符。成员变量名与数据库一致,但是与数据库的关键字冲突。使用
@TableField
注解给字段名添加转义字符:``
成员变量不是数据库字段
3.4常见配置
MybatisPlus也支持基于yaml文件的自定义配置,详见官方文档:
使用配置 | MyBatis-Plus (baomidou.com)
大多数的配置都有默认值,因此我们都无需配置。但还有一些是没有默认值的,例如:
mybatis-plus:type-aliases-package: # 实体类的别名扫描包 路径global-config:db-config:id-type: auto # 全局id类型为自增长
需要注意的是,MyBatisPlus也支持手写SQL的,而mapper文件的读取地址可以自己配置:
mybatis-plus:mapper-locations: "classpath*:/mapper/**/*.xml" # Mapper.xml文件地址,当前这个是默认值。
可以看到默认值是
classpath*:/mapper/**/*.xml
,也就是说我们只要把mapper.xml文件放置这个目录下就一定会被加载。例如,我们新建一个
UserMapper.xml
文件:<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace=""></mapper>