DBUtils的使用

一、概述

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

1.1 DBUtils简介

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

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

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

1.2 DBUtils包括的主要类

  • DbUtils类:启动类
  • QueryRunner类:执行SQL语句的类
    这里要注意,传入的参数是【数据源】,而不是Connection
//构造方法,传入的参数是【数据源】,而不是Connection,这里要注意
public QueryRunner(DataSource ds) {
	super(ds);
}
QueryRunner qr = new QueryRunner(DataSourceUtils.getDataSource());
  • ResultSetHandler接口:转换类型接口
    • ScalarHandler 类:适合获取一行一列数据【重点】
    • BeanHandler类:实现类,把记录转成对象【重点】
    • BeanListHandler类:实现类,把记录转化成List,储存的是JavaBean类型的对象【重点】
    • ArrayHandler类:实现类,把记录转化成数组,这里是将该行的各列条目数据存储为数组,是Object类型
    • ArrayListHandler类:把记录转化成数组,并放入集合中,该集合存储的是数组,数组是每行的个列条目数据信息,是Object类型
    • ColumnListHandler类:取某一列的数据,封装到List中

二、DBUtils的使用

该工具类的使用方式可以参考《DAO模式》的查询的实现原理,以及《JDBC基础操作》的抽取数据库工具类部分。

  1. 创建项目

  2. 导入jar包,放到新建的lib文件夹下

    commons-dbutils-1.6.jar DBUtils工具类包
    druid-1.1.5.jar 阿里德鲁伊连接池
    mysql-connector-java-5.1.41-bin 与数据库的连接jar包

  3. 导入配置文件,放到src目录下
    database.properties / druid.properties 配置文件

    #连接设置
    driverClassName=com.mysql.jdbc.Driver
    url=jdbc:mysql://localhost:3306/practice?useSSL=true&characterEncoding=utf8
    username=root
    password=123456
    #<!-- 初始化连接 -->
    initialSize=10
    #最大连接数量
    maxActive=50
    #<!-- 最小空闲连接 -->
    minIdle=5
    #<!-- 超时等待时间以毫秒为单位 6000毫秒/1000等于60秒 -->
    maxWait=5000

  4. DruidUtils.java工具类

public class DruidUtils {
    private static DruidDataSource dataSource = null;
    static {
        InputStream is = DBUtil_druid.class.getClassLoader().getResourceAsStream("database.properties");
        Properties properties = new Properties();
        try {
            properties.load(is);
            dataSource = (DruidDataSource) DruidDataSourceFactory.createDataSource(properties);
            is.close();
        } catch (Exception e) {
            System.out.println("注册失败");
            e.printStackTrace();
        }
    }
	
	//对外提供数据源,而不是Connection
    public static DruidDataSource getDataSource() {
        return dataSource;
    }
}
  1. 创建对应的包和方法
/*dao.impl包下*/
//EMPDao接口
public interface EMPDao {
    public List<EMP> findAll();		//查询所有,返回List集合
    public EMP findById(Integer id);	//根据id查找某一个,返回对象
    public void add(EMP emp);	//添加员工
    public void update(EMP emp);	//更新员工
    public void delete(Integer id);	//根据id删除某一个员工
    public long getCount();		//获取总的数据个数
    public List<String> findNames();	//查找,只返回姓名集合
    public Object[] findArrayEmp(Integer id);	//根据id查找某一个员工各列条目信息,返回数组
    public List<Object[]> findAllInfo();	//查询所有,返回的是由数组构成的集合
}

//EMPDao_impl实现类【使用了DBUtils中的方法】
public class EMPDao_impl implements EMPDao {

    @Override
    public List<EMP> findAll() {
        QueryRunner qr = new QueryRunner(DruidUtils.getDataSource());

        try {
            List<EMP> empList = qr.query("select * from emp", new BeanListHandler<EMP>(EMP.class));
            return empList;
        } catch (SQLException e) {
            e.printStackTrace();
            throw new RuntimeException("查询失败", e);
        }
    }

    @Override
    public EMP findById(Integer id) {
        QueryRunner qr = new QueryRunner(DruidUtils.getDataSource());
        try {
            EMP emp = qr.query("select * from emp where id = ?", new BeanHandler<EMP>(EMP.class),id);
            return emp;
        } catch (SQLException e) {
            e.printStackTrace();
            throw new RuntimeException("未找到", e);
        }
    }

    @Override
    public void add(EMP emp) {
        //创建查询执行器,并指定连接池,注意传入的是数据源,而不是连接
        QueryRunner qr = new QueryRunner(DruidUtils.getDataSource());
        //执行
        Object[] params = {emp.getName(), emp.getAge(),emp.getJob()};
        try {
            int update = qr.update("insert into emp(name, age, job) value (?, ?, ?)", params);
            if (update > 0) {
                System.out.println("添加成功");
            } else {
                System.out.println("添加失败");
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void update(EMP emp) {
        QueryRunner qr = new QueryRunner(DruidUtils.getDataSource());
        try {
            int update = qr.update("update emp set name = ?,age = ?,job=? where id=?",emp.getName(), emp.getAge(), emp.getJob(), emp.getId());
            if (update > 0) {
                System.out.println("修改成功");
            } else {
                System.out.println("修改失败");
            }
        } catch (SQLException e) {
            e.printStackTrace();
            throw new RuntimeException("更新失败", e);
        }
    }

    @Override
    public void delete(Integer id) {
        QueryRunner qr = new QueryRunner(DruidUtils.getDataSource());
        try {
            int i = qr.update("delete from emp where id = ?", id);
            if (i > 0) {
                System.out.println("删除成功");
            }
        } catch (SQLException e) {
            e.printStackTrace();
            new RuntimeException("删除异常", e);
        }
    }

    @Override
    public long getCount() {
        QueryRunner qr = new QueryRunner(DruidUtils.getDataSource());
        try {
            Long query =(long) qr.query("select count(*) from emp", new ScalarHandler<>());
            return query;
        } catch (SQLException e) {
            e.printStackTrace();
            throw new RuntimeException("查找失败", e);
        }
    }

    @Override
    public List<String> findNames() {
        QueryRunner qr = new QueryRunner(DruidUtils.getDataSource());
        try {
            List<String> list = qr.query("select * from emp", new ColumnListHandler<String>("name"));
            return list;
        } catch (SQLException e) {
            e.printStackTrace();
            throw new RuntimeException("查询失败", e);
        }
    }

    //查找某一行的列字段明细
    @Override
    public Object[] findArrayEmp(Integer id) {
        QueryRunner queryRunner = new QueryRunner(DruidUtils.getDataSource());
        try {
            Object[] query = queryRunner.query("select * from emp where id = ?", new ArrayHandler(), id);
            return  query;
        } catch (SQLException e) {
            e.printStackTrace();
            throw new RuntimeException("找不到", e);
        }
    }

    @Override
    public List<Object[]> findAllInfo() {
        QueryRunner qr = new QueryRunner(DruidUtils.getDataSource());
        try {
            List<Object[]> list = qr.query("select * from emp", new ArrayListHandler());
            return list;
        } catch (SQLException e) {
            e.printStackTrace();
            throw new RuntimeException("查询失败", e);
        }
    }
}

/*domain包下的对象类,这里只写出属性部分*/
public class EMP {
    private Integer id;	//注意必须是包装类
    private String name;
    private Integer age;
    private String job;
    //还有构造方法,set和get方法以及toString方法等
    ...
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值