基础环境搭建
因为Spring Boot框架开发的便利性,所以实现Spring Boot与数据访问层框架(例如MyBatis)的整合非常简单,主要是引入对应的依赖启动器,并进行数据库相关参数设置即可。下面,通过具体的步骤,先以Spring Boot整合关系型数据库MySQL使用的MyBatis框架为例讲解基础环境搭建。
1.数据准备
在MySQL中,创建一个名为springbootdata的数据库,在该数据库中创建两个表t_article和t_comment,并预先插入几条测试数据,SQL语句如文件1所示。
文件1 springbootdata.sql
1 # 创建数据库
2 CREATE DATABASE springbootdata;
3 # 选择使用数据库
4 USE springbootdata;
5 # 创建表t_article并插入相关数据
6 DROP TABLE IF EXISTS `t_article`;
7 CREATE TABLE `t_article` (
8 `id` int(20) NOT NULL AUTO_INCREMENT COMMENT '文章id',
9 `title` varchar(200) DEFAULT NULL COMMENT '文章标题',
10 `content` longtext COMMENT '文章内容',
11 PRIMARY KEY (`id`)
12 ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
13 INSERT INTO `t_article` VALUES ('1', 'Spring Boot基础入门', '从入门到精通讲解...');
14 INSERT INTO `t_article` VALUES ('2', 'Spring Cloud基础入门', '从入门到精通讲解...');
15 # 创建表t_comment并插入相关数据
16 DROP TABLE IF EXISTS `t_comment`;
17 CREATE TABLE `t_comment` (
18 `id` int(20) NOT NULL AUTO_INCREMENT COMMENT '评论id',
19 `content` longtext COMMENT '评论内容',
20 `author` varchar(200) DEFAULT NULL COMMENT '评论作者',
21 `a_id` int(20) DEFAULT NULL COMMENT '关联的文章id',
22 PRIMARY KEY (`id`)
23 ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
24 INSERT INTO `t_comment` VALUES ('1', '很全、很详细', '狂奔的蜗牛', '1');
25 INSERT INTO `t_comment` VALUES ('2', '赞一个', 'tom', '1');
26 INSERT INTO `t_comment` VALUES ('3', '很详细', 'kitty', '1');
27 INSERT INTO `t_comment` VALUES ('4', '很好,非常详细', '张三', '1');
28 INSERT INTO `t_comment` VALUES ('5', '很不错', '张杨', '2');
文件1中,先创建了一个数据库springbootdata,然后创建了两个表t_article和t_comment并向表中插入数据。其中评论表t_comment的a_id与文章表t_article的主键id相关联。
2.创建项目,引入相应的启动器
(1)创建Spring Boot项目。创建一个名为chapter03的Spring Boot项目,在Dependencies依赖中选择SQL模块中的MySQL和MyBatis依赖,并根据后续提示完成项目创建。其中,项目依赖选择效果如图1所示。
图1 Spring Boot整合MyBatis项目依赖选择
在图1选择的功能模块启动器中,MySQL是为了提供MySQL数据库连接驱动,MyBatis则是为了提供MyBatis框架来操作数据库。
(3)编写数据库表对应的实体类。在chapter03项目中创建名为com.itheima.domain的包,并在该包中编写与数据库表t_comment和t_article对应的实体类Comment和Article,内容分别如文件2和3所示。
文件2 Comment.java
1 public class Comment {
2 private Integer id;
3 private String content;
4 private String author;
5 private Integer aId;
6 // 省略属性getXX()和setXX()方法
7 // 省略toString()方法
8 }
文件3 Article.java
1 import java.util.List;
2 public class Article {
3 private Integer id;
4 private String title;
5 private String content;
6 private List<Comment> commentList;
7 // 省略属性getXX()和setXX()方法
8 // 省略toString()方法
9 }
文件2和3中,实体类Comment和Article中的属性分别对应的是数据库表t_comment和t_article的字段,同时还封装了实体类属性的getXX()和setXX()方法。
3.编写配置文件
(1)在application.properties配置文件中进行数据库连接配置。打开全局配置文件application.properties,在配置文件中编写对应的MySQL数据库连接配置,内容如文件4所示。
文件4 application.properties
1 # MySQL数据库连接配置
2 spring.datasource.url=jdbc:mysql://localhost:3306/springbootdata?serverTimezone=UTC
3 spring.datasource.username=root
4 spring.datasource.password=root
文件4中,编写了连接本地MySQL数据库springbootdata的相关配置,其中默认连接数据库的用户名和密码均为root。
(2)数据源类型选择配置。Spring Boot 1.x版本默认使用的是tomcat.jdbc数据源,Spring Boot 2.x版本默认使用的是hikari数据源。如果使用其他数据源,还需要进行额外配置。
这里选择使用阿里巴巴的Druid数据源。在pom.xml文件中添加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的运行参数进行重新设置,必须在application.properties配置文件中进行默认参数覆盖。修改后的内容如文件5所示。
文件5 application.properties
1 # MySQL数据库连接配置
2 spring.datasource.url=jdbc:mysql://localhost:3306/springbootdata?serverTimezone=UTC
3 spring.datasource.username = root
4 spring.datasource.password = root
5 #添加并配置第三方数据源druid
6 spring.datasource.type = com.alibaba.druid.pool.DruidDataSource
7 spring.datasource.initialSize=20
8 spring.datasource.minIdle=10
9 spring.datasource.maxActive=100
文件5中,对数据源类型、初始化连接数、最小空闲数和最大连接数进行了属性值覆盖,如果有其他生产需求,还可以参考Druid属性设置更多参数。
在application.properties配置文件中添加上述配置后,会发现配置的initialSize、minIdle和maxActive属性底纹为黄色(IDEA开发工具中的显示色),这是因为在Spring Boot提供的数据源自动配置类org.springframework.boot.autoconfigure.jdbc.DataSourceProperties中,没有与这些参数对应的默认属性,所以这些设置的属性值无法识别和生效。为此,还需要编写一个自定义配置类,将配置文件中的属性注入到Druid数据源属性中。
在chapter03项目中创建名为com.itheima.config的包,并在该包下创建一个自定义配置类对Druid数据源属性值进行注入,内容如文件6所示。
文件6 DataSourceConfig.java
1 import com.alibaba.druid.pool.DruidDataSource;
2 import org.springframework.boot.context.properties.ConfigurationProperties;
3 import org.springframework.context.annotation.Bean;
4 import org.springframework.context.annotation.Configuration;
5 import javax.sql.DataSource;
6 @Configuration
7 public class DataSourceConfig {
8 @Bean
9 @ConfigurationProperties(prefix = "spring.datasource")
10 public DataSource getDruid(){
11 return new DruidDataSource();
12 }
13 }
在文件6中,通过@Configuration注解标识了一个自定义配置类DataSourceConfig,在该配置类中通过@Bean注解注入了一个DataSource实例对象,@ConfigurationProperties(prefix = "spring.datasource")注解的作用是将全局配置文件中以spring.datasource开头的属性值注入到getDruid()方法返回的DataSource类对象属性中,这样就可以完成第三方数据源参数值的注入。
小提示:
上述编写配置文件的第(2)步中,数据源类型选择配置在本教材中不用配置也是可以完成案例演示的,但是为了更贴近实际开发需求,所以更完善地讲解了在Spring Boot中数据源配置的具体操作。
另外,在pom.xml中添加第三方数据源druid依赖时,本书直接选了适配Spring Boot开发的druid启动器druid-spring-boot-starter,所以可以不需要再进行其他配置,项目就会自动识别该数据源。而有些读者可能会使用独立的druid依赖文件,这时就必须在全局配置文件中额外添加“spring.datasource.type = com.alibaba.druid.pool.DruidDataSource”配置,这样项目才会识别配置的druid数据源。