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 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步