3.1 Spring Boot 数据访问概述
Spring Data 是 Spring 提供的一个用于简化数据库访问、支持云服务的开源框架。它是一个伞形项目,包含了大量关系型数据库及非关系型数据库的数据访问解决方案,其设计目的是使我们可以快速且简单地使用各种数据访问技术。Spring Boot默认采用整合 Spring Data 的方式统一处理数据访问层,通过添加大量自动配置,引入各种数据访问模板xxxTemplate 以及统一的
Repository 接口,从而达到简化数据访问层的操作。
3.2 Spring Boot 整合 MyBatis
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射,避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解配置和映射原生信息,并将接口和Java的 POJOs(Plain Old java Objects,普通 Java 对象)映射成数据库中的记录。Spring Boot 官方虽然没有对 MyBatis 进行整合,但是 MyBatis 团队自行适配了对应的启动器,进一步简化了 MyBatis 对数据的操作。
3.2.1 基础环境搭建
因为 Spring Boot 框架开发很便利,所以实现 Spring Boot与数据访问层框架(例如 MvBatis的整合非常简单,主要是引入对应的依赖启动器,并进行数据库相关参数设置即可。下面我们先来搭建一个 Spring Boot 整合 MyBatis 的基础环境,具体步骤如下.
1.数据准备
在 MySQL中,创建一个名为 springbootdata 的数据库,在该数据库中创建两个表tarticle和tcomment,并预先插入几条测试数据,SQL语句如文件 3-1所示。
文件3-1 springbootdata.sql
#创建数据库
CREATE DATABASE springbootdata;
#选择使用数据库
USE springbootdata;
#创建表t article并插入相关数据
DROP TABLE IF EXISTS 't_article';
CREATE TABLE 't_article'(
'id' int(20) NOT NULL AUTO_ICREMENT '文章id',
'title' varchar(200) DEFAULT NULL COMMENT '文章标题',
'content' longtext COMMENT '文章内容',
PRIMARY KEY('id')
)ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
INSERT INTO 't_article' VALUES ('1', 'SpringBoot基础入门', '从入门到精通讲解...');
INSERT INTO 't_article' VALUES ('2', 'Spring Cloud 基础入门', '从入门到精通讲解...');
#创建表t_comment 并插入相关数据
DROP TABLE IF EXISTS 't_comment';
CREATE TABLE 't_comment'(
'id' int(20) NOT NULL AUTO_INCREENT COMMENT '评论id',
'content' longtext COMMENT '评论内容',
'author' varchar(200) DEFAULT NULL COMMENT '评论作者',
'a_id' int(20) DEFAULT NULL COMMENT '关联的文章id',
PRIMARY KEY ('id')
)ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
INSERT INTO 't_comment' VALUES ('1','很全,很详细','狂奔的蜗牛','1');
INSERT INTO 't_comment' VALUES ('2','赞一个','tom','1');
INSERT INTO 't_comment' VALUES ('3','很详细','kitty','1');
INSERT INTO 't_comment' VALUES ('4','很好,非常详细','张三','1');
INSERT INTO 't_comment' VALUES ('5','很不错','张扬','2');
文件 3-1 中,先创建了一个数据库 springbootdata,然后创建了两个表tarticle和t_comment,并向表中插入数据。其中评论表tcomment的aid 与文章表t_article 的主键 id 相关联。
2.创建项目,引入相应的启动器
(1)创建 Spring Boot 项目。创建一个名为 chapter03的 Spring Boot 项目,在 Dependencies依赖中选择 SOL 模块中的 MSQL 和 MyBatis 依赖,并根据后续提示完成项目创建。
(2)编写数据库表对应的实体类。在 chapter03 项目中创建名为 com.itheima.domain 的包,并在该包中编写与数据库表 t_comment 和 t_article 对应的实体类 Comment 和 Article,内容分别如文件 3-2 和文件 3-3 所示。
文件3-2 Comment.java
public class Comment {
private Integer id;
private String content;
private String author;
private Integer aId;
//省略属性 getter和setter 方法
//省略tostring()方法
}
文件 3-3 Article.java
import java.util.List;
public class Article{
private Integer id;
private String title;
private String content;
private List<Comment> commentList;
//省略属性 getter和 setter 方法
//省略toString()方法
}
文件 3-2 和文件 3-3 中,实体类 Comment 和 Article 中的属性分别对应的是数据库表t_comment和t_article 的字段,同时还封装了实体类属性的 getter 和 setter 方法。
3.编写配置文件
(1)在 application,properties 配置文件中进行数据库连接配置。打开全局配置文件 application.
properties,在配置文件中编写对应的 MySQL 数据库连接配置,内容如文件 3-4 所示。
文件 3-4 application.properties
#MySQL 数据库连接配置
spring.datasource.url=jdbc:mysql://localhost:3306/springbootdata?serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=root
文件 3-4 中,编写了连接本地 MySQL 数据库 springbootdata 的相关配置,其中默认连接
数据库的用户名和密码均为 root。
(2)数据源类型选择配置。Spring Boot1x版本默认使用的是tomcat.jdbc 数据源,SpringBoo[2x版本默认使用的是 hikar 数据源。如果使用其他数据源,还需要进行额外配置。
这里选择使用阿里巴巴的 Druid 数据源。在 pom.xm| 文件中添加 Druid 数据源的依赖启动器,示例代码如下。
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
上述引入的依赖 druid-spring-boot-starter,同样是阿里巴巴为了迎合 Spring Boot 项目而适配的 Druid 数据源启动器,当在 pom.xml 文件中引入该启动器后,不需要再进行其他额外配置,Spring Boot 项目会自动识别配置 Druid 数据源。
需要说明的是,上述配置的 Druid 数据源启动器内部已经初始化了一些运行参数(例如initialSize、maxActive 等 ),如果开发过程中需要修改第三方 Druid 的运行参数,则必须在全后配置文件中修改。修改后的内容如文件 3-5所示。
文件 3-5 application.properties
#MySQL 数据库连接配置
spring.datasource.url=jdbc:mysql://localhost:3306/springbootdata?serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=root
#添加并配置第三方数据源 Druid
spring.datasource.type = com.alibaba.druid.pool.DruidDataSource
spring.datasource.initialSize=20
spring.datasource.minIdle=10
spring.datasource.maxActive=100
文件 3-5 中修改了 Druid 数据源的类型、初始化连接数、最小空闲数和最大连接数属性。
如果有其他需求,还可以参考 Druid 属性设置更多参数。
在 application.properties 配置文件中添加上述配置后,会发现配置的 initialSize、minldle和 maxActive 属性底纹为黄色(IDEA 开发工具中的显示色 ),这是因为在 Spring Boot 提供的数据源自动配置类 org,springframework.boot.autoconfigure,jdbc.DataSourceProperties 中,没有与这些参数对应的默认属性,所以这些设置的属性值无法识别和生效。为此,还需要编写一个自定义配置类,将配置文件中的属性注入到 Druid 数据源属性中。
在 chapter03 项目中创建名为 com,itheima.config 的包,并在该包下创建一个自定义配置类对 Druid 数据源属性值进行注入,内容如文件 3-6 所示。
文件 3-6 DataSourceConfig.java
import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Confiquration;
import javax.sql.DataSource;
@Configuration
public class DataSourceConfig {
@Bean
@ConfigurationProperties(prefix="spring.datasource")
public DataSource getDruid(){
return new DruidDataSource();
}
}
在文件 3-6 中,通过@Configuration 注解标识了一个自定义配置类 DataSourceConfig,在该配置类中通过@Bean 注解注入了一个 DataSource 实例对象,@ConfigurationProperties(prefix:"spring,datasource")注解的作用是将全局配置文件中以 spring.datasource 开头的属性值注入到 getDruid()方法返回的 DataSource 类对象属性中,这样就可以完成第三方数据源参数值的注入。