DBUTils框架

 

一、DBUTils介绍apache

      DBUtils是java编程中的数据库操作实用工具,小巧简单实用。

  DBUtils封装了对JDBC的操作,简化了JDBC操作。可以少写代码。

  1.对于数据表的读操作,他可以把结果转换成List,Array,Set等java集合,便于程序员操作;

  2.对于数据表的写操作,也变得很简单(只需写sql语句)

  3.可以使用数据源,使用JNDI,数据库连接池等技术来优化性能--重用已经构建好的数据库连接对象

二、DBUtils的三个核心对象

  > QueryRunner类

  > ResultSetHandler接口

  > DBUtils类

  QueryRunner

    QueryRunner中提供对sql语句操作的API.

      它主要有三个方法:

        query() 用于执行select

        update() 用于执行insert update delete

        batch() 批处理

  ResultSetHandler接口

    用于定义select操作后,怎样封装结果集.

  DbUtils

    它就是一个工具类,定义了关闭资源与事务处理的方法

三、DBUtils快速入门

  > 导入jar包               

  > 创建QueryRunner对象

  > 使用query方法执行select语句

  > 使用ResultSetHandler封装结果集

  > 使用DbUtils类释放资源

  Dbutils快速入门实现步骤:

              创建数据库及表

  第一步:导入jar包

  注意: c3p0与mysql驱动jar也要导入。

  //创建QueryRunner对象

  //使用query方法执行select语句

  //使用ResultSetHandler封装结果集

  //使用DbUtils类释放资源

四、QueryRunner对象

  1.1 构造函数:

    > new QueryRunner(); 它的事务可以手动控制。

      也就是说此对象调用的方法(如:query、update、batrch)参数中要有Connection对象。

    > new QueryRunner(DataSource ds); 它的事务是自动控制的。一个sql一个事务。
                 此对象调用的方法(如:query、update、batrch)参数中无需Connection对象。

                 oracle的时候加boolean pmdKnownBroken参数

  1.2 方法

<T> T

query(String sql, ResultSetHandler<T> rsh, Object... params)

<T> T

query(Connection conn, String sql, ResultSetHandler<T> rsh, Object... params)

 int

update(String sql, Object... params)

int

update(Connection conn, String sql, Object... params)

 int[]

batch(Connection conn, String sql, Object[][] params) 

 int[]

batch(String sql, Object[][] params)

 

五、ResultSetHandler接口

  实现的处理器

  //ArrayHandler:适合取1条记录。把该条记录的每列值封装到一个数组中Object[]

  //ArrayListHandler:适合取多条记录。把每条记录的每列值封装到一个数组中Object[],把数组封装到一个List中

  //ColumnListHandler:取某一列的数据。封装到List中。

  //KeyedHandler:取多条记录,每一条记录封装到一个Map中,再把这个Map封装到另外一个Map中,key为指定的字段值。

  //MapHandler:适合取1条记录。把当前记录的列名和列值放到一个Map中

  //MapListHandler:适合取多条记录。把每条记录封装到一个Map中,再把Map封装到List中

  //ScalarHandler:适合取单行单列数据

  //BeanHandler

  //BeanListHandler

 

 七、ThreadLocal

  模拟ThreadLocal的设计,让大家明白他的作用。

  public class ThreadLocal{

    private Map<Runnable,Object> container = new HashMap<Runnable,Object>();

    public void set(Object value){

      container.put(Thread.currentThread(),value);//用当前线程作为key

    }

    public Object get(){

      return container.get(Thread.currentThread());

    }

    public void remove(){

      container.remove(Thread.currentThread());

    }

  }

总结:调用该类的get方法,永远返回当前线程放入的数据。线程局部变量。

 

 

原文地址:https://www.cnblogs.com/soficircle/p/6921360.html