DBUtils的使用

DBUtils的使用


1, 准备工作,需要引入外库依赖包,commons-dbutils-1.7.jar(或者其他版本也可以)

这里写图片描述

2, 创建一个JavaBean对象,其相关内容如下:

JavaBean 是在编写 Java 时专门创建的 Java 类,根据 JavaBean API 规范进行编码 。 以下是区分

JavaBean 和其他 Java 类的特有的特征:
 1. 它提供了一个默认的无参数构造函数。
 2. 它应该是可序列化的,实现 serializable 接口。
 3. 它可能有大量可以读或写的属性。
它可能有大量“getter”和“setter”方法的属性。
JavaBean 属性

JavaBean 属性是一个命名属性,这个属性是用户可以访问的对象。属性可以是任何 Java 数据类型,包括自定义的类。
JavaBean 属性可以读、写、只读或只写。JavaBean 属性是在 JavaBean 实现类中通过两种方法访问的:
方法 描述
getPropertyName() 例如,如果属性名称是 firstName,你的方法名称应该是 getFirstName(),它可以读该属性。该方法叫做访问器。
setPropertyName() 例如,如果属性名称是 firstName,你的方法名称应该是 setFirstName(),它可以写该属性。该方法叫做赋值方法。
一个只读属性只会有一个 getPropertyName() 方法,而一个只写属性将只有一个 setPropertyName() 方法。

JavaBeans 例子

考虑一个带有一些属性的 student 类:

package com.tutorialspoint;
public class StudentsBean implements java.io.Serializable
{
   private String firstName = null;
   private String lastName = null;
   private int age = 0;
   public StudentsBean() {
   }
   public String getFirstName(){
      return firstName;
   }
   public String getLastName(){
      return lastName;
   }
   public int getAge(){
      return age;
   }
   public void setFirstName(String firstName){
      this.firstName = firstName;
   }
   public void setLastName(String lastName){
      this.lastName = lastName;
   }
   public void setAge(Integer age){
      this.age = age;
   }
}

了解以上内容,即可按照数据库的logininfo表中的字段进行映射到javabean对象User中的私有属性中去。
这里写图片描述

代码如下:

package com.sc1230.JDBC.JavaBean;

@SuppressWarnings("serial")
public class User implements java.io.Serializable {
    public User() { //必须要提供一个空构造
    }

    private int uid;
    private String username;
    private String upassword;
    private String addTime;
    private String notifion;

    public int getUid() {
        return uid;
    }
    public void setUid(int uid) {
        this.uid = uid;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getUpassword() {
        return upassword;
    }
    public void setUpassword(String upassword) {
        this.upassword = upassword;
    }
    public String getAddTime() {
        return addTime;
    }
    public void setAddTime(String addTime) {
        this.addTime = addTime;
    }
    public String getNotifion() {
        return notifion;
    }
    public void setNotifion(String notifion) {
        this.notifion = notifion;
    }
    public Object[] getBeaninfo() {
        Object[] objects = new Object[]{uid,username,upassword,addTime,notifion};
        return objects;
    }
}

有了以上的基础后,即可直接使用DBUtils组件,对数据库进行操作;
具体的分析详看代码中的注解,代码如下:

/**
*此段代码通过jdpc获取一个连接池,并提供数据源对象(dataSource)
*
*/
package com.sc1230.JDBC.BDUtils;

import java.io.FileInputStream;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;
import javax.sql.DataSource;
import org.apache.commons.dbcp2.BasicDataSourceFactory;

public class DBDbcp {
    private static DataSource dataSource;
    static
    {
        try {

             InputStream is = new FileInputStream("config/db1.properties");
             Properties prop = new Properties();
            prop.load(is);
            dataSource = BasicDataSourceFactory.createDataSource(prop);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
    //获取数据源
    public static DataSource getDataSource() {
        return dataSource;

    }
    //获取连接,不过这里用不上
    public static Connection getConnection() throws SQLException {
        return dataSource.getConnection();
    }
}

此段代码即是具体的实现

package com.sc1230.JDBC.TestJDBC;

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

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.ArrayListHandler;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.KeyedHandler;
import org.apache.commons.dbutils.handlers.MapListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import org.junit.Test;

import com.sc1230.JDBC.BDUtils.DBDbcp;
import com.sc1230.JDBC.JavaBean.User;

public class TestDBUtils {

    /**
     * 以下三个都是测试DBUtils组件的update方法对数据库的内容进行维护
     * 其的用法非常的单一和简单,故不再对其进行赘述;
     */

    @Test
    public void testDBUtilsInsert()
    {
//      1,通过数据源来获取封装好的组件对象
        QueryRunner qr = new QueryRunner(DBDbcp.getDataSource());
        String sql = "insert into loginInfo values(?,?,?,?,?)";
        Object[] params = {null,"dzh","dzh",null,"HELLO,WORLD"};
        try {
            qr.update(sql,params);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    @Test
    public void testDBUtilsDeleteById()
    {
//      1,通过数据源来获取封装好的组件对象
        QueryRunner qr = new QueryRunner(DBDbcp.getDataSource());
        String sql = "delete from loginInfo where uid = ?";
        //Object[] params = {11};

        try {
            qr.update(sql,11);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    @Test
    public void testDBUtilsUpdateById()
    {
//      1,通过数据源来获取封装好的组件对象
        QueryRunner qr = new QueryRunner(DBDbcp.getDataSource());
        String sql = "update loginInfo set upassword = ? where uid = ?";
        Object[] params = {"lzd1",3};

        try {
            qr.update(sql,params);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    /**
     * 测试DBUtils组件中的BeanHandler
     * 这个用法相当的使用,也是我们必须要掌握的一种方法
     * 其中使用到了javaBean组件,所以也要要求了解掌握JavaBean的基本概念
     */
    @Test
    public void testDBUtilsQueryById()
    {
//      1,通过数据源来获取封装好的组件对象
        QueryRunner qr = new QueryRunner(DBDbcp.getDataSource());
        String sql = "select * from loginInfo   where uid = ?";
        Object[] params = {3};
        try {
            User user = qr.query(sql,new BeanHandler<User>(User.class),params);
            System.out.println(Arrays.toString(user.getBeaninfo()));
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    /**
     * 测试DBUtils组件中的BeanListHandler
     * 这个用法相当的使用,也是我们必须要掌握的一种方法
     * 其中使用到了javaBean组件,所以也要要求了解掌握JavaBean的基本概念
     * 其与BeanHandler的区别在于BeanListHandler用了List对BeanHandler进行了包装
     */
    @Test
    public void testDBUtilsAllQuery()
    {
        QueryRunner qr = new QueryRunner(DBDbcp.getDataSource());
        String sql = "select * from loginInfo";
        Object[] params = {};
        try {
            List<User> users = qr.query(sql,new BeanListHandler<User>(User.class),params);
            for (User user : users) {
                System.out.println(Arrays.toString(user.getBeaninfo()));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    /**
     * 测试DBUtils组件中的ArrayListHander
     * 其与ArrayHander的区别在于ArrayListHander用了List对ArrayHander进行了包装
     * 具体用法很简单,不在赘述;
     */

    @Test
    public void testDBUtilsAllQueryByArrayListHander()
    {
        QueryRunner qr = new QueryRunner(DBDbcp.getDataSource());
        String sql = "select * from loginInfo where uid = ?";
        Object[] params = {9};
        try {
            List<Object[]> users = qr.query(sql,new ArrayListHandler(),params);
            for (Object[] user : users) {
                System.out.println(Arrays.toString(user));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    /**
     * 测试DBUtils组件中的KeyedHander
     * 通过两层的Map对结果进行包装,了解即可,不在赘述
     */

    @Test
    public void testDBUtilsAllQueryByKeyedHander()
    {
//      1,通过数据源来获取封装好的组件对象
        QueryRunner qr = new QueryRunner(DBDbcp.getDataSource());
        String sql = "select * from loginInfo";
        Object[] params = {};
        try {
            Map<Object, Map<String, Object>> users = qr.query(sql,new KeyedHandler<>(),params);
            System.out.println(users);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    /**
     * 测试DBUtils组件中的MapListHander
     * 其与MapHander的区别在于MapListHander用了List对MapHander进行了baozhuang
     * 具体用法很简单,不在赘述;
     */

    @Test
    public void testDBUtilsAllQueryMapListHander()
    {

        QueryRunner qr = new QueryRunner(DBDbcp.getDataSource());
        String sql = "select * from loginInfo";
        Object[] params = {};
        try {
            List<Map<String, Object>> users = qr.query(sql,new MapListHandler(),params);
            System.out.println(users);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }


    /**
     * 测试DBUtils组件中的ScalarHander处理数据库的单数据
     * 例如String sql = "select count(*) from loginInfo";
     * 返回值是long类型的
     */

    @Test
    public void testDBUtilsGetCounts()
    {
//      
        QueryRunner qr = new QueryRunner(DBDbcp.getDataSource());
        String sql = "select count(*) from loginInfo";
        Object[] params = {};
        try {
            long count = qr.query(sql,new ScalarHandler<>(),params); //注意,这里返回值是long类型的
            System.out.println(count);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值