码迷,mamicode.com
首页 > 数据库 > 详细

【Java EE 学习第16天】【dbutils的使用方法】

时间:2015-07-28 20:46:42      阅读:230      评论:0      收藏:0      [点我收藏+]

标签:

一、为什么要使用dbutils

  使用dbutils可以极大程度的简化代码书写,使得开发进度更快,效率更高

二、dbutils下载地址

  http://commons.apache.org/proper/commons-dbutils/download_dbutils.cgi


 

出现的ds为数据源对象,可以是某个数据库连接池的DataSource,也可以是自定义数据库连接池的DataSource,这里我是用了dbcp数据库连接池。

技术分享
 1 package day16.regular.utils;
 2 
 3 import java.io.IOException;
 4 import java.sql.Connection;
 5 import java.sql.SQLException;
 6 import java.util.Properties;
 7 
 8 import javax.sql.DataSource;
 9 
10 import org.apache.commons.dbcp2.BasicDataSourceFactory;
11 
12 
13 //使用第三方jar包创建dbcp连接池
14 public class DataSourceUtils_DBCP {
15     private DataSourceUtils_DBCP(){}//使用私有修饰构造方法,可以防止创建对象,这样可以确保只有一个DataSource对象
16     private static DataSource ds;
17     static
18     {
19         Properties properties=new Properties();
20         try {
21             properties.load(DataSourceUtils_DBCP.class.getClassLoader().getResourceAsStream("config_dbcp.properties"));
22             ds=BasicDataSourceFactory.createDataSource(properties);
23         } catch (IOException e) {
24             e.printStackTrace();
25         } catch (Exception e) {
26             e.printStackTrace();
27         }
28     }
29     public static Connection getConnection()
30     {
31         Connection conn=null;
32         try {
33             conn=ds.getConnection();
34         } catch (SQLException e) {
35             e.printStackTrace();
36         }
37         return conn;
38     }
39     public static DataSource getDataSource()
40     {
41         return ds;
42     }
43 }
DataSourceUtils_DBCP.java
private static DataSource ds=DataSourceUtils_DBCP.getDataSource();

三、更新操作方法示例(delete语句略)。

public void testInsert()
    {
        QueryRunner run=new QueryRunner(ds);
        String sql="insert into people(id,name,age,sex) values(?,?,?,?)";
        try {
            run.update(sql,"001","小强",12,"男");
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

  使用dbutils可以实现预编译。

四、ArrayListHandler用法(不需掌握)。

public void testSelect_ArrayListHandler() throws SQLException
    {
        QueryRunner run=new QueryRunner(ds);
        String sql="select * from people";
        List<Object[]>arr=run.query(sql,new ArrayListHandler());
        //执行该方法将所有的结果存放到了一个list中,每一行结果保存到一个object数组中
        for(Object obj[]:arr)
        {
            for(Object o:obj)
            {
                System.out.print(o+" ");
            }
            System.out.println();
        }
        /**
         *     001 小强 12 男 
            002 张三 13 男 
            003 李四 14 男 
            004 王五 14 男 
            005 赵六 14 男 
            006 陈七 14 男 
         */
    }

五、BeanHandler和BeanListHandler用法(重点掌握)

  1.BeanHandler:调用QueryRunner的query方法,并提供相应的参数,就可以获取一个已经封装好了的Bean对象(需要实现准备好一个javaBean,字段名要完全匹配)。

public void testSelect_BeanHandler() throws SQLException
    {
        QueryRunner run=new QueryRunner(ds);
        String sql="select * from people";
        People people=run.query(sql,new BeanHandler<People>(People.class));
        //使用该方法能够自动将结果集的第一行封装到一个Bean对象中。
        System.out.println(people);
        /**
         * People [id=001, name=小强, age=12, sex=男]
         */
    }

  2.BeanListHandler:调用QueryRunner的query方法,并提供相应的参数,就可以获取一个List对象,该对象中的每一个元素都是一个javabean对象。

public void testSelect_BeanListHandler() throws SQLException
    {
        QueryRunner run=new QueryRunner(ds);
        String sql="select * from people";
        List<People>list=run.query(sql, new BeanListHandler<People>(People.class));
        for(People people:list)
        {
            System.out.println(people);
        }
        /**
         *     People [id=001, name=小强, age=12, sex=男]
            People [id=002, name=张三, age=13, sex=男]
            People [id=003, name=李四, age=14, sex=男]
            People [id=004, name=王五, age=14, sex=男]
            People [id=005, name=赵六, age=14, sex=男]
            People [id=006, name=陈七, age=14, sex=男]
         */
    }

六、ColumnListHandler:获取某个字段的所有取值,并封装到一个List对象中(不要求掌握)。

public void testSelect_ColumnListHandler() throws SQLException
    {
        QueryRunner run=new QueryRunner(ds);
        String sql="select * from people";
        List<String>list=run.query(sql, new ColumnListHandler<String>("sex"));//不带任何参数的默认查询第一行
        for(String obj:list)
        {
            System.out.println(obj);
        }
        /**
         *     男
            男
            男
            男
            男
            男
         */
    }

七、KeyedHandler:获取一个键值对,键为表的主键,值为一个Map对象,该封装了一行数据的键值对,键是字段名(重点掌握)。

public void testSelect_KeyHandler() throws SQLException
    {
        //该方法不重要,不需要重点掌握
        QueryRunner run=new QueryRunner(ds);
        String sql="select * from people";
        Map<String, Map<String, Object>>map=run.query(sql, new KeyedHandler<String>("id"));
        Iterator<String>it=map.keySet().iterator();
        while(it.hasNext())
        {
            Map<String,Object>m=map.get(it.next());
            System.out.println(m);
        }
    /*    {id=004, name=王五, age=14, sex=男}
        {id=005, name=赵六, age=14, sex=男}
        {id=006, name=陈七, age=14, sex=男}
        {id=001, name=小强, age=12, sex=男}
        {id=002, name=张三, age=13, sex=男}
        {id=003, name=李四, age=14, sex=男}
     */
    }

八、MapHandler:封装第一行数据到一个Map对象(不需要掌握)。

public void testSelect_MapHandler() throws SQLException
    {
        QueryRunner run=new QueryRunner(ds);
        String sql="select * from user";
        Map<String, Object>map=run.query(sql,new MapHandler());
        //该执行结果只封装第一行。
        System.out.println(map);
/*        {id=0001, name=小强, age=12}*/
    }    

九、MapListHandler:封装每一行数据到一个Map,并保存到一个List中。(重点掌握)

public void testSelect_MapListHandler() throws SQLException
    {
        QueryRunner run=new QueryRunner(ds);
        String sql="select * from user";
        List<Map<String,Object>> list=run.query(sql, new MapListHandler());
        /**
         * 该语句的执行结果是将数据库的查询结果存放到List中,其中每一行存放到一个Map对象中。
         */
        for(Map<String,Object> map:list)
        {
            System.out.println(map);
        }
        /*
            {id=0001, name=小强, age=12}
            {id=0002, name=小明, age=13}
        */
    }

十、ScalarHandler:使用聚合函数(如count、sum等)的时候可以使用该方法简化书写(重点掌握)

public void testSelect_ScalarHandler() throws SQLException
    {
        QueryRunner run=new QueryRunner(ds);
        String sql="select count(1) from user";
        Object value=run.query(sql, new ScalarHandler<Object>());
        //ScalarHandler用于执行带有聚合函数的查询,执行count方法的时候比较方便。
        System.out.println(value);
    }
  /*
    2
  */

 

【Java EE 学习第16天】【dbutils的使用方法】

标签:

原文地址:http://www.cnblogs.com/kuangdaoyizhimei/p/4684109.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!