DRUID介绍
Druid是阿里巴巴开发的号称为监控而生的数据库连接池,Druid是国内目前最好的数据库连接池。在功能、性能、扩展性方面,都超过其他数据库连接池。Druid已经在阿里巴巴部署了超过600个应用,经过一年多生产环境大规模部署的严苛考验。如:一年一度的双十一活动,每年春运的抢火车票。
Druid的下载地址:https://github.com/alibaba/druid 或者 maven仓库
DRUID连接池使用的jar包:druid-1.0.9.jar
定义User标准类
代码示例:
package com.Utils;
/**
* @Author: Mr.Xu
* @description: 用户类
* @Date: 2021/10/14 17:52
*/
public class User {
private int id;
private String username;
private String password;
private String nickname;
public User() {
}
public User(int id, String username, String password, String nickname) {
this.id = id;
this.username = username;
this.password = password;
this.nickname = nickname;
}
public int getId() {
return id;
}
public void setId(int 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;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
", nickname='" + nickname + '\'' +
'}';
}
}
DRUID的使用
通过硬编码方式
-
思路:
- 创建Druid连接池对象
- 设置连接池的配置参数
- 通过连接池获得连接
- 预编译sql语句,得到预编译对象
- 设置sql语句参数
- 执行sql语句,处理结果
- 释放资源
代码示例:
package com.DRUID;
import com.Utils.User;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidPooledConnection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
* @Author: Mr.Xu
* @description: DRUID测试 DRUID连接池 硬编码
* @Date: 2021/10/14 21:54
*/
public class Test_1 {
public static void main(String[] args) throws SQLException {
//- 创建Druid连接池对象
DruidDataSource dds = new DruidDataSource();
// - 设置连接池的配置参数
dds.setDriverClassName("com.mysql.jdbc.Driver");
dds.setUrl("jdbc:mysql://localhost:3306/day19_1");
dds.setUsername("root");
dds.setPassword("toor");
// - 通过连接池获得连接
DruidPooledConnection connection = dds.getConnection();
// - 预编译sql语句,得到预编译对象
String sql = "select * from user where id = ?";
PreparedStatement pps = connection.prepareStatement(sql);
// - 设置sql语句参数
pps.setInt(1,4);
// - 执行sql语句,处理结果
ResultSet resultSet = pps.executeQuery();
//定义变量user, 来存放数据,赋初始值为null
User user = null;
//循环获取数据
while (resultSet.next()) {
int id = resultSet.getInt("id");
String username = resultSet.getString("username");
String password = resultSet.getString("password");
String nickname = resultSet.getString("nickname");
user = new User(id,username,password,nickname);
System.out.println(user);
}
// - 释放资源
resultSet.close();
pps.close();
connection.close();
}
}
通过配置文件方式
-
思路:
- 导入Druid的jar包
- 拷贝druid.properties配置文件到src路径下
- 配置文件名可以修改
- 配置文件建议放在src路径下
- 配置文件中键名与setXXX方法的方法名对应( set方法去掉set,然后首字母变小写)
- 使用:
- 创建Properties对象,加载配置文件中的数据
- 创建Druid连接池对象,传入Properties对象—>不会自动读src路径下的配置文件
- 通过连接池获得连接
- 预编译sql语句,得到预编译对象
- 设置sql语句参数
- 执行slq语句,处理结果
- 释放资源
代码示例:
package com.DRUID;
import bean.JDBCUtils;
import com.Utils.User;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Properties;
/**
* @Author: Mr.Xu
* @description: 通过配置文件方式
* @Date: 2021/10/14 23:20
*/
public class Test_2 {
public static void main(String[] args) throws Exception {
//- 创建Properties对象,加载配置文件中的数据
Properties properties = new Properties();
InputStream is = Test_2.class.getClassLoader().getResourceAsStream("druid.properties");
properties.load(is);
// - 创建Druid连接池对象,传入Properties对象--->不会自动读src路径下的配置文件
DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);
// - 通过连接池获得连接
Connection connection = dataSource.getConnection();
// - 预编译sql语句,得到预编译对象
String sql = "select * from user where id = ?";
PreparedStatement preparedStatement = connection.prepareStatement(sql);
// - 设置sql语句参数
preparedStatement.setInt(1,5);
// - 执行slq语句,处理结果
ResultSet resultSet = preparedStatement.executeQuery();
//定义user变量存放数据,初始值为null
User user = null;
while (resultSet.next()) {
int id = resultSet.getInt("id");
String username = resultSet.getString("username");
String password = resultSet.getString("password");
String nickname = resultSet.getString("nickname");
user = new User(id,username,password,nickname);
}
// - 释放资源
JDBCUtils.release(resultSet,preparedStatement,connection);
System.out.println(user);
}
}
Druid工具类的制作
- 步骤:
- 0.定义一个DataSource成员变量
- 1.在静态代码块中,加载配置文件,创建Druid连接池对象
- 2.提供一个公共的静态方法获得连接池
- 3.提供一个公共的静态方法获得连接
- 4.提供一个公共的静态方法是否资源
代码示例:
package com.Utils;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
/**
* @Author: Mr.Xu
* @description:
* @Date: 2021/10/14 23:22
*/
public class DRUIDUilts {
//- 0.定义一个DataSource成员变量
private static DataSource dataSources;
// - 1.在静态代码块中,加载配置文件,创建Druid连接池对象
static {
try {
Properties properties = new Properties();
InputStream resourceAsStream = DRUIDUilts.class.getClassLoader().getResourceAsStream("druid.properties");
properties.load(resourceAsStream);
dataSources = DruidDataSourceFactory.createDataSource(properties);
} catch (Exception e) {
e.printStackTrace();
}
}
// - 2.提供一个公共的静态方法获得连接池
public static DataSource getDataSources(){
return dataSources;
}
// - 3.提供一个公共的静态方法获得连接
public static Connection getConnection() throws SQLException {
return dataSources.getConnection();
}
// - 4.提供一个公共的静态方法是否资源
public static void resultSet(ResultSet resultSet ,Statement statement , Connection connection) throws SQLException {
if (resultSet != null){
resultSet.close();
}
if (statement != null){
statement.close();
}
if (connection != null){
connection.close();
}
}
}