【转载】BaseDao设计

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 }  

 

posted @ 2017-08-29 15:25  滕秋宇  阅读(233)  评论(0编辑  收藏  举报