综合之前学习过的知识,在这里创建一个BaseDAO<T>类借助DBUtils工具类实现数据操作功能:
package com.atguigu.jdbc; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import java.sql.Connection; import java.sql.SQLException; 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 org.apache.commons.dbutils.handlers.ScalarHandler; public class BaseDAO<T>{ protected Class<T> clazz; // T泛型究竟是什么类型, 用类模板对象来描述 protected QueryRunner qr = new QueryRunner(); // 用于执行通用查询和更新的工具类对象 protected Connection connection; // 数据库连接 protected String tableName; // 涉及到的表,需要通过构造器初始化赋值 public JdbcDAO(String tableName) { // 以下代码的执行者是子类对象,所以this.getClass是获取子类��类模板对象 Type type = this.getClass().getGenericSuperclass(); // JdbcDAO<Teacher> if (type instanceof ParameterizedType) { ParameterizedType parameterizedType = (ParameterizedType)type;//JdbcDAO<Teacher> Type[] types = parameterizedType.getActualTypeArguments(); clazz = (Class<T>)types[0]; } else { clazz = (Class<T>)Object.class; } // 获取一个连接供所有方法使用 try { connection = JdbcUtil.getConnection(); } catch (SQLException e) { e.printStackTrace(); } this.tableName = tableName; } //获得记录中具体的一个数据 public Object getValue(String sql, Object... values) { try { return qr.query(connection, sql, new ScalarHandler(), values); } catch (SQLException e) { e.printStackTrace(); } return null; } //获得一行数据并封装成javabean对象 public T get(String sql, Object... values) { try { return qr.query(connection, sql, new BeanHandler<T>(clazz), values); } catch (SQLException e) { e.printStackTrace(); } return null; } //获得多行记录,封装成javabean对象,保存在list集合中 public List<T> getList(String sql, Object... values) { try { return qr.query(connection, sql, new BeanListHandler<T>(clazz), values); } catch (SQLException e) { e.printStackTrace(); } return null; } //获得所有记录,封装成javabean对象,保存在list集合中 public List<T> getAll() { return getList("select * from " + tableName); } //根据id获取某一条记录,并封装成javabean对象返回 public T getById(int id) { return get("select * from " + tableName + " where id = ?", id); } //根据id删除某一条记录,删除成功返回ture,失败返回false public boolean deleteById(int id) { int rows = update("delete from " + tableName + " where id = ?", id); if (rows > 0) { return true; } return false; } //通用的更新操作 public int update(String sql, Object... values) { try { return qr.update(connection, sql, values); } catch (SQLException e) { e.printStackTrace(); } return 0; } //关闭连接 public void close() { JdbcUtil.close(connection); } }数据连接池的使用(5)
内容版权声明:除非注明,否则皆为本站原创文章。
转载注明出处:https://www.heiqu.com/1035a6ff680236d6cc1995d41c6acee1.html