1 数据源(连接池概述)
数据源是指数据库应用程序所使用的数据库或者数据库服务器
数据源(Data Source)顾名思义,数据的来源,是提供某种所需要数据的器件或原始媒体。在数据源中存储了所有建立数据库连接的信息。就像通过指定文件名称可以在文件系统中找到文件一样,通过提供正确的数据源名称,你可以找到相应的数据库连接。
常见的数据源有DBCP、C3P0、Druid等。
在JAVA中我们使用数据源可以按照以下几个步骤进行开发(数据源开发步骤):
导入数据源和数据库驱动的坐标(依赖包);
创建出数据源对象;
配置数据源的基本连接信息;
使用数据源获取连接资源(连接并操作数据库);
使用完毕后归还链接资源。
下面首先是一个数据源手动创建的示例,然后是引入Spring来配置数据源的例子
2 自定义数据源(手动创建)
2.1 以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数据库驱动依赖包
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);
}
建数据源成功
3 使用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();
}
4 提取数据库连接信息至配置文件
上面在配置数据库连接参数的时候,我们直接把数据库信息放在代码里面的,这样是很不优雅的。
可以把数据库的连接信息提取出来放入一个配置文件中,当代码中需要时,再从配置文件中获取连接信息
4.1 创建配置文件(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
4.2 从配置文件获取数据库连接信息
@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();
}
5 使用Spring配置数据源
所以,对于数据源的创建,也可以将DataSource的创建权交由Spring容器去完成
5.1 在Spring核心配置文件中配置数据源及数据库信息
5.2 从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();
}
6 提取数据库连接信息至配置文件
使用Spring也可以把数据库的连接信息提取出来放入一个配置文件中,使用时再从配置文件中获取连接信息。
6.1创建配置文件(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.xsdapplicationContext.xml完整内容
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">