1、搭建演示环境
1.1 创建数据库与数据表
在MySQL数据库中创建名为spring_boot_chapter5的数据库,在该数据库中创建名为t_user的数据表,建表sql语句如下:
CREATE TABLE `t_user` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`user_name` varchar(60) NOT NULL DEFAULT '',
`sex` varchar(3) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '1',
`note` varchar(256) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
1.2 创建相应的POJO
创建好数据库与数据表之后,需要在项目中创建相应的POJO用来与表对应起来。在com.ccff.springboot.demo.chapter5.pojo包下创建名为User的POJO类,具体代码如下:
package com.ccff.springboot.demo.chapter5.pojo;
import com.ccff.springboot.demo.chapter5.enumration.SexEnum;
/**
* Created by wangzhefeng01 on 2019/8/7.
*/
public class User {
private Long id = null;
private String userName = null;
private SexEnum sex = null; //性别为枚举类型
private String note = null;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getNote() {
return note;
}
public void setNote(String note) {
this.note = note;
}
public SexEnum getSex() {
return sex;
}
public void setSex(SexEnum sex) {
this.sex = sex;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
}
由上面的代码可知,其中性别类型为一个枚举类型。在com.ccff.springboot.demo.chapter5.enumration包下创建名为SexEnum的性别枚举类型,具体代码如下:
package com.ccff.springboot.demo.chapter5.enumration;
/**
* Created by wangzhefeng01 on 2019/8/7.
*/
public enum SexEnum {
MALE(1,"男"),
FEMALE(2,"女");
private Integer id;
private String value;
SexEnum(Integer id, String value) {
this.id = id;
this.value = value;
}
public static SexEnum getSexEnumById(Integer id){
for (SexEnum sex : SexEnum.values()) {
if (sex.getId() == id){
return sex;
}
}
return null;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
2、配置数据源
2.1 默认数据源
如果要使用Spring Boot访问数据库,无论采用JPA或MyBatis的方式,都需要先完成数据源的配置。
在Spring Boot中,已经自动默认数据源的配置,但前提是需要在项目中依赖于Spring Boot的spring-boot-starter-data-jpa。在依赖后,它就会默认配置数据源。这些默认的数据源主要是内存数据库,如h2、hqldb和Derby等内存数据,但更多的时候需要配置为我们自己想要的数据源去操作商用数据库,如MySQL,Oracle等。
2.2 配置Spring Boot绑定的Tomcat数据源
下面以MySQL作为自定义数据源。
首先,在pom文件中引入对spring-boot-starter-data-jpa和MySQL的依赖,具体依赖如下所示:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
</dependencies>
在引入依赖后,显然还不足以连接我们的数据源,还需要配置数据库的相关信息才能连接到数据库,这里可以配置application.properties配置文件以得到配置数据源的效果。在默认情况下,Spring Boot会使用其绑定的Tomcat的数据源,我们可以进行如下配置:
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/spring_boot_chapter5
spring.datasource.username=root
spring.datasource.password=123456
# =========================== 配置Spring Boot绑定的Tomcat数据源 ===========================
# 最大等待连接中的数量,设0为没有限制
spring.datasource.tomcat.max-idle=10
# 最大连接活动数
spring.datasource.tomcat.max-active=50
# 最大等待毫秒数,单位为ms,超过时间会出错误信息
spring.datasource.tomcat.max-wait=10000
# 数据库连接池初始化连接数
spring.datasource.tomcat.initial-size=5
# =========================== 配置Spring Boot绑定的Tomcat数据源 ===========================
这里需要说明的是,在配置的第一行是对数据库连接的驱动类进行了配置。若将其注释掉还是可以连接数据源的,这是因为Spring Boot会尽可能地去判断数据源是什么类型的,然后根据其默认的情况去匹配驱动类。在它不能匹配的情况下,你可以明确地配置它,这样就不会使用默认的驱动类了。
2.3 配置第三方数据源
这里我们以DBCP第三方数据源为例。
首先,在pom文件中加入DBCP的数据源Maven依赖。
<!--引入第三方数据源DBCP依赖-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-dbcp2</artifactId>
</dependency>
接着,修改application.properties配置文件,在其中配置DBCP2数据源,具体配置如下:
#spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/spring_boot_chapter5
spring.datasource.username=root
spring.datasource.password=123456
# =========================== 配置第三方DBCP2数据源 ===========================
# 指定数据库连接池类型
spring.datasource.type=org.apache.commons.dbcp2.BasicDataSource
# 最大等待连接中的数量,设0为没有限制
spring.datasource.dbcp2.max-idle=10
# 最大连接活动数
spring.datasource.dbcp2.max-total=50
# 最大等待毫秒数,单位为ms,超过时间会出错误信息
spring.datasource.dbcp2.max-wait-millis=10000
# 数据库连接池初始化连接数
spring.datasource.dbcp2.initial-size=5
# =========================== 配置第三方DBCP2数据源 ===========================
在上面的配置中,首先通过spring.datasource.type属性指定了数据库连接池的类型,然后再使用spring.datasource.dbcp2.*去配置数据库连接池的属性。这样Spring Boot就会根据这些属性去配置对应的数据库连接池,从而知道使用的是DBCP数据源。
为了验证是否正确配置了DBCP数据源,在com.ccff.springboot.demo.chapter5.db包下创建名为DataSourceShow的Bean,并让其实现ApplicationContextAware接口的setApplicationContext()方法。依照Spring的生命周期,在其初始化的时候该方法就会被调用,从而获取Spring IoC容器的上下文(applicationContext)。这时通过getBean()方法就可以获取数据库连接池,然后打印出数据库连接池的全限定名,这样就知道它使用的是哪种数据库连接池了。具体代码如下:
package com.ccff.springboot.demo.chapter5.db;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
import javax.sql.DataSource;
/**
* Created by wangzhefeng01 on 2019/8/7.
*/
@Component
public class DataSourceShow implements ApplicationContextAware {
ApplicationContext applicationContext = null;
//Spring容器会自动调用该方法,注入Spring IoC容器
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
DataSource dataSource = applicationContext.getBean(DataSource.class);
System.out.println("================== Show DataSource start ==================");
System.out.println(dataSource.getClass().getName());
System.out.println("================== Show DataSource end ==================");