MyBatisPlus从零到一:快速入门与核心功能详解(1)
一、快速入门
1.1 引入依赖:
<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.3.1</version> </dependency>
这个 starter 包含对 mybatis 的自动装配,因此完全可以替换掉 Mybatis 的starter。
1.2 定义 Mappper:
为了简化单表的 CRUD,MybatisPlus 提供了一个基础的BaseMapper接口,其中已经实现了单表的 CRUD,具体方法如下图所示:
1.3 使用演示:
//Mapper: public interface UserMapper extends BaseMapper<User> { } //实体类 @Data public class User { private Long id; private String username; private String password; private String phone; private String info; private Integer status; private Integer balance; private LocalDateTime createTime; private LocalDateTime updateTime; } //测试类 @SpringBootTest class UserMapperTest { @Autowired private UserMapper userMapper; @Test void testInsert() { User user = new User(); user.setId(5L); user.setUsername("Lucy"); user.setPassword("123"); user.setPhone("18688990011"); user.setBalance(200); user.setInfo("{\"age\": 24, \"intro\": \"英文老师\", \"gender\": \"female\"}"); user.setCreateTime(LocalDateTime.now()); user.setUpdateTime(LocalDateTime.now()); userMapper.insert(user);// MybatisPlus 提供的 } @Test void testSelectById() { User user = userMapper.selectById(5L);// MybatisPlus 提供的 System.out.println("user = " + user); } @Test void testQueryByIds() { List<User> users = userMapper.selectBatchIds(List.of(1L, 2L, 3L, 4L));// MybatisPlus 提供的 users.forEach(System.out::println); } @Test void testUpdateById() { User user = new User(); user.setId(5L); user.setBalance(20000); userMapper.updateById(user);// MybatisPlus 提供的 } @Test void testDeleteUser() { userMapper.deleteById(5L);// MybatisPlus 提供的 } }
1.4 常见注解:
MybatisPlus 就是根据 PO 实体(BaseMapper<T>中的T)的信息来推断出表的信息,从而生成 SQL 的。默认情况下:
MybatisPlus 会把 PO 实体的类名驼峰转下划线作为表名。
MybatisPlus 会把 PO 实体的所有变量名驼峰转下划线作为表的字段名,并根据变量类型推断字段类型。
MybatisPlus 会把名为 id 的字段作为主键。
但很多情况下,默认的实现与实际场景不符,因此 MybatisPlus 提供了一些注解便于我们声明表信息。
1.4.1 @TableName:
使用方式:表名注解,标识实体类对应的表。
使用位置:实体类。
使用场景:当实体类的名称和表名的命名不一致时(驼峰和下划线的区别另外),使用该注解。
TableName 注解除了指定表名以外,还可以指定很多其它属性:
1.4.2 @TableId:
属性 | 类型 | 必须指定 | 默认值 | 描述 |
value | String | 否 | ‘’ | 主键字段名 |
type | Enum | 否 | IdType.NONE | 指定主键类型 |
IdType
支持的类型有:
值 | 描述 |
AUTO | 数据库 ID 自增 |
NONE | 无状态,该类型为未设置主键类型(注解里等于跟随全局,全局里约等于 ASSIGN_ID) |
INPUT | insert 前自行 set 主键值 |
ASSIGN_ID | 分配 ID(主键类型为 Number(Long 和 Integer)或 String)(since 3.3.0), 使用接口IdentifierGenerator的方法nextId(默认实现类为DefaultIdentifierGenerator雪花算法), 简单理解为程序自动利用雪花算法,帮助我们生成 id。
|
ASSIGN_UUID | 分配 UUID,主键类型为 String(since 3.3.0),使用接口IdentifierGenerator的方法nextUUID(默认 default 方法) |
这里比较常见的有三种:
AUTO:利用数据库的id自增长
INPUT:手动生成id
ASSIGN_ID:雪花算法生成Long类型的全局唯一id,这是默认的ID策略。
1.4.3 @TableField:
使用方式:普通字段注解,标识实体类中的普通属性。
使用位置:实体类的属性。
使用场景:当实体类的命名和数据库的字段名有出路时,使用该注解。
一般情况下我们并不需要给字段添加@TableField注解,一些特殊情况除外(非常重要):
成员变量名与数据库字段名不一致
成员变量是以isXXX命名,按照JavaBean的规范,MybatisPlus识别字段时会把is去除,这就导致与数据库不符。
成员变量名与数据库一致,但是与数据库的关键字冲突。使用@TableField注解给字段名添加转义字符:``。
支持的其它属性如下:
1.5 常见配置:
MybatisPlus 也支持基于 yaml 文件的自定义配置。
大多数的配置都有默认值,因此我们都无需配置。但还有一些是没有默认值的,例如:
实体类的别名扫描包(用来简化,后续引用实体类的路径。这个即使配置,我还是建议大家把路径写全,因为这个有时会不生效,而且编译器会更加支持写全)。
全局 id 类型。
mybatis-plus: type-aliases-package: xxxxxx # 填写实体类对应的包名 global-config: db-config: id-type: auto # 全局id类型为自增长
需要注意的是,MyBatisPlus 也支持手写 SQL 的,而 mapper 文件的读取地址可以自己配置:
mybatis-plus: mapper-locations: "classpath*:/mapper/**/*.xml" # Mapper.xml文件地址,当前这个是默认值。
本文系转载,版权归原作者所有,如若侵权请联系我们进行删除!
云掣基于多年在运维领域的丰富时间经验,编写了《云运维服务白皮书》,欢迎大家互相交流学习:
《云运维服务白皮书》下载地址:https://fs80.cn/v2kbbq
想了解更多大数据运维托管服务、数据库运维托管服务、应用系统运维托管服务的的客户,欢迎点击云掣官网沟通咨询:https://yunche.pro/?t=shequ