WEB_10【DBUtils】

特此说明:本文参考黑马程序员视频讲座 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
经过WEB_10【JDBC连接池】的学习,可以知道,连接池的使用可以大大减少资源开销,提高程序效能,而代码还存在很多冗余,在增删改查的时候有很多重复代码,为了减少代码冗余,可以用传参的方法来解决这个问题。

JavaBean

  1. 需要实现接口:java.io.Serializable,通常省略了
  2. 提供私有属性
  3. 提供getter/setter方法
  4. 提供无参构造
    建议放在.domain包下

User.java

package cn.domain;

public class User {
    private Integer user_id;
    private String user_name;
    private String user_password;

    public User() {
        // TODO Auto-generated constructor stub
    }

    public Integer getUser_id() {
        return user_id;
    }
    public void setUser_id(Integer user_id) {
        this.user_id = user_id;
    }
    public String getUser_name() {
        return user_name;
    }
    public void setUser_name(String user_name) {
        this.user_name = user_name;
    }
    public String getUser_password() {
        return user_password;
    }
    public void setUser_password(String user_password) {
        this.user_password = user_password;
    }


}

注意生成getter/setter的方法,右键-source-generate getters and setters

DBUtils

DBUtils封装了jdbc操作,简化了JDBC操作,可以少写代码,三个核心功能:

  • QueryRunner提供对sql语句操作的API
  • ResultSetHandler接口,用于定义select操作后,怎样封装结果集
  • DbUtils类,是个工具类,定义了关闭资源与事务处理的方法

QueryRunner核心类

  • QueryRunner(DataSource ds),提供数据源(连接池),DBUtils底层自动维护connection
  • update(String sql,Object…params),执行更新数据
  • query(String sql,ResultSetHandlerrsh,Object…params),执行查询

ResultSetHandler结果集处理类

  • BeanHandler:将结果集中第一条记录封装到一个指定的javaBean中
  • BeanListHandler:将结果集的每一条记录封装到指定的javaBean中,再将这些javaBean封装到List集合中
  • ScalarHandler:用于单数据。例如select count(*) from操作
    其他更多参考文档!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

DbUtils工具类

  • closeQuietly(Connection conn):关闭连接,如有异常try后不抛
  • commitAndCloseQuietly(Connection conn):提交并关闭连接
  • rollbackAndCloseQuietly(Connection conn):回滚并关闭连接

代码实现增删改查

首先导包,别忘了
这里写图片描述

package cn.jdbc.test;

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.apache.commons.dbutils.handlers.ColumnListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import org.junit.Test;

import cn.domain.User;
import cn.jdbc.utils.C3P0Utils;

/*
 * 测试DBUtils工具类
 */

public class TestDBUtils {


    /*
     * 添加
     */

    @Test
    public void testAdd() {

        try {
            //1.创建核心类QueryRunner
            QueryRunner qRunner=new QueryRunner(C3P0Utils.getDataSource());
            //2.写SQL语句
            String sql = "insert into table_user values (null,?,?)";
            //3.为占位符设置值
            Object[] params = {"Tom","IamTom"};
            //4.执行添加操作
            int rows=qRunner.update(sql, params);
            if(rows>0) {
                System.out.println("添加成功");
            }else {
                System.out.println("添加失败");
            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

    /*
     * 更新
     */

    @Test
    public void testUpdateById() {

        try {
            //1.创建核心类QueryRunner
            QueryRunner qRunner=new QueryRunner(C3P0Utils.getDataSource());
            //2.写SQL语句
            String sql = "update table_user set user_password = ? where user_id = ?";
            //3.为占位符设置值
            Object[] params = {"BigTom",2};
            //4.执行添加操作
            int rows=qRunner.update(sql, params);
            if(rows>0) {
                System.out.println("更新成功");
            }else {
                System.out.println("更新失败");
            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

    /*
     * 删除
     */

    @Test
    public void testDeleteById() {

        try {
            //1.创建核心类QueryRunner
            QueryRunner qRunner=new QueryRunner(C3P0Utils.getDataSource());
            //2.写SQL语句
            String sql = "delete from table_user where user_id = ?";
            //3.为占位符设置值
            Object[] params = {2};
            //4.执行添加操作
            int rows=qRunner.update(sql, params);
            if(rows>0) {
                System.out.println("删除成功");
            }else {
                System.out.println("删除失败");
            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

    /*
     * 查询所有
     */
    @Test
    public void testQueryAll() {

        try {
            //1.获取核心类QueryRunner
            QueryRunner qRunner = new QueryRunner(C3P0Utils.getDataSource());
            //2.写SQL语句
            String sql = "select * from table_user";
            //3.执行查询语句
            List<User> users = qRunner.query(sql, new BeanListHandler<User>(User.class));
            //4.对结果遍历输出
            for(User user:users) {
                System.out.println(user.toString());
            }
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }

    /*
     * 根据id查询
     */
    @Test
    public void testQueryById() {

        try {
            //1.获取核心类QueryRunner
            QueryRunner qRunner = new QueryRunner(C3P0Utils.getDataSource());
            //2.写SQL语句
            String sql = "select * from table_user where user_id = ?";
            //3.为占位符设置值
            Object[] params = {3};
            //4.执行查询语句
            User user = qRunner.query(sql, new BeanHandler<User>(User.class),params);
            System.out.println(user.toString());
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }
    /*
     * 查询所有用户总个数
     */
    @Test
    public void testQueryCount() {

        try {
            //1.获取核心类QueryRunner
            QueryRunner qRunner = new QueryRunner(C3P0Utils.getDataSource());
            //2.写SQL语句
            String sql = "select count(*) from table_user";

            //3.执行查询语句
            Long count = (Long)qRunner.query(sql, new ScalarHandler());
            System.out.println(count);
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }

    /*
     * 这里用了ColumnListHandler,还有其他的类,用法类似,参考文档即可
     */
    @Test
    public void testQuery() {

        try {
            //1.获取核心类QueryRunner
            QueryRunner qRunner = new QueryRunner(C3P0Utils.getDataSource());
            //2.写SQL语句
            String sql = "select * from table_user";

            //4.执行查询语句
             List<Object> list = qRunner.query(sql, new ColumnListHandler(2));
            for(Object object:list) {
                System.out.println(object);
            }
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }
}

猜你喜欢

转载自blog.csdn.net/ccnuacmhdu/article/details/81021904