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

一、为什么要使用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  */
时间: 2024-08-10 06:36:37

【Java EE 学习第16天】【dbutils的使用方法】的相关文章

【Java EE 学习第16天】【dbcp数据库连接池】【c3p0数据库连接池】

零.回顾之前使用的动态代理的方式实现的数据库连接池: 代码: 1 package day16.utils; 2 3 import java.io.IOException; 4 import java.lang.reflect.InvocationHandler; 5 import java.lang.reflect.Method; 6 import java.lang.reflect.Proxy; 7 import java.sql.Connection; 8 import java.sql.D

Java EE 学习(5):IDEA + maven + spring 搭建 web(1)

参考:http://www.cnblogs.com/lonelyxmas/p/5397422.html http://www.ctolib.com/docs-IntelliJ-IDEA-c--159047.html 孔老师的<SpringMVC视频教程> 记录: 本节主要完成 使用 maven 管理 spring + 项目 包,搭建 maven+spring 的 web 项目平台. 前提: 已安装并配置好 - Intellij IDEA 16.3.5 Ultimate - JDK 1.8.0_

Java EE学习——Quartz的Cron表达式

经历过低谷后,还是要好好学习,越失落会越来越落后. 今天写一下Cron表达式的用法,虽然是之前自己写的,也过了挺长一段时间,这次就拿出来作为回顾吧. Cron表达式是Quartz的精髓(个人觉得),比如我们想设定淘宝“秒杀”的那一秒时间,完全可以用下面的方法设置执行时间. Calendar cal = Calendar.getInstance(); //设置将要发生的时间... cal.set(Calendar.DATE, xxx); //.......常规的生成scheduler和job //

Java EE学习--Quartz基本用法

新浪博客完全不适合写技术类文章.本来是想找一个技术性的博客发发自己最近学的东西,发现博客园起源于咱江苏,一个非常质朴的网站,行,咱要养成好习惯,以后没事多总结总结经验吧.很多时候都在网上搜索别人的总结,我自己也总结些东西,或许多多少少能帮得上别人. 首先提到的是Quartz,一个开源的定期执行计划任务的框架.其实我内心好奇这个框架很久了,像那些能定时修改数据库数据,定时分配任务的功能一直觉得很神奇.心动不如行动,今天我就小小的学习了一下用法,力求言简意赅,大家都懂的我就不说了. 第一步:下载Qu

Java EE 学习(7):IDEA + maven + spring 搭建 web(3)- 配置数据库

参考: https://my.oschina.net/gaussik/blog/513444 注:在阅读本文前,请先阅读: Java EE 学习(5):IDEA + maven + spring 搭建 web(1) Java EE 学习(6):IDEA + maven + spring 搭建 web(2) 5 数据库配置 下面,就要通过一个简单的例子,来介绍 SpringMVC 如何集成 Spring Data JPA(由 Hibernate JPA 提供),来进行强大的数据库访问,并通过本章节

JAVA EE 学习笔记[V1 jsp编程]

在三月初学校开设了javaee的课程,也就此展开了对javaee基础的学习.然后老师也对这次的课程有一定要求.前面的基础就为最终的作业做准备啦~ 在上学期我们学习了java相关知识,也对java se 的安装使用有了一定的认知,而java ee则是构建于java se 平台之上的一套多层的,可扩展的的网络应用. 学习java ee我们首先进行环境的搭建.无非就是使用 tomcat进行服务器的搭建和jdk环境变量配置.而IDE这方面我们选择myeclipse 2016 CI(这个编译器自带tomc

Java EE 学习(8):IDEA + maven + spring 搭建 web(4)- 用户管理

转载:Gaussic(一个致力于AI研究却不得不兼顾项目的研究生) 注:在阅读本文前,请先阅读: Java EE 学习(5):IDEA + maven + spring 搭建 web(1) ava EE 学习(6):IDEA + maven + spring 搭建 web(2)- 配置 Spring Java EE 学习(7):IDEA + maven + spring 搭建 web(3)- 配置数据库 记录: 通过对用户表的管理,更加深入地讲解SpringMVC的操作. 6 用户管理 既然我们

Java EE 学习(9):IDEA + maven + spring 搭建 web(5)- 博客文章管理

转载:Gaussic(一个致力于AI研究却不得不兼顾项目的研究生) . 注:在阅读本文前,请先阅读: Java EE 学习(5):IDEA + maven + spring 搭建 web(1) Java EE 学习(6):IDEA + maven + spring 搭建 web(2)- 配置 Spring Java EE 学习(7):IDEA + maven + spring 搭建 web(3)- 配置数据库 Java EE 学习(8):IDEA + maven + spring 搭建 web(

Java EE学习之旅1——HeadFirstJavaEE

因为找到的实习是用Java开发的公司,所以来学习一下Java EE的知识. 首先找来了书<轻量级Java EE企业应用实战>. 啊不得不说学了Java之后直接看这个还是完全不行呢,好多名词看都没有看过啊哈哈. 首先来看看都些啥看不懂的词... 1.JSP.Servlet和JavaBean JSP和Servlet都是用在表现层的东西,而实质上JSP编译成Servlet才运行. 但Servlet开发成本太大,所以用JSP. JavaBean用来通信交换表现层和底层数据. 2.MVC和Struts