zoukankan      html  css  js  c++  java
  • Apache—DBUtils框架

    一、什么是dbutils

    commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用dbutils能极大简化jdbc编码的工作量,同时也不会影响程序的性能。因此dbutils成为很多不喜欢hibernate的公司的首选。

     

    二、dbutils核心API

    1、QueryRunner类

     

    使用QueryRunner实现增删改查

     1 package com.dbutils;
     2 
     3 import java.sql.SQLException;
     4 import java.util.Date;
     5 import java.util.List;
     6 
     7 import org.apache.commons.dbutils.QueryRunner;
     8 import org.apache.commons.dbutils.handlers.BeanHandler;
     9 import org.apache.commons.dbutils.handlers.BeanListHandler;
    10 import org.junit.Test;
    11 
    12 import com.domain.User;
    13 import com.utils.JdbcUtils;
    14 
    15 /**
    16  * 
    17  * 使用dbutils完成数据库的增删改查
    18  * 
    19  */
    20 public class Demo1 {
    21     // 插入
    22     @Test
    23     public void insert() throws SQLException {
    24         QueryRunner runner = new QueryRunner(JdbcUtils.getDataSource());
    25         String sql = "insert into users(id,name,password,email,birthday) values(?,?,?,?,?)";
    26         Object params[] = { 1, "aa", "123", "aaa@sina.com", new Date() };
    27         runner.update(sql, params);
    28     }
    29 
    30     // 删除
    31     @Test
    32     public void delete() throws SQLException {
    33         QueryRunner runner = new QueryRunner(JdbcUtils.getDataSource());
    34         String sql = "delete from users where id=?";
    35         runner.update(sql, 2);
    36     }
    37 
    38     // 修改
    39     @Test
    40     public void update() throws SQLException {
    41         QueryRunner runner = new QueryRunner(JdbcUtils.getDataSource());
    42         String sql = "update users set email=? where id=?";
    43         Object params[] = { "ffd@sina.com", 2 };
    44         runner.update(sql, params);
    45     }
    46 
    47     // 查找单条记录
    48     @Test
    49     public void find() throws SQLException {
    50         QueryRunner runner = new QueryRunner(JdbcUtils.getDataSource());
    51         String sql = "select * from users where id=?";
    52         User user = (User) runner.query(sql, 1, new BeanHandler(User.class));
    53         System.out.println(user.getEmail());
    54     }
    55 
    56     // 查找所有记录
    57     @Test
    58     public void getAll() throws SQLException {
    59         QueryRunner runner = new QueryRunner(JdbcUtils.getDataSource());
    60         String sql = "select * from users";
    61         List<User> list = (List) runner.query(sql, new BeanListHandler(
    62                 User.class));
    63         for (User user : list) {
    64             System.out.println(user.getEmail());
    65         }
    66     }
    67     
    68     // 批处理
    69         @Test
    70         public void batch() throws SQLException {
    71             QueryRunner runner = new QueryRunner(JdbcUtils.getDataSource());
    72             String sql = "insert into users(id,name,password,email,birthday) values(?,?,?,?,?)";
    73             
    74             //三条sql,五个参数
    75             Object params[][] = new Object[3][5];
    76             
    77             for(int i=0;i<params.length;i++){
    78                 params[i] = new Object[]{i+1,"aaa"+i,"123","sina.com",new Date()};
    79             }
    80             
    81             runner.batch(sql, params);
    82         }
    83             
    84 }
     1 public class JdbcUtils {
     2     private static DataSource ds;
     3     static{
     4         try {
     5             Properties prop = new Properties();
     6             InputStream in = JdbcUtils.class.getClassLoader().getResourceAsStream("dbcpconfig.properties");
     7             prop.load(in);
     8             
     9             //创建数据源
    10             BasicDataSourceFactory factory = new BasicDataSourceFactory();
    11             ds = factory.createDataSource(prop);
    12         } catch (Exception e) {
    13             throw new ExceptionInInitializerError(e);
    14         }
    15     }
    16     
    17     //提供数据源
    18     public static DataSource getDataSource(){
    19         return ds;
    20     }
    21     
    22     //获取连接
    23     public static Connection  getConnection() throws SQLException{
    24         return ds.getConnection();
    25     }
    26 }

    2、ResultSetHandler接口的实现类

    ArrayHandler:把结果集中的第一行数据转成对象数组。

    ArrayListHandler:把结果集中的每一行数据都转成一个数组,再存放到List中。

    BeanHandler:将结果集中的第一行数据封装到一个对应的JavaBean实例中。

    BeanListHandler:将结果集中的每一行数据都封装到一个对应的JavaBean实例中,存放到List里。

    ColumnListHandler:将结果集中某一列的数据存放到List中。

    KeyedHandler(name):将结果集中的每一行数据都封装到一个Map里,再把这些map再存到一个map里,其key为指定的key。

    MapHandler:将结果集中的第一行数据封装到一个Map里,key是列名,value就是对应的值。

    MapListHandler:将结果集中的每一行数据都封装到一个Map里,然后再存放到List

      1 package com.dbutils;
      2 import java.sql.SQLException;
      3 import java.util.Arrays;
      4 import java.util.List;
      5 import java.util.Map;
      6 
      7 import javax.swing.JButton;
      8 import org.apache.commons.dbutils.QueryRunner;
      9 import org.apache.commons.dbutils.handlers.ArrayHandler;
     10 import org.apache.commons.dbutils.handlers.ArrayListHandler;
     11 import org.apache.commons.dbutils.handlers.ColumnListHandler;
     12 import org.apache.commons.dbutils.handlers.KeyedHandler;
     13 import org.apache.commons.dbutils.handlers.ScalarHandler;
     14 import org.junit.Test;
     15 
     16 import com.utils.JdbcUtils;
     17 
     18 /**
     19  * 
     20  * dbutils结果集
     21  *
     22  */
     23 public class Demo2 {
     24     @Test
     25     //把结果的第一行数据封装到数组中
     26     public void test1() throws SQLException{
     27         QueryRunner runner = new QueryRunner(JdbcUtils.getDataSource());
     28         String sql = "select * from users";
     29         //强转的时候要加[]
     30         Object result[] = (Object[]) runner.query(sql, new ArrayHandler());
     31         System.out.println(result[0]);
     32         System.out.println(result[1]);
     33     }
     34     
     35     @Test
     36     //把结果的每行数据封装到数组中,在把数据存放在list集合中
     37     public void test2() throws SQLException{
     38         QueryRunner runner = new QueryRunner(JdbcUtils.getDataSource());
     39         String sql = "select * from users";
     40         List<Object[]> list = (List) runner.query(sql, new ArrayListHandler());
     41         System.out.println(list);
     42         for(Object[] objects : list){
     43             System.out.println(Arrays.toString(objects));
     44         }
     45     }
     46     
     47     @Test
     48     //把结果集的某一列封装到一个list集合中
     49     public void test3() throws SQLException{
     50         QueryRunner runner = new QueryRunner(JdbcUtils.getDataSource());
     51         String sql = "select * from users";
     52         
     53         List list1 = (List) runner.query(sql, new ColumnListHandler());
     54         for(Object object : list1){
     55             System.out.println(object);
     56         }
     57         
     58         List list2 = (List) runner.query(sql,new ColumnListHandler("name"));
     59         for(Object object : list2){
     60             System.out.println(object);
     61         }
     62         
     63         List list3 = (List) runner.query(sql,new ColumnListHandler(4));
     64         for(Object object : list3){
     65             System.out.println(object);
     66         }
     67     }
     68     
     69     //KeyedHandler(name):将结果集中的每一行数据都封装到一个Map里,再把这些map再存到一个map里,其key为指定的key
     70     @Test
     71     public void test4() throws SQLException{
     72         QueryRunner runner = new QueryRunner(JdbcUtils.getDataSource());
     73         String sql = "select * from users";
     74         Map<Integer,Map<String,Object>> map = (Map) runner.query(sql, new KeyedHandler("id"));
     75         for(Map.Entry<Integer, Map<String, Object>> me : map.entrySet()){
     76             int key = me.getKey();
     77             
     78             //拿到封装每条记录的map
     79             for(Map.Entry<String, Object> entry:me.getValue().entrySet()){
     80                 System.out.println(entry.getKey()+"="+entry.getValue());
     81             }
     82         }
     83     }
     84     
     85     
     86     @Test
     87     //获取记录总数
     88     public void test5() throws SQLException{
     89         QueryRunner runner = new QueryRunner(JdbcUtils.getDataSource());
     90         String sql = "select count(*) from users";
     91         //Object result[] = (Object[]) runner.query(sql, new ArrayHandler());
     92         /*long totalrecord = (Long)result[0];
     93         int num = (int)totalrecord;
     94         System.out.println(num);
     95         int totalrecord = ((Long)result[0]).intValue();
     96         */
     97         int totalrecord = ((Long)runner.query(sql, new ScalarHandler(1))).intValue();
     98         System.out.println(totalrecord);
     99     }
    100     
    101     
    102 }

     

     

     

  • 相关阅读:
    基于C/S模式的程序更新下载
    拓展方法
    主从级GridView
    using 的用法
    五大数据类型
    redis的主从复制原理及步骤
    redis的发布订阅
    redis的持久化
    redis的事务
    配置文件详解
  • 原文地址:https://www.cnblogs.com/niuchuangfeng/p/9182542.html
Copyright © 2011-2022 走看看