BaseDao接口设计
1 import java.util.List; 2 3 4 /** 5 * Dao接口,定义Dao基本操作 由BaseDaoImpl实现 6 * @author wht 7 * @param <T> 实际操作的泛型类型 8 */ 9 public interface BaseDao<T> { 10 11 /** 12 * 执行insert操作 返回插入后的id 13 * @param sql 待执行的sql语句 14 * @param params 填充占位符的可变参数 15 * @return 插入新记录的id 16 */ 17 long insert(String sql, Object ... params); 18 19 /** 20 * 执行update操作 包括insert delete update 21 * @param sql 待执行的sql语句 22 * @param params 填充占位符的可变参数 23 */ 24 void update(String sql, Object ... params); 25 26 /** 27 * 执行多条语句的查询 返回与记录对应的类的list 28 * @param sql 待执行的sql语句 29 * @param params 填充占位符的可变参数 30 * @return 与记录对应的类的list 31 */ 32 List<T> queryForList(String sql, Object ... params); 33 34 /** 35 * 执行单挑记录的查询 返回一个与记录对应的类的一个对象 36 * @param sql 37 * @param params 38 * @return 39 */ 40 T query(String sql,Object ...params); 41 42 /** 43 * 执行批量更新操作 44 * @param sql 45 * @param params 46 */ 47 void batch(String sql, Object[]... params); 48 49 /** 50 * 执行一个属性或值的查询操作, 例如查询某一条记录的一个字段, 或查询某个统计信息, 返回要查询的值 51 * @param sql 52 * @param params 53 * @return 54 */ 55 <V> V getSingleVal(String sql, Object ... params); 56 }
BaseDaoImpl实现
1 import cn.wht.test.Utils.JdbcUtils; 2 import cn.wht.test.dao.BaseDao; 3 4 public class BaseDaoImpl<T> implements BaseDao<T> { 5 6 Class<T> clazz; 7 BaseDaoImpl(){ 8 ParameterizedType parameterizedType=(ParameterizedType) this.getClass().getGenericSuperclass(); 9 clazz= (Class<T>) parameterizedType.getActualTypeArguments()[0]; 10 System.out.println(clazz); 11 } 12 private QueryRunner queryRunner=new QueryRunner(); 13 @Override 14 public long insert(String sql, Object... params) { 15 16 Connection connection=JdbcUtils.getConnection(); 17 PreparedStatement preparedStatement=null; 18 ResultSet resultSet=null; 19 20 long id=0; 21 try { 22 preparedStatement=connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS); 23 if(params!=null){ 24 for(int i=0;i<params.length;i++){ 25 preparedStatement.setObject(i+1, params[i]); 26 } 27 } 28 preparedStatement.execute(); 29 resultSet=preparedStatement.getGeneratedKeys(); 30 if(resultSet.next()){ 31 id=resultSet.getLong(1); 32 } 33 34 } catch (SQLException e) { 35 e.printStackTrace(); 36 }finally{ 37 JdbcUtils.release(preparedStatement, resultSet); 38 JdbcUtils.release(connection); 39 } 40 41 return id; 42 } 43 44 @Override 45 public void update(String sql, Object... params) { 46 47 Connection connection=null; 48 49 50 try { 51 connection=JdbcUtils.getConnection(); 52 queryRunner.update(connection, sql, params); 53 } catch (SQLException e) { 54 e.printStackTrace(); 55 } 56 } 57 58 @Override 59 public List<T> queryForList(String sql, Object... params) { 60 61 Connection connection=null; 62 63 try { 64 connection=JdbcUtils.getConnection(); 65 return (List<T>) queryRunner.query(connection, sql, new BeanListHandler(clazz), params); 66 } catch (SQLException e) { 67 e.printStackTrace(); 68 } 69 return null; 70 } 71 72 @Override 73 public T query(String sql, Object... params) { 74 Connection connection=null; 75 76 try { 77 connection=JdbcUtils.getConnection(); 78 return (T) queryRunner.query(connection, sql, new BeanHandler(clazz), params); 79 } catch (SQLException e) { 80 e.printStackTrace(); 81 } 82 return null; 83 } 84 85 @Override 86 public void batch(String sql, Object[]... params) { 87 Connection connection=null; 88 89 try { 90 connection=JdbcUtils.getConnection(); 91 queryRunner.batch(connection, sql, params); 92 } catch (SQLException e) { 93 e.printStackTrace(); 94 } 95 96 } 97 98 @Override 99 public <V> V getSingleVal(String sql, Object... params) { 100 Connection connection=null; 101 102 try { 103 connection=JdbcUtils.getConnection(); 104 return (V) queryRunner.query(connection, sql, new ScalarHandler(), params); 105 } catch (SQLException e) { 106 e.printStackTrace(); 107 } 108 return null; 109 } 110 111 }
JdbcUtils设计
1 public class JdbcUtils { 2 3 private static DataSource ds=null; 4 5 static{ 6 ds=new ComboPooledDataSource(); 7 } 8 9 public static Connection getConnection(){ 10 11 try { 12 return ds.getConnection(); 13 } catch (SQLException e) { 14 15 e.printStackTrace(); 16 throw new RuntimeException(e); 17 } 18 } 19 20 public static void release(Connection connection){ 21 22 try { 23 if(connection!=null){ 24 connection.close(); 25 } 26 } catch (SQLException e) { 27 // TODO Auto-generated catch block 28 e.printStackTrace(); 29 throw new RuntimeException(e); 30 } 31 } 32 public static void release(PreparedStatement preparedStatement,ResultSet resultSet){ 33 try { 34 if(preparedStatement!=null){ 35 preparedStatement.close(); 36 } 37 } catch (SQLException e) { 38 // TODO Auto-generated catch block 39 e.printStackTrace(); 40 } 41 42 43 try { 44 if(resultSet!=null){ 45 resultSet.close(); 46 } 47 } catch (SQLException e) { 48 // TODO Auto-generated catch block 49 e.printStackTrace(); 50 throw new RuntimeException(e); 51 } 52 53 } 54 55 }