数据源(连接池概述)
数据源是指数据库应用程序所使用的数据库或者数据库服务器。
数据源(Data Source)顾名思义,数据的来源,是提供某种所需要数据的器件或原始媒体。在数据源中存储了所有建立数据库连接的信息。就像通过指定文件名称可以在文件系统中找到文件一样,通过提供正确的数据源名称,你可以找到相应的数据库连接。
常见的数据源有DBCP、C3P0、Druid等。
在JAVA中我们使用数据源可以按照以下几个步骤进行开发(数据源开发步骤):
- 导入数据源和数据库驱动的坐标(依赖包);
- 创建出数据源对象;
- 配置数据源的基本连接信息;
- 使用数据源获取连接资源(连接并操作数据库);
- 使用完毕后归还链接资源。
下面首先是一个数据源手动创建的示例,然后是引入Spring来配置数据源的例子。
自定义数据源(手动创建)
以Druid数据源、MySQL数据库为例
在进行下面的操作之前需要在数据库中创建一个数据库(test),并在test数据库下创建一个表(user)。
然后,回到代码中,创建user表所对应的实体类:
public class User {
private Integer id;
private String username;
private String password;
public User() {
}
public User(Integer id, String username, String password) {
this.id = id;
this.username = username;
this.password = password;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
}
准备工作做完之后,就可以按照下面的步骤进行数据源的操作。
1. 导入Druid和mysql数据库驱动依赖包
<!-- Druid数据源 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.10</version>
</dependency>
<!-- Mysql数据库驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.21</version>
</dependency>
2. 创建数据源对象并配置基本连接信息
@Test
public void druidTest() throws SQLException {
//创建数据源
DruidDataSource dataSource = new DruidDataSource();
// 配置数据库连接参数
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai");
dataSource.setUsername("root");
dataSource.setPassword("123456");
//获取连接对象
Connection conn = dataSource.getConnection();
System.out.println(conn);
}
打印连接对象,创建数据源成功。
使用JDBC操作数据库,打印user表的所有记录
@Test
public void druidTest() throws SQLException {
//创建数据源
DruidDataSource dataSource = new DruidDataSource();
// 配置数据库连接参数
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai");
dataSource.setUsername("root");
dataSource.setPassword("123456");
//获取连接对象
Connection conn = dataSource.getConnection();
System.out.println(conn);
Statement statement = conn.createStatement();
ResultSet resultSet = statement.executeQuery("select * from user");
while (resultSet.next()){
User user = new User();
user.setId(resultSet.getInt("id"));
user.setUsername(resultSet.getString("username"));
user.setPassword(resultSet.getString("password"));
System.out.println(user);
}
conn.close();
}
提取数据库连接信息至配置文件
上面在配置数据库连接参数的时候,我们直接把数据库信息放在代码里面的,这样是很不优雅的。
可以把数据库的连接信息提取出来放入一个配置文件中,当代码中需要时,再从配置文件中获取连接信息。
创建配置文件(jdbc.properties)
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
jdbc.user=root
jdbc.password=123456
从配置文件获取数据库连接信息
@Test
public void druidTest() throws SQLException {
// 加载类路径下的jdbc.properties
ResourceBundle bundle = ResourceBundle.getBundle("jdbc");
//创建数据源
DruidDataSource dataSource = new DruidDataSource();
// 配置数据库连接参数
dataSource.setDriverClassName(bundle.getString("jdbc.driver"));
dataSource.setUrl(bundle.getString("jdbc.url"));
dataSource.setUsername(bundle.getString("jdbc.user"));
dataSource.setPassword(bundle.getString("jdbc.password"));
Connection conn = dataSource.getConnection();
System.out.println(conn);
Statement statement = conn.createStatement();
ResultSet resultSet = statement.executeQuery("select * from user");
while (resultSet.next()){
User user = new User();
user.setId(resultSet.getInt("id"));
user.setUsername(resultSet.getString("username"));
user.setPassword(resultSet.getString("password"));
System.out.println(user);
}
conn.close();
}
使用Spring配置数据源
上一篇文章中介绍了Spring的依赖注入(【重温SSM框架系列】1 - Spring快速入门(配置文件及API详解):https://blog.csdn.net/weixin_43598687/article/details/123128711)
所以,对于数据源的创建,也可以将DataSource的创建权交由Spring容器去完成。
在Spring核心配置文件中配置数据源及数据库信息`
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</bean>
从Spring容器中获取DataSource实例对象
@Test
public void druidTest2() throws SQLException {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
DataSource dataSource = (DataSource) context.getBean("dataSource");
Connection conn = dataSource.getConnection();
System.out.println(conn);
Statement statement = conn.createStatement();
ResultSet resultSet = statement.executeQuery("select * from user");
while (resultSet.next()){
User user = new User();
user.setId(resultSet.getInt("id"));
user.setUsername(resultSet.getString("username"));
user.setPassword(resultSet.getString("password"));
System.out.println(user);
}
conn.close();
}
提取数据库连接信息至配置文件
使用Spring也可以把数据库的连接信息提取出来放入一个配置文件中,使用时再从配置文件中获取连接信息。
创建配置文件(jdbc.properties)
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
jdbc.user=root
jdbc.password=123456
applicationContext.xml加载jdbc.properties配置文件获得连接信息。
在applicationContext.xml加载jdbc.properties配置文件获得连接信息之前,需要引入context命名空间和约束路径:
- 命名空间:xmlns:context="http://www.springframework.org/schema/context"
- 约束路径:http://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd
applicationContext.xml完整内容
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<context:property-placeholder location="jdbc.properties"/>
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.user}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
</beans>