Dbutils工具类的使用

一、什么是Dbutils?

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

  简而言之,Dbutils就是封装了jdbc的代码,简化了jdbc的dao层的操作。

二、Dbutils的使用

A:导入相关的依赖jar包

  • mysql-connector-java-5.1.7-bin.jar
  • commons-dbutils-1.7.jar

B:项目结构

  • StudentDao接口:对Student实体类对象操作的接口,使用接口利于维护
  • StudentDaoImpl:StudentDao接口的实现类,用于写具体的功能实现代码
  • Student类:学生实体类对象,用于封装学生对象的相关属性信息
  • Test类:功能测试类,用于测试功能实现的代码
  • JDBCTools:对于JDBC的初步封装的工具类,用于获取数据库连接以及释放资源等操作
  • db-config.properties文件:用于存储数据库的连接的一些信息,防止硬编码格式,方便更改

 C:使用Dbutils的具体步骤

  a:创建QueryRunner对象 

QueryRunner queryRunner = new QueryRunner();

  b:调用QueryRunner对象的方法执行相关操作,给QueryRunner对象传递参数:connection,sql,具体的策略对象;,条件参数

public void insert(Student student) {
        sql = "insert into student(name,clazz,grade) values(?,?,?)";
        try {
            //JDBCTools.getConnection():数据库连接
            //sql:数据库查询sql语句
            //student.getName():需要的参数,参数与sql中的参数的数量保持一致
            queryRunner.update(JDBCTools.getConnection(),sql,student.getName(),student.getClazz(),student.getGrade());
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
public Student findById(int id) {
        sql = " select * from student where id = ?";
        Student student = null;
        try {
            student = queryRunner.query(JDBCTools.getConnection(),sql,new BeanHandler<Student>(Student.class),id);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return student;
    }

策略对象

  • BeanHandler:把单行的结果集封装成javabean对象,返回值是ResultSetHandler,该方法用于将单行结果集封装成javabean对象,对象是通过反射完成创建的
ResultSetHandler<javabean类型> rsh = new BeanHandler<javabean类型>(javabean.class);
  • BeanListHandler:将多行结果集封装成对象,并将对象添加到list集合中
 List<javaBean类型> list = <List<javaBean类型>> new BeanListHandler<javaBean类型>(javaBean.class);
  • MapHandler:将单行的结果集封装到一个map集合中,map集合中的建是表中的列名称,值对应表的列值。
Map <String,Object> map = new MapHandler();
  • MapListHandler:用于多行结果集的处理,把每行的结果封装成一个map,最后把所有的map都放到一个集合中,返回的是一个list集合,list集合中存放的是map集合。
  List<Map<String,Object>> listmap = new MapListHandler();
  • ColumnHandler:本方法用于互殴去单列,单行或者多行的数据
List<Object> nameList = new ColumnHandler();
  • ScalarHandler:用户处理单行、单列的数据,多用于聚合函数的查询。注意:当聚合函数涉及到数字类型的时候,要注意返回值类型的转换,若使用Integer或者Long类型的时候,容易出现数据无法存储的时候,所以使用Number(这个是所有数字数据类型的父类),对外提供了Number.intValue()和Number.longValue()等方法。
ResultSetHandler resultSetHandler = new ScalarHandler();

C:具体的实现代码

  a:JavaBean对象

package com.dreambamboo.entity;

public class Student {
    private int id;
    private String name;
    private String grade;
    private String clazz;

    public Student(int id, String name, String grade, String clazz) {
        this.id = id;
        this.name = name;
        this.grade = grade;
        this.clazz = clazz;
    }

    public Student() {
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getGrade() {
        return grade;
    }

    public void setGrade(String grade) {
        this.grade = grade;
    }

    public String getClazz() {
        return clazz;
    }

    public void setClazz(String clazz) {
        this.clazz = clazz;
    }

    public Student(String name, String grade, String clazz) {
        this.name = name;
        this.grade = grade;
        this.clazz = clazz;
    }

    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", name=‘" + name + ‘\‘‘ +
                ", grade=‘" + grade + ‘\‘‘ +
                ", clazz=‘" + clazz + ‘\‘‘ +
                ‘}‘;
    }
}

  b:dao接口

package com.dreambamboo.dao;

import com.dreambamboo.entity.Student;

import java.util.List;

public interface StudentDao {
    /**
     * 添加学生信息
     * @param student
     */
    public void insert(Student student);

    /**
     * 更新学生信息
     * @param student
     */
    public void update(Student student);

    /**
     * 删除学生信息
     * @param id
     */
    public void delete(int id);

    /**
     * 根据学生编号查询学生信息
     * @param id
     * @return
     */
    public Student findById(int id);

    /**
     * 查询所有学生信息
     * @return
     */
    public List<Student> findAll();

    /**
     * 查询学生总数
     * @return
     */
    public int studentCount();
}

  c:dao接口实现类

package com.dreambamboo.dao.impl;

import com.dreambamboo.dao.StudentDao;
import com.dreambamboo.entity.Student;
import com.dreambamboo.util.JDBCTools;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;

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

public class StudentDaoImpl implements StudentDao {
    private QueryRunner queryRunner = null;//查询运行器
    public StudentDaoImpl(){
        queryRunner = new QueryRunner();
    }
    String sql = null;
    @Override
    public void insert(Student student) {
        sql = "insert into student(name,clazz,grade) values(?,?,?)";
        try {
            //JDBCTools.getConnection():数据库连接
            //sql:数据库查询sql语句
            //student.getName():需要的参数,参数与sql中的参数的数量保持一致
            queryRunner.update(JDBCTools.getConnection(),sql,student.getName(),student.getClazz(),student.getGrade());
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void update(Student student) {
        sql = " update student set name = ? ,clazz = ?,grade = ? where id = ?";
        try {
            queryRunner.update(JDBCTools.getConnection(),sql,student.getName(),student.getClazz(),student.getGrade(),student.getId());
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void delete(int id) {
        sql = "delete from student where id = ?";
        try {
            queryRunner.update(JDBCTools.getConnection(),sql,id);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    @Override
    public Student findById(int id) {
        sql = " select * from student where id = ?";
        Student student = null;
        try {
            student = queryRunner.query(JDBCTools.getConnection(),sql,new BeanHandler<Student>(Student.class),id);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return student;
    }

    @Override
    public List<Student> findAll() {
        sql = "select * from student";
        List<Student> list = null;
        try {
            list = queryRunner.query(JDBCTools.getConnection(),sql,new BeanListHandler<>(Student.class));
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return list;
    }
    @Override
    public int studentCount() {
        sql = "select count(id) from student";
        int count = 0;
        try {
            count =  queryRunner.query(JDBCTools.getConnection(),sql,new ScalarHandler<Integer>());

        } catch (SQLException e) {
            e.printStackTrace();
        }
        return count;
    }
}

  d:数据库接口连接工具类

package com.dreambamboo.util;

import java.sql.*;
import java.util.ResourceBundle;

/**
 * 数据库操作工具类
 */
public class JDBCTools {
    private static String URL;
    private static String USERNAME;
    private static String PASSWORD;
    private static String DRIVER;

    private static ResourceBundle resourceBundle = ResourceBundle.getBundle("com.dreambamboo.util.db-config");

    private JDBCTools(){

    }

    /**
     * 使用静态代码块加载驱动程序
     *      防止重复代码,使用静态代码块在类加载的时候只会执行一次
     */
    static {
        URL = resourceBundle.getString("jdbc.url");
        USERNAME = resourceBundle.getString("jdbc.username");
        PASSWORD = resourceBundle.getString("jdbc.password");
        DRIVER = resourceBundle.getString("jdbc.driver");
    }

    /**
     * 获取数据库连接
     * @return
     */
    public static Connection getConnection(){
        Connection connection = null;
        try {
            connection = DriverManager.getConnection(URL,USERNAME,PASSWORD);
        } catch (SQLException e) {
            e.printStackTrace();
            System.out.println("获取连接失败");
        }
        return connection;
    }

    /**
     * 关闭数据库连接资源
     * @param connection    数据库连接
     * @param statement     数据库会话语句
     * @param resultSet     数据库查询结果集
     */
    public static void release(Connection connection, Statement statement, ResultSet resultSet){
        try {
            if (connection != null) {
                connection.close();
            }
            if (statement != null) {
                statement.close();
            }
            if (resultSet != null) {
                resultSet.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

}

  e:数据库配置文件

jdbc.url=jdbc:mysql://localhost:3306/test
jdbc.username=root
jdbc.password=mysql
jdbc.driver=com.mysql.jdbc.Driver

  f:测试代码

package com.dreambamboo.test;

import com.dreambamboo.dao.StudentDao;
import com.dreambamboo.dao.impl.StudentDaoImpl;
import com.dreambamboo.entity.Student;

import java.util.List;

public class Test {
    public static void main(String[] args) {
        StudentDao studentDao = new StudentDaoImpl();
        //studentDao.insert(new Student("孙悟空","高三年级","五班"));
        //studentDao.update(new Student(14,"孙悟空111","高三年级","十一班"));
        //studentDao.delete(14);
        List<Student> list = studentDao.findAll();
        for (Student st : list) {
            System.out.println(st.getId() + "===>>>" + st.getName() + "===>>>>" + st.getClazz() + "===>>> "+ st.getGrade());
        }
    }
}

三、自定义的Dbutils工具类

原文地址:https://www.cnblogs.com/jackieliutao/p/10180455.html

时间: 2024-10-28 20:17:32

Dbutils工具类的使用的相关文章

数据库工具--DBUtils工具类的使用

1. DBUtils概述 DBUtils 是 JDBC的一个简化开发工具包.使用DBUtils需要导入的jar包:commons-dbutils-1.4.jar 核心类:QueryRunner 包 org.apache.commons.dbutils java.lang.Object  |--org.apache.commons.dbutils.AbstractQueryRunner     |--org.apache.commons.dbutils.QueryRunner 构造方法: Quer

DButils工具类可以用来获取数据库连接向数据库插入更新删除对象2

package com.ctl.util; import java.awt.Color; import java.awt.Font; import java.awt.Insets; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.io.*; import java.lang.reflect.*; import java.sql.*; import java.text.SimpleD

JDBC : 使用DBUtils 工具类

所需jar包 : commons-dbutils-1.6.jar DbUtils类  1.DbUtils :提供如关闭连接.装载JDBC驱动程序等常规工作的工具类,里面的所有方法都是静态的.主要方法如下: -public static void close(-) throws java.sql.SQLException: DbUtils类提供了三个重载的关闭方法.这些方法检查所提供的参数是不是NULL,如果不是的话,它们就关闭Connection.Statement和ResultSet. -pu

java学习笔记之DBUtils工具类

DBUtils工具类 一.介绍 DBUtils是Apache组织开源的数据库工具类. 二.使用步骤 ①.创建QueryRunner对象 ②.调用update()方法或者query()方法执行sql语句 三.构造方法及静态方法 QueryRunner类 1.构造方法 ①.无参构造 QueryRunner qr =new  QueryRunner(); 使用无参构造的时候,调用update方法和query方法时就需要使用带Connection 类型参数的重载形式 ②.有参构造 QueryRunner

Java学习笔记49(DBUtils工具类二)

上一篇文章是我们自己模拟的DBUtils工具类,其实有开发好的工具类 这里使用commons-dbutils-1.6.jar 事务的简单介绍: 在数据库中应用事务处理案例:转账案例 张三和李四都有有自己的存款 主键 帐户名 余额 1 张三 1000 2 李四 10 要从张三的账户余额中转账800到李四账户 SQL语句实现: update xx set 余额 = 余额-800 where 主键=1 update xx set 余额 = 余额+800 where 主键=2 虽然操作成功,但是会出现问

Java学习笔记48(DBUtils工具类一)

上一篇的例子可以明显看出,在增删改查的时候,很多的代码都是重复的, 那么,是否可以将增删改查封装成一个类,方便使用者 package demo; /* * 实现JDBC的工具类 * 定义方法,直接返回数据库的连接对象 * */ import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Stat

DBUtils工具类

import java.io.IOException; import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.Properties; public class DBUtils { private static String driverName; private static Stri

DButils工具类能够用来获取数据库连接向数据库插入更新删除对象2

package com.ctl.util; import java.awt.Color; import java.awt.Font; import java.awt.Insets; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.io.*; import java.lang.reflect.*; import java.sql.*; import java.text.SimpleD

DButils工具类和连接池的使用

一.使用JS完成注册表单数据校验 1.需求分析  用户在进行注册的时候会输入一些内容,但是有些用户会输入一些不合法的内容,这样会导致服务器的压力过大,此时我们需要对用户输入    的内容进行一个校验(前端校验和后台校验),前端校验防君子不防小人. 2.技术分析 2.1 javasscript的介绍 Java与javascript有什么区别? 它们没有关系,雷锋和雷峰塔的关系. 2.2 javascript的作用? HTML:它是整个网站的骨架. CSS:它是对整个网站骨架的内容进行美化(修饰)