文章目录
一、背景说明
大部分的项目都需要进行数据的持久化,所以必然会使用到数据库。而关系型数据库是其中比较常见的数据库类型。目前使用比较多的关系型数据库有:MySQL、PostgreSQL和Oracle等。
在古早的应用开发中,需要开发人员写许多的DAL(数据访问层)代码,需要自己管理数据库的连接与关闭,还需要自己从ResultSet中获取数据,然后再将其组装为对象。在其中会编写大量非业务代码,并且这些代码往往充满了重复。
ORM的出现解决了前面提到的一系列问题,ORM的全称是 Object Relational Mapping
,翻译为对象关系模型
。这里所说的对象
是指业务领域的对象,关系
则指的是关系数据库(具体而言就是数据表和字段)。
ORM可以实现自动将数据库中的表字段映射为对象的属性,其采用的方式是:使用映射元数据
来描述对象关系的映射。ORM充当了应用程序的业务逻辑层和数据库之间的桥梁。常见的ORM中间件有:Hibernate和ibatis(目前已更名为 MyBatis
)。
本篇所提及的 MyBatis-Plus
对 MyBatis
的功能进行了增强。
二、集成过程
在Spring Boot项目中集成 MyBatis-Plus 过程比较简单,大概分为三个步骤:
- 引入maven依赖
- 增加属性配置
- 增加相关的自动配置类
如果不知道如何创建Spring Boot项目,可以参考以往的文章:
2.1 引入 maven 依赖
为了使用 MyBatis-Plus,需要添加相关依赖:
<!--mybatis-plus-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybaits-plus.version}</version>
</dependency>
同时因为需要数据库进行数据的存储,所以还需要添加下面的依赖(我们选择的MySQL数据库):
<!--mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
如果仅限于集成 MyBatis-Plus,这两个依赖就已经足够了。
2.2 增加属性配置
相关的属性配置到 application.yml
文件中:
spring:
application:
name: "demo-api"
datasource:
# MySql 8.0以上版本
driver-class-name: com.mysql.cj.jdbc.Driver
# 兼容以前的配置
jdbc-url: jdbc:mysql://localhost:3306/your_database?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false&zeroDateTimeBehavior=convertToNull&useTimezone=true&serverTimezone=GMT%2B8&allowMultiQueries=true
url: ${spring.datasource.jdbc-url}
username: your_username
password: your_password
2.3 自动配置类
前面我们已经提过:ORM使用映射元数据
来描述对象关系的映射。所以我们需要对相关信息进行配置,比如:
- 使用的是什么数据库
- 数据库连接是什么
- Mapper 接口文件在哪里
- MyBatis 所依赖的XML文件到哪里去找
- MyBatis 的 SqlSessionFactory 如何创建(依赖数据源、MyBatis插件)
Spring Boot 中的配置一般以 @Configuration 进行标识。相关代码如下:
@Configuration
@MapperScan(basePackages = "com.xhm.demo.api.mapper")
public class DataSourceConfig {
@ConfigurationProperties(prefix = "spring.datasource")
@Bean
public DataSource dataSource() {
return DataSourceBuilder.create().build();
}
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
//分页插件
interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
//注册乐观锁插件
interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
return interceptor;
}
@Bean
public SqlSessionFactory sqlSessionFactory(DataSource dataSource, MybatisPlusInterceptor interceptor) throws Exception {
MybatisSqlSessionFactoryBean ssfb = new MybatisSqlSessionFactoryBean();
ssfb.setDataSource(dataSource);
ssfb.setPlugins(interceptor);
//到哪里找xml文件
ssfb.setMapp