zoukankan      html  css  js  c++  java
  • 【转载】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 }  
  • 相关阅读:
    Storyboard里面的几种Segue区别和视图的切换
    2014年12月英语单词
    测试和调试的区别
    黑苹果安装教程(一)
    IOS基础——IOS学习路线图(一)
    遇到Wampserver遇到的问题
    产生不重复的数字
    简单的布局
    2014年8月
    算法小全
  • 原文地址:https://www.cnblogs.com/tengqiuyu/p/7448445.html
Copyright © 2011-2022 走看看