数据库开源框架DButils

数据库开源框架DBUtils的用法

简介

Commons DbUtils是Apache组织提供的一个对JDBC进行简单封装的开源工具类库,使用它能够简化JDBC应用程序的开发,同时也不会影响程序的性能。

QueryRunner类: 
该类简化了SQL查询,它与ResultHandler接口一起使用可以完成大部分的数据库操作。能够大大减少编码量。 

该类提供了两个构造方法: 
1、不带参的构造方法 
2、需要一个javax.sql.DataSource来作为参数的构造函数,使用这个构造函数实例化QueryRunner对象后,它会从连接池中获取Connection

一:Dbutils是什么?(当我们很难理解一个东西的官方解释的时候,就让我们记住它的作用)
     Dbutils:主要是封装了JDBC的代码,简化dao层的操作。
     作用:帮助java程序员,开发Dao层代码的简单框架。
          框架的作用:帮助程序员,提高程序的开发效率。
     出生:Dbutils是由Apache公司提供。
 
二:为什么需要Dbutils ?
     在使用Dbutils 之前,我们Dao层使用的技术是JDBC,那么分析一下JDBC的弊端:
          (1)数据库链接对象、sql语句操作对象,封装结果集对象,这三大对象会重复定义
          (2)封装数据的代码重复,而且操作复杂,代码量大
          (3)释放资源的代码重复
               结果:(1)程序员在开发的时候,有大量的重复劳动。(2)开发的周期长,效率低
 
三:Dbutils三个核心类介绍:
     1:DbUtils:连接数据库对象----jdbc辅助方法的集合类,线程安全
          构造方法:DbUtils()
          作用:控制连接,控制书屋,控制驱动加载额一个类。
     
     2:QueryRunner:SQL语句的操作对象,可以设置查询结果集的封装策略,线程安全。
          构造方法:
          (1)QueryRunner():创建一个与数据库无关的QueryRunner对象,后期再操作数据库的会后,需要手动给一个Connection对象,它可以手动控制事务。
                    Connection.setAutoCommit(false);     设置手动管理事务
                    Connection.commit();     提交事务
 
          (2)QueryRunner(DataSource ds):创建一个与数据库关联的queryRunner对象,后期再操作数据库的时候,不需要Connection对象,自动管理事务。
                    DataSource:数据库连接池对象。

执行步骤

1.加载JDBC驱动程序类,并用DriverManager来得到一个数据库连接conn。
2.实例化 QueryRunner,得到实例化对象qRunner。
3. qRunner.update()方法,执行增改删的sql命令,
    qRunner.query()方法,得到结果集。

1.DBUtils的jar包

2.<!-- default-config 默认的配置,  -->

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>

	<!-- default-config 默认的配置,  -->
  <default-config>
    <property name="driverClass">com.mysql.jdbc.Driver</property>
    <property name="jdbcUrl">jdbc:mysql://localhost/bank</property>
    <property name="user">root</property>
    <property name="password">123456</property>
    
    
    <property name="initialPoolSize">10</property>
    <property name="maxIdleTime">30</property>
    <property name="maxPoolSize">100</property>
    <property name="minPoolSize">10</property>
    <property name="maxStatements">200</property>
  </default-config>
  
   <!-- This app is massive! -->
  <named-config name="oracle"> 
    <property name="acquireIncrement">50</property>
    <property name="initialPoolSize">100</property>
    <property name="minPoolSize">50</property>
    <property name="maxPoolSize">1000</property>

    <!-- intergalactoApp adopts a different approach to configuring statement caching -->
    <property name="maxStatements">0</property> 
    <property name="maxStatementsPerConnection">5</property>

    <!-- he's important, but there's only one of him -->
    <user-overrides user="master-of-the-universe"> 
      <property name="acquireIncrement">1</property>
      <property name="initialPoolSize">1</property>
      <property name="minPoolSize">1</property>
      <property name="maxPoolSize">5</property>
      <property name="maxStatementsPerConnection">50</property>
    </user-overrides>
  </named-config>

 
</c3p0-config>
	

默认文件名c3p-config.xml  系统默认执行 无需自动连接

数据库版本在4及以上可以不用启动,底层系统自动启动 

 

配置好 可以直接写 只需俩行代码即可实现

package com.itheima.uitl;

import java.sql.SQLException;
import java.util.List;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.junit.Test;

import com.itheima.domain.Account;
import com.mchange.v2.c3p0.ComboPooledDataSource;

public class TestDemo {

	@Test
	public void test() throws SQLException{
		QueryRunner qRunner=new QueryRunner(new ComboPooledDataSource() );
		//插入
		qRunner.update("insert into account values (28,?,?)","eee",2220);
		//删除
		qRunner.update("delete  from account where id=?",28);
		//修改
		qRunner.update("update account set money =? where id=?",60000,4);
		//单个查询
		Account account1 = qRunner.query("select * from account where id=?",new BeanHandler<Account>(Account.class),4);
		System.out.println(account1);
		//多个查询
		Account query = qRunner.query("select * from account where id=?", new BeanHandler<Account>(Account.class),4);
		System.out.println(query);
		List<Account> list = qRunner.query("select * from account",new BeanListHandler<>(Account.class));
		for (Account account : list) {
			System.out.println(account);
		}
	}
	
	
}

具体配置文件已经上传   DButils模板可以下载  仿写 

    Account query = qRunner.query("select * from account where id=?", new ResultSetHandler<Account>(){

        @Override
        public Account handle(ResultSet rs) throws SQLException {
            // TODO Auto-generated method stub
            return null;
        }},2);
        System.out.println(query);    

总结常用的实现类

ArrayHandler, 查询单个数据封装成一个数组

 

ArrayListHandler, 查询多个数据封装一个集合里面是数组

 

BeanHandler,   查询单个数据封装成一个对象

BeanListHandler, 查询多个数据封装一个集合里面元素是list<对象>

MapHandler, 查询单个数据封装成一个map

 

MapListHandler, 查询多个数据封装一个集合里面元素是map

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值