Commons DbUtils是Apache组织提供的一个对JDBC进行简单封装的开源工具类库,使用它能够简化JDBC应用程序的开发,同时也不会影响程序的性能
作用
- 小巧、简单、实用
- 对数据表的查询操作,可以把结果转换为List、Array、Set等集合
- 对数据表的DML操作,只需要写SQL语句
核心内容
- DbUtils类:启动类
- ResultSetHandler接口:转换类型接口
- QueryRunner类:执行SQL语句的类
使用
需要导入两个包
先创建配置文件druid.properties
driverClassName=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/gp2002?useSSL=false&characterEncoding=utf8&serverTimezone=GMT%2B8
username=bao
password=123456
initialSize=10
maxActive=50
minIdle=5
maxWait=5000
然后创建连接池工具类
package com.robot2.utils;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;
import java.io.InputStream;
import java.util.Properties;
/**
* 创建连接池工具类。
*
* @author 张宝旭
*/
public class DruidUtils {
private static DataSource dataSource = null;
static {
try {
Properties properties = new Properties();
InputStream inputStream = DruidUtils.class.getClassLoader().getResourceAsStream("druid.properties");
properties.load(inputStream);
inputStream.close();
// 创建连接池
dataSource = DruidDataSourceFactory.createDataSource(properties);
} catch (Exception e) {
e.printStackTrace();
System.out.println("连接池初始化失败");
}
}
/**
* 获取连接池
* @return 连接池
*/
public static DataSource getDataSource() {
return dataSource;
}
}
然后就可以使用了,先创建DAO层的接口,规定实现的方法
package com.robot2.dao;
import com.robot2.pojo.Student;
import java.util.List;
/**
* @author 张宝旭
*/
public interface StudentDao {
/**
* 查询所有学生
* @return 所有学生
*/
List<Student> queryAll();
/**
* 根据ID查询学生
* @return 找到的学生
*/
Student queryById(int id);
/**
* 添加学生
* @param student 要添加的学生
* @return 成功返回添加的数量,失败返回-1
*/
int insert(Student student);
/**
* 根据学生id删除学生
* @param id 学生的ID
* @return 成功返回删除的数量,失败返回-1
*/
int deleteById(int id);
/**
* 修改学生信息
* @param student 要修改的学生
* @return 成功返回修改的数量,失败返回-1
*/
int update(Student student);
/**
* 返回数据个数
* @return 数据个数
*/
long getCount();
/**
* 获取所有姓名。
* @return 所有姓名
*/
List<String> getSname();
}
然后创建实现类,使用Commons DbUtils实现增删改查
package com.robot2.dao.impl;
import com.robot2.dao.StudentDao;
import com.robot2.pojo.Student;
import com.robot2.utils.DruidUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ColumnListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import java.sql.SQLException;
import java.util.List;
/**
* DAO层操作数据库,使用Commons Dbutils.
*
* @author 张宝旭
*/
public class StudentDaoImpl implements StudentDao {
// 创建执行对象,传入参数为连接池
QueryRunner queryRunner = new QueryRunner(DruidUtils.getDataSource());
@Override
public List<Student> queryAll() {
try {
return queryRunner.query("SELECT sid, sname, sage FROM student", new BeanListHandler<>(Student.class));
} catch (SQLException e) {
throw new RuntimeException("查询所有异常");
}
}
@Override
public Student queryById(int id) {
try {
return queryRunner.query("SELECT sid, sname, sage FROM student WHERE sid=?",
new BeanHandler<>(Student.class), id);
} catch (SQLException e) {
throw new RuntimeException("查询指定异常");
}
}
@Override
public int insert(Student student) {
String sql = "INSERT INTO student VALUES(?, ?, ?)";
Object[] params = {student.getSid(), student.getSname(), student.getSage()};
try {
return queryRunner.update(sql, params);
} catch (SQLException e) {
throw new RuntimeException("添加异常");
}
}
@Override
public int deleteById(int id) {
String sql = "DELETE FROM student WHERE sid=?";
try {
return queryRunner.update(sql, id);
} catch (SQLException e) {
throw new RuntimeException("删除异常");
}
}
@Override
public int update(Student student) {
String sql = "UPDATE student SET sname=?, sage=? WHERE sid=?";
Object[] params = {student.getSname(), student.getSage(), student.getSid()};
try {
return queryRunner.update(sql, params);
} catch (SQLException e) {
throw new RuntimeException("修改异常");
}
}
@Override
public long getCount() {
String sql = "SELECT COUNT(*) FROM student";
try {
return queryRunner.query(sql, new ScalarHandler<>());
} catch (SQLException e) {
throw new RuntimeException("查询数据数量异常");
}
}
@Override
public List<String> getSname() {
String sql = "SELECT sname FROM student";
try {
return queryRunner.query(sql, new ColumnListHandler<>());
} catch (SQLException e) {
throw new RuntimeException("查询姓名异常");
}
}
}
ResultSetHandler: 结果集处理器,接口下面有四个重要的实现类
- BeanListHandler: 返回List集合
- BeanHandler: 返回单个对象
- ColumnListHandler: 返回单行单列数据
- ScalarHandler: 返回查询的那一列中数据的数量