【MyBatisPlus】一文讲清 MyBatisPlus 基本原理及基本使用方式
一、概述
-
定义
:一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生 -
原理
(MyBatisPlus 实现 “Table → Class” 映射的原理)功能 原理 1. 驼峰类名 → 下划线表名 MyClass 类名自动转为 my_class 表名 如果命名不符合规范,应该用 @TableName(”my_table”)
指定对应的数据库表2. id 属性 → primary key MyClass 中的 id 属性自动认定为表名 如果命名不符合规范,应该用 @TableId(”my_primary_key”)
指定对应的表的主键3. 属性名 → 下划线表字段 MyClass 中的属性 myAttribute 自动转为 my_attribute 字段 如果命名不符合规范,应该用 @TableField(”my_attribute”)
指定对应的表的字段 -
优点
- 代码无侵入:只对数据库功能进行增强,不会影响现有工程
- 效率至上:节省大量书写基础 CRUD 代码的时间,只需要继承 BaseMapper<> 即可
二、使用流程
1 .引入依赖
-
注意:引入 MyBatis-Plus 之后不要再次引入 MyBatis 以及 MyBatis-Spring,避免因版本差异导致的问题
<!-- mybatis-plus 依赖 --> <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.1</version> </dependency> <!-- mybatis-plus 测试依赖 --> <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter-test</artifactId><version>3.5.6</version> </dependency>
2 .实现 Table 实体类
- 功能:将数据库中的表进行实体化,指定实体类与表的映射关系
- 实现流程:可以直接使用 MyBatisX 自动从数据库生成 Entity 对象,提升开发效率
@TableName(value=”my_table”)
- 功能:声明当前类所对应的 table
@TableId(type=IdType.ASSIGN_ID)
- 功能:声明当前类所对应的 table 中的主键
- 属性
-
value:主键名称
-
type:primary key 的自增方式(默认策略: Defaultdentifiergenerator 雪花算法)
类型 说明 IdType.AUTO 数据库自增长 IdType.INPUT 通过 SET 方法自行输入 IdType.ASSIGN_ID 通过雪花算法分配 Id(接口 IdentifierGenerator 的方法 nextId() 来生成 id)
-
@TableField
- 功能:声明当前类所对应的 table 中的字段
- 使用场景
- 成员变量与数据库字段名不一致
- 成员变量以 is 开头,且是 boolean 类型
- 成员变量与数据库关键字冲突(注解:
@TableField("
database_keyword")
) - 成员变量不是数据库字段 (注解:
@TableField(exist = false)
)
@Data & @Builder
- 功能:Lombok 注解,自动生成 getter/setter 等相关方法
@Data
@Builder
@TableName("tb_user")
public class User{@TableId(type = IdType.AUTO)private Long id;private String name;private Integer age;private Integer gender;@TableField("is_married");private boolean isMarried;@TableField("`order`")private Integer order;
}
3 .继承 BaseMapper / IService / ServiceImpl
-
基本类型
- BaseMapper :使得自定义的 MyClassMapper 接口可以直接调用 BaseMapper 中的 CRUD 基本功能
- IService:使自定义的 MyClassService 接口可以直接调用 MyMapper 中的方法
- ServiceImpl<MyClassMapper, MyClass>:实现 MyClassService 中的方法
-
代码实现
public interface MyClassMapper extends BaseMapper<MyClass> {}
public interface MyClassService extends IService<MyClass> {}
public class MyClassServiceImpl extends ServiceImpl<MyClassMapper, MyClass> implements MyClassService {}
4 .添加 @MapperScan 注解
-
功能:给启动类添加 MapperScan 注解,确保 MyBatis 可以找到 Mapper 在项目中的位置
@SpringBootApplication @MapperScan("com.baomidou.mybatisplus.samples.quickstart.mapper") public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}}
5 .添加配置 application.yml
mybatis-plus:type-aliases-package: com.myproject.mypackage.domain.entity # 别名扫描包, 用于简化 MyBatisPlus 映射文件的引用mapper-locations: "classpath*:/mapper/**/*.xml" # Mapper.xml 文件地址, 默认值configuration: # MyBatis 核心行为map-underscore-to-camel-case: true # 开启 "驼峰->下划线" 映射cache-enabled: false # 开启二级缓存global-config:db-config:id-type:assign_id # id 默认由雪花算法生成update-strategy: not_null # 更新策略:只更新非空字段