Commons DbUtils是Apache组织提供的一个对JDBC进行简单封装的开源工具类库,使用它能够简化JDBC应用程序的开发,同时也不会影响程序的性能。
DBUtils封装了对JDBC的操作,简化了JDBC操作,可以少写代码。
关于DBUtils的单独使用可以参考:https://blog.csdn.net/qq_40348465/article/details/83662643
DbUtils 关闭链接等操作
QueryRunner 进行查询的操作
org.apache.commons.dbutils.handlers
ArrayHandler :将ResultSet中第一行的数据转化成对象数组
ArrayListHandler将ResultSet中所有的数据转化成List,List中存放的是Object[]
BeanHandler :将ResultSet中第一行的数据转化成类对象
BeanListHandler :将ResultSet中所有的数据转化成List,List中存放的是类对象
ColumnListHandler :将ResultSet中某一列的数据存成List,List中存放的是Object对象
KeyedHandler :将ResultSet中存成映射,key为某一列对应为Map。Map中存放的是数据
MapHandler :将ResultSet中第一行的数据存成Map映射
MapListHandler :将ResultSet中所有的数据存成List。List中存放的是Map
ScalarHandler :将ResultSet中一条记录的其中某一列的数据存成Object
org.apache.commons.dbutils.wrappers
SqlNullCheckedResultSet :对ResultSet进行操作,改版里面的值
StringTrimmedResultSet :去除ResultSet中中字段的左右空格。Trim()
主要方法:
DbUtils类:启动类,jdbc辅助方法的集合类,线程安全。
QueryRunner类:执行SQL语句的类,可以设置查询结果集的封装策略,线程安全。
ResultSetHandler接口:转换类型接口,将封装结果集中的数据,转换到另一个对象。
MapListHandler类:实现类,把记录转化成List。
BeanListHandler类:实现类,把记录转化成List,使记录为JavaBean类型的对象。
C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate,Spring等,C3P0它相对于DBCP,它拥有自动回收空闲连接的功能。
使用示例:
工程目录:
1.导包: jdbc: mysql-connector-java-x.x.xx-bin.jar;
c3p0: c3p0-.x.x.x.x.jar,mchange-commons.java-.x.x.xx.jar;
dbutils: commons-dbutils-x.x.jar.
2.配置连接池 c3p0-config.xml,注意需为c3p0开头
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<!-- 默认配置,如果没有指定则使用这个配置 -->
<default-config>
<!-- 基本配置 -->
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://127.0.0.1:3306/数据库名?characterEncoding=utf-8
</property>
<property name="user">root</property>
<property name="password"></property>
<!--扩展配置 -->
<property name="checkoutTimeout">30000</property>
<property name="idleConnectionTestPeriod">30</property>
<property name="initialPoolSize">5</property>
<property name="maxIdleTime">30</property>
<property name="maxPoolSize">50</property>
<property name="minPoolSize">5</property>
<property name="maxStatements">100</property>
</default-config>
</c3p0-config>
3.编写工具类
package utils;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.sql.DataSource;
import com.mchange.v2.c3p0.ComboPooledDataSource;
public class JdbcUtil {
// 数据源
private static DataSource dataSource;
static {
dataSource = new ComboPooledDataSource();
}
// 获取数据源
public static DataSource getDataSource() {
return dataSource;
}
// 获取数据库连接对象
public static Connection getConnection() throws SQLException {
return dataSource.getConnection();
}
// 释放资源
public static void close(Connection conn, Statement stmt, ResultSet rs) {
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
4.使用示例
package domain;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import model.Employee;
import utils.JdbcUtil;
public class EmpDao {
private QueryRunner runner = new QueryRunner(JdbcUtil.getDataSource());
// 增加
public boolean add(Employee emp) {
boolean flag = false;
String sql = "insert into emp(empName,deptId) VALUES(?,?); ";
Object[] params = new Object[] { emp.getEmpName(), emp.getDept().getDeptId() };
try {
int row = runner.update(sql, params);
System.out.println("添加成功!");
flag = row > 0 ? true : false;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return flag;
}
// 修改
public boolean update(Employee emp) {
boolean flag = false;
String sql = "update emp set empName=?,deptId=? where empId=?";
Object[] params = new Object[] { emp.getEmpName(), emp.getDept().getDeptId(), emp.getEmpId() };
try {
int row = runner.update(sql, params);
System.out.println("修改成功!");
flag = row > 0 ? true : false;
} catch (SQLException e) {
e.printStackTrace();
}
return flag;
}
// 删除
public boolean delete(int empId) {
boolean flag = false;
String sql = "delete from emp where empId=?";
Object[] params = new Object[] { empId };
try {
int row = runner.update(sql, params);
System.out.println("删除成功!");
flag = row > 0 ? true : false;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return flag;
}
// 获取一条记录
public Employee getEmpById(String empId) {
Employee emp = null;
String sql = "select * from emp where empId=?";
Object[] params = new Object[] { empId };
try {
emp = runner.query(sql, new BeanHandler<Employee>(Employee.class), params);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return emp;
}
// 查询多条记录
public List<Employee> getAllEmp() {
List<Employee> list = new ArrayList<Employee>();
String sql = "select * from emp;";
try {
list = runner.query(sql, new BeanListHandler<Employee>(Employee.class));
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return list;
}
}