package jdbc;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import org.apache.commons.dbutils.DbUtils;
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.ScalarHandler;
import javax.sql.DataSource;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;
import java.util.Properties;
//1、导入druid.jar包,在src下创建druid.properties 配置文件
/**
* 必须包含以下四个配置属性:
* url=jdbc:mysql://localhost:3306/book?rewriteBatchedStatements=true&useServerPrepStmts=false
* username=root
* password=123456
* driverClassName=com.mysql.cj.jdbc.Driver
*/
//2、创建JdbcUtils工具类
public class JdbcUtils {
//3、使用Druid创建连接池
//使用代码块创建连接池,避免每次调用都创建连接池
private static DataSource dataSource;
static {
try {
//提供Properties对象
Properties properties = new Properties();
//通过反射读取配置文件
InputStream resource = JdbcUtils.class.getClassLoader().getResourceAsStream("druid.properties");
//加载配置文件
properties.load(resource);
//根据Druid提供的DruidDataSourceFactory创建对应的DataSource对象
dataSource = DruidDataSourceFactory.createDataSource(properties);
} catch (Exception e) {
e.printStackTrace();
}
}
//4、提供获取连接的方法
public static Connection getConnection() {
Connection connection = null;
try {
connection = dataSource.getConnection();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
return connection;
}
}
//5、导入commons-dbUtils.jar包,使用dbUtils操作数据库
// 创建抽象BaseDao类,提供通用的增删改查功能,使其子类具有通用的增删改查功能,来扩展子类具体要实现的功能
abstract class BaseDao{
//使用QueryRunner操作数据库
private final QueryRunner queryRunner = new QueryRunner();
/**
* @Description 用来执行insert/update/delete语句
* @param sql 要执行的sql语句
* @param args sql对应占位符的参数值
* @return int 返回-1表示失败,其他表示影响行数
*/
public int upDate(String sql,Object ... args){
Connection connection = JdbcUtils.getConnection();
try {
return queryRunner.update(connection,sql,args);
} catch (SQLException throwables) {
throwables.printStackTrace();
} finally {
try {
//dbutils已经封装了关闭资源的功能,直接调用即可
DbUtils.close(connection);
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
return -1;
}
/**
* @Description: 查询返回一个结果集为javaBean对象
* @param type: 返回的对象类型
* @param sql: 执行的sql语句
* @param args: sql对应占位符的参数值
* @return: T 返回的类型泛型
*
*/
public <T> T queryForOne(Class<T> type,String sql,Object ... args){
Connection connection = JdbcUtils.getConnection();
try {
return queryRunner.query(connection,sql, new BeanHandler<>(type),args);
} catch (SQLException throwables) {
throwables.printStackTrace();
} finally {
try {
DbUtils.close(connection);
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
return null;
}
/**
* @Description: 查询返回多个javaBean对象
* @param type: 返回的对象类型
* @param sql: 执行的sql语句
* @param args: sql对应占位符的参数值
* @return: java.util.List<T>: 返回的类型泛型
*/
public <T> List<T> queryForList(Class<T> type, String sql, Object ... args){
Connection connection = JdbcUtils.getConnection();
try {
return queryRunner.query(connection,sql,new BeanListHandler<>(type),args);
} catch (SQLException throwables) {
throwables.printStackTrace();
} finally {
try {
DbUtils.close(connection);
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
return null;
}
/**
* @Description: 查询于最大的,最小的,平均的,总和,个数相关的执行返回一行一列的
* @param sql: 执行的sql语句
* @param args: sql对应占位符的参数值
* @return: java.lang.Object
*/
public Object queryForSingleValue(String sql,Object ... args){
Connection connection = JdbcUtils.getConnection();
try {
return queryRunner.query(connection,sql,new ScalarHandler(),args);
} catch (SQLException throwables) {
throwables.printStackTrace();
}finally {
try {
DbUtils.close(connection);
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
return null;
}
}
开发中Jdbc使用步骤
最新推荐文章于 2024-10-06 21:49:48 发布