1.POM依赖
SpringBoot在整合数据源时需要在pom.xml加入下面两个依赖
mysql驱动(使用其他数据库时请选择对应的驱动)
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
jdbc组件
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
jdbc组件中默认包含了使用Tomcat服务器作为数据源
整合mybatis框架需要引入下面的依赖
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
也可以在创建项目时勾选相应选项
2.配置默认数据源
Springboot默认支持4种数据源类型,定义在 org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration 中,分别是:
- org.apache.tomcat.jdbc.pool.DataSource
- com.zaxxer.hikari.HikariDataSource
- org.apache.commons.dbcp.BasicDataSource
- org.apache.commons.dbcp2.BasicDataSource
对于这4种数据源,当 classpath 下有相应的类存在时,Springboot 会通过自动配置为其生成DataSource Bean,DataSource Bean默认只会生成一个,四种数据源类型的生效先后顺序如下:Tomcat > Hikari > dbcp > dbcp2
切换默认数据源
按照上述配置启动应用时,Springboot会读取核心配置中的配置并自动装配一个Tomcat DataSource,如果要切换成其他的默认支持的数据源类型(本文示例为dbcp数据源),需要以下操作。
(1)在pom.xml中的jdbc组件依赖中排除其他的数据源依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
<exclusions>
<!-- 排除Tomcat-JDBC依赖(取消默认数据源) -->
<exclusion>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-jdbc</artifactId>
</exclusion>
</exclusions>
</dependency>
(2)添加需要的数据源依赖
<!-- dbcp数据源 -->
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
(3)在application.yml中通过spring.datasource.type属性指定数据源的类型
spring:
datasource:
name: test
url: jdbc:mysql://localhost/sbd?useUnicode=true&characterEncoding=utf-8
username: root
password: root
# 使用dbcp数据源
type: org.apache.commons.dbcp.BasicDataSource
driver-class-name: com.mysql.jdbc.Driver
3.配置第三方数据源
如果不想使用SpringBoot支持的4种默认数据源,还可以选择使用其他第三方的数据源,例如:Druid、c3p0等。
以使用Druid数据源为例。
(1)在pom.xml中添加第三方数据源的依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.6</version>
</dependency>
(2)编写@Configuration类进行数据源注册
在com.neuedu包下新建DataSourceConfig类,编写如下代码加载application.yml中的数据源信息
@Configuration
public class DataSourceConfig {
@Autowired
private Environment env;
@Bean
public DataSource getDataSource() {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setUrl(env.getProperty("spring.datasource.url"));
dataSource.setUsername(env.getProperty("spring.datasource.username"));
dataSource.setPassword(env.getProperty("spring.datasource.password"));
return dataSource;
}
}
@Configuration类相当于Spring框架的applicationContext.xml文件
(3)配置application.yml文件
spring:
datasource:
name: test
url: jdbc:mysql://localhost/s1?useUnicode=true&characterEncoding=utf-8
username: root
password: root
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.jdbc.Driver
如果在后续运行中,控制台出现下述错误
请为spring.datasource.url追加时区设置(GMT+8)
url: jdbc:mysql://localhost/s1?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8
4.整合Mybatis框架开发
(1)在pom.xml中加入mybatis依赖
在本章开始部分我们已经在工程中加入了mybatis依赖,此处略
(2)在application.yml文件中加入mybatis映射文件路径配置
mybatis.mapper-locations: classpath:mapper/*.xml
表示在编译目录下mapper文件夹中的的所有xml为mybatis映射文件,本文新建UserMapper.xml放在了resources文件夹的mapper文件夹中
同时设置了服务端口号,网站根路径和字符集,完整application.yml如下:
server:
port: 8088
servlet:
context-path: /myproj1
tomcat:
uri-encoding: utf-8
spring:
datasource:
name: test
url: jdbc:mysql://localhost/s1?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8
username: root
password: root
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.jdbc.Driver
mybatis:
mapper-locations: classpath:mapper/*.xml
(3)在UserMapper.xml中新建statement用于测试,本次查询了一个新的UUID用于测试
<mapper namespace="com.neuedu.mapper.UserMapper">
<select id="getUUIDForPK" resultType="java.lang.String">
select UUID();
</select>
</mapper>
(4)新建com.neuedu.mapper包,并在其中新建接口UserMapper,用于映射xml文件
@Mapper
public interface UserMapper {
public String getUUIDForPK() throws Exception;
}
(5)新建com.neuedu.service包和com.neuedu.service.impl包,并编写service接口和实现类
public interface UserService {
public String getUUID() throws Exception;
}
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper mapper;
@Override
public String getUUID() throws Exception {
return mapper.getUUIDForPK();
}
}
(5)在com.neuedu.controller包中,编写处理器程序
@RestController
public class UserHandler {
@Autowired
private UserService us;
@RequestMapping("/test")
public String test() throws Exception{
return us.getUUID();
}
}
(6)测试
打开浏览器:输入网址http://localhost:8088/myproj1/test
页面正常得到数据库生成的UUID: