Hello friend, I'm Ritchie.|

Ritchie里其

园龄:2年6个月粉丝:4关注:7

JDBC(三)

1、BasicDao

Druid+DbUtils的方式仍有不足,sql是固定的,select操作结果集返回类型也是固定的

data access object(数据访问对象),每个表有一个通用的增删改查方法xxxDao,将多个表的xxxDao再封装成一个基础的Dao,就叫basicDao,或者叫baseDao

2、总结

导入jar包

  • mysql-connector-java
  • druid
  • commons-dbutils

**配置properties文件

#驱动加载
driverClassName=com.mysql.jdbc.Driver
#注册驱动
url=jdbc:mysql://127.0.0.1:3306/db_name?characterEncoding=utf-8
#连接数据库的用户名
username=root
#连接数据库的密码
password=1234
#初始化时池中建立的物理连接个数。
initialSize=2
#最大的可活跃的连接池数量
maxActive=30
#获取连接时最大等待时间,单位毫秒,超过连接就会失效。配置了maxWait之后,缺省启用公平锁,并发效率会有所下降, 如果需要可以通过配置useUnfairLock属性为true使用非公平锁。
maxWait=60000

注:参数后面不要有空格!不要有空格!

最终的工具类JdbcUtils

public class JdbcUtils {
// 1、导入druid.jar包
// 2、在druid.properties文件中编写好配置
private static DataSource dataSource;
// 3、静态代码块在类加载时执行,且只执行一次
static {
// 创建properties对象,读取配置
Properties properties = new Properties();
try {
// Class.getResourceAsStream(String path) : path 不以’/'开头时默认是从此类所在的包下取资源,以’/'开头则是从ClassPath根下获取。其只是通过path构造一个绝对路径,最终还是由ClassLoader获取资源。
// properties.load(new FileInputStream("D:\\Users\\Documents\\eclipse-workspace\\bookmanage\\src\\druid.properties"));
properties.load(JdbcUtils.class.getResourceAsStream("/druid.properties"));
// 创建Druid连接池
dataSource = DruidDataSourceFactory.createDataSource(properties);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 从数据库连接池中获取连接
* @return
* @throws SQLException
*/
public static Connection getConnection() throws SQLException {
return dataSource.getConnection();
}
/**
* close是把connection连接对象放回到连接池中
* @param connection
* @param statement
* @param resultSet
*/
// public static void closeResource(Connection connection, Statement statement, ResultSet resultSet) {
// DbUtils.closeQuietly(connection);
// DbUtils.closeQuietly(statement);
// DbUtils.closeQuietly(resultSet);
// }
/**
* 关闭连接
* @param connection
*/
public static void close() {
DbUtils.closeQuietly(connection);
}
}

所有DAO的父类BaseDao

public abstract class BaseDao<T> {
private QueryRunner queryRunner = new QueryRunner();
/**
* 通用增删改方法
*
* @param sql
* @param params
* @return
*/
public int update(Connection connection, String sql, Object... params) {
try {
int update = queryRunner.update(connection, sql, params);
return update;
} catch (SQLException e) {
// 这里将编译异常转换为运行异常,抛出。调用者可以捕获也可以不捕获,采用默认的处理方式
throw new RuntimeException(e);
}
}
/**
* 通用的查询方法,返回多行
*
* @param sql
* @param clz
* @param params
* @return
*/
public List<T> getList(Connection connection, String sql, Class<T> clz, Object... params) {
try {
List<T> list = queryRunner.query(connection, sql, new BeanListHandler<T>(clz), params);
return list;
} catch (SQLException e) {
// 这里将编译异常转换为运行异常,抛出。调用者可以捕获也可以不捕获,采用默认的处理方式
throw new RuntimeException(e);
}
}
/**
* 通用的查询方法,返回单行
*
* @param sql
* @param clz
* @param params
* @return
*/
public T getOne(Connection connection, String sql, Class<T> clz, Object... params) {
try {
T t = queryRunner.query(connection, sql, new BeanHandler<T>(clz), params);
return t;
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
/**
* 通用的查询方法,返回单行单列(即单值)
* * @param sql
* @param params
* @return
*/
@SuppressWarnings({"unchecked", "rawtypes"})
public Object getScalar(Connection connection, String sql, Object... params) {
try {
return queryRunner.query(connection, sql, new ScalarHandler(), params);
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
}

本文作者:Ritchie里其

本文链接:https://www.cnblogs.com/wang-zeyu/p/16884330.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   Ritchie里其  阅读(23)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
✨欢迎你~🍻
评论
收藏
关注
推荐
深色
回顶
收起
  1. 1 遥か Aimer
遥か - Aimer
00:00 / 00:00
An audio error has occurred.

作词 : aimerrhythm/田中ユウスケ

作曲 : 田中ユウスケ

编曲 : 玉井健二/百田留衣

海岸線の雨に ちらばった君の影

思い出が交差する 海辺の街

君はあの日のまま いまも夢を見てた

君はあの日のまま いまも夢を見てた

遥か記憶の空 2人照らす光

遥か記憶の空 2人照らす光

膝までの浅瀬で 見つけた星

君まで届くなんてさ ありえないような

浅い眠りの中で 深い夢から覚めて

浅い眠りの中で 深い夢から覚めて

裸足のまま駆けてく まばゆい星

君はあの日のまま どんな夢を見てた?

君はあの日のまま どんな夢を見てた?

遥か記憶の空 2人照らす光

遥か記憶の空 2人照らす光

いつまでもこうして 笑っててほしい

夜空に舞い上がる 幾千の花びら

でたらめな誓いで 生きてく日々

君から届くなんてさ ありえないような