【JDBC核心】commons-dbutils
commons-dbutils
简介
commons-dbutils 是 Apache 组织提供的一个开源 JDBC 工具类库,它是对 JDBC 的简单封装,学习成本极低,并且使用 commons-dbutils 能极大简化 JDBC 编码的工作量,同时也不会影响程序的性能。
主要类:
- QueryRunner:提供数据库操作的一些重载的
update()和query()方法; - ResultSetHandler:此接口用于处理数据库查询结果得到的结果集,不同的结果集有不同的子类实现;
- DbUtils:提供如关闭连接、装载 JDBC 驱动程序等常规工作的工具类,里面的所有方法都是静态的。
使用
QueryRunner 类:
- 该类简化了 SQL 查询,它与 ResultSetHandler 组合在一起使用可以完成大部分的数据库操作,能够大大减少编码量**。
- 该类提供了两个构造器:
- 默认的构造器;
- 需要一个
javax.sql.DataSource来作参数的构造器;
- 主要方法:
- 更新
public int update(Connection conn, String sql, Object... params) throws SQLException用来执行一个更新(插入、更新或删除)操作。
- 插入
public <T> T insert(Connection conn,String sql,ResultSetHandler<T> rsh, Object... params) throws SQLException只支持插入操作。
- 批处理
public int[] batch(Connection conn,String sql,Object[][] params)throws SQLException插入、更新或删除操作。public <T> T insertBatch(Connection conn,String sql,ResultSetHandler<T> rsh,Object[][] params)throws SQLException只支持插入操作。
- 查询
public Object query(Connection conn, String sql, ResultSetHandler rsh,Object... params) throws SQLException执行一个查询操作,在这个查询中,对象数组中的每个元素值被用来作为查询语句的置换参数。该方法会自行处理 PreparedStatement 和 ResultSet 的创建和关闭。
- 更新
ResultSetHandler 接口:
- 该接口用于处理
java.sql.ResultSet,将数据按要求转换为另一种形式; - 主要实现类:
ArrayHandler把结果集中的第一行数据转成对象数组。ArrayListHandler把结果集中的每一行数据都转成一个数组,再存放到 List 中。BeanHandler将结果集中的第一行数据封装到一个对应的 JavaBean 实例中。BeanListHandler将结果集中的每一行数据都封装到一个对应的 JavaBean 实例中,存放到List里。ColumnListHandler将结果集中某一列的数据存放到 List 中。KeyedHandler(name):将结果集中的每一行数据都封装到一个 Map 里,再把这些 map 再存到一个 map 里,其 key 为指定的 key。MapHandler将结果集中的第一行数据封装到一个 Map 里,key 是列名,value 就是对应的值。MapListHandler将结果集中的每一行数据都封装到一个 Map里,然后再存放到 List。ScalarHandler查询单个值对象。
package cn.parzulpan.jdbc.ch09;
import cn.parzulpan.jdbc.bean.Customer;
import cn.parzulpan.jdbc.util.JDBCUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.*;
import org.junit.Test;
import java.sql.Connection;
import java.sql.Date;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;
/**
* @Author : parzulpan
* @Time : 2020-12-01
* @Desc : DBUtils QueryRunner 使用
*/
public class QueryRunnerTest {
// 插入记录
@Test
public void testInsert() {
Connection connection = null;
try {
connection = JDBCUtils.getDruidConnection();
QueryRunner queryRunner = new QueryRunner();
String sql = "insert into customers(name,email,birth)values(?,?,?)";
int update = queryRunner.update(connection, sql, "劲儿", "jiner@163.com", "1995-12-29");
System.out.println("添加了 " + update + " 条记录");
} catch (SQLException e) {
e.printStackTrace();
} finally {
JDBCUtils.closeResource(connection, null);
}
}
// 删除记录
@Test
public void testDelete() {
Connection connection = null;
try {
connection = JDBCUtils.getDruidConnection();
QueryRunner queryRunner = new QueryRunner();
String sql = "delete from customers where id < ?";
int update = queryRunner.update(connection, sql, 3);
System.out.println("删除了 " + update + " 条记录");
} catch (SQLException e) {
e.printStackTrace();
} finally {
JDBCUtils.closeResource(connection, null);
}
}
// 修改记录
@Test
public void testUpdate() {
Connection connection = null;
try {
connection = JDBCUtils.getDruidConnection();
QueryRunner queryRunner = new QueryRunner();
String sql = "update customers set email = ? where name = ?";
int update = queryRunner.update(connection, sql, "jinerR@163.com", "劲儿");
System.out.println("修改了 " + update + " 条记录");
} catch (SQLException e) {
e.printStackTrace();
} finally {
JDBCUtils.closeResource(connection, null);
}
}
// 查询一条记录,BeanHandler
@Test
public void testQuery() {
Connection connection = null;
try {
connection = JDBCUtils.getDruidConnection();
QueryRunner queryRunner = new QueryRunner();
String sql = "select id,name,email,birth from customers where id = ?";
// BeanHandler 是 ResultSetHandler 的实现类,用于封装表中的一条记录
BeanHandler<Customer> handler = new BeanHandler<>(Customer.class);
Customer customer = queryRunner.query(connection, sql, handler, 23);
System.out.println(customer); // Customer{id=23, name='劲儿', email='jinerR@163.com', birth=1995-12-29}
} catch (SQLException e) {
e.printStackTrace();
} finally {
JDBCUtils.closeResource(connection, null);
}
}
// 查询一条记录,MapHandler
@Test
public void testQueryMap() {
Connection connection = null;
try {
connection = JDBCUtils.getDruidConnection();
QueryRunner queryRunner = new QueryRunner();
String sql = "select id,name,email,birth from customers where id = ?";
MapHandler mapHandler = new MapHandler();
Map<String, Object> map = queryRunner.query(connection, sql, mapHandler, 23);
System.out.println(map); // {name=劲儿, birth=1995-12-29, id=23, email=jinerR@163.com}
} catch (SQLException e) {
e.printStackTrace();
} finally {
JDBCUtils.closeResource(connection, null);
}
}
// 查询多条记录,BeanListHandler
@Test
public void testQueryList() {
Connection connection = null;
try {
connection = JDBCUtils.getDruidConnection();
QueryRunner queryRunner = new QueryRunner();
String sql = "select id,name,email,birth from customers where id < ?";
BeanListHandler<Customer> listHandler = new BeanListHandler<>(Customer.class);
List<Customer> customerList = queryRunner.query(connection, sql, listHandler, 13);
customerList.forEach(System.out::println);
} catch (SQLException e) {
e.printStackTrace();
} finally {
JDBCUtils.closeResource(connection, null);
}
}
// 查询多条记录,MapListHandler
@Test
public void testQueryMapList() {
Connection connection = null;
try {
connection = JDBCUtils.getDruidConnection();
QueryRunner queryRunner = new QueryRunner();
String sql = "select id,name,email,birth from customers where id < ?";
MapListHandler mapListHandler = new MapListHandler();
List<Map<String, Object>> mapList = queryRunner.query(connection, sql, mapListHandler, 13);
mapList.forEach(System.out::println);
} catch (SQLException e) {
e.printStackTrace();
} finally {
JDBCUtils.closeResource(connection, null);
}
}
// 查询特殊值,类似于最大的,最小的,平均的,总和,个数相关的数据,ScalarHandler
@Test
public void testQueryScalar() {
Connection connection = null;
try {
connection = JDBCUtils.getDruidConnection();
QueryRunner queryRunner = new QueryRunner();
String sql = "select count(*) from customers where id < ?";
ScalarHandler scalarHandler = new ScalarHandler();
Object query = queryRunner.query(connection, sql, scalarHandler, 20);
System.out.println(query);
String sql1 = "select max(birth) from customers";
ScalarHandler handler = new ScalarHandler();
Object query1 = queryRunner.query(connection, sql1, handler);
System.out.println(query1);
} catch (SQLException e) {
e.printStackTrace();
} finally {
JDBCUtils.closeResource(connection, null);
}
}
}
练习和总结
【JDBC核心】commons-dbutils的更多相关文章
- 高性能jdbc封装工具 Apache Commons DbUtils 1.6(转载)
转载自原文地址:http://gao-xianglong.iteye.com/blog/2166444 前言 关于Apache的DbUtils中间件或许了解的人并不多,大部分开发人员在生成环境中更多的 ...
- java JDBC (六) org.apache.commons.dbutils 增删改
dbutils是apache封装了JDBC的工具类,比mysql-connector更方便些 下载地址:http://commons.apache.org/proper/commons-dbutils ...
- java JDBC (七) org.apache.commons.dbutils 查询
package cn.sasa.demo1; import java.sql.Connection; import java.sql.SQLException; import java.util.Li ...
- 写一个ORM框架的第一步(Apache Commons DbUtils)
新一次的内部提升开始了,如果您想写一个框架从Apache Commons DbUtils开始学习是一种不错的选择,我们先学习应用这个小“框架”再把源代码理解,然后写一个属于自己的ORM框架不是梦. 一 ...
- 【JDBC&Dbutils】JDBC&JDBC连接池&DBUtils使用方法(重要)
-----------------------JDBC---------- 0. db.properties文件 driver=com.mysql.jdbc.Driver url=jdbc: ...
- JDBC工具类-DButils(QueryRunner-ResultSetHandler)
简述: DBUtils是Java编程中的数据库操作实用工具,小巧简单实用. DBUtils封装了对JDBC的操作,简化了JDBC操作,可以少写代码. DBUtils三个核心功能: QUeryRunne ...
- JDBC 学习笔记(四)—— 自定义JDBC框架+Apache—DBUtils框架+事务管理+操作多表
本文目录: 1.自定义JDBC框架 ——数据库元数据:DataBaseMetaData 2.自定义JDBC框架 ——数据库元数据:DataBaseMetaData ...
- Apache Commons DbUtils 快速上手
原文出处:http://lavasoft.blog.51cto.com/62575/222771 Hibernate太复杂,iBatis不好用,JDBC代码太垃圾,DBUtils在简单与优美之间取得了 ...
- Java -- JDBC 学习--使用 DBUtils
Apache—DBUtils简介 commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用dbutils能极大简化jdb ...
- Java连接数据库 #04# Apache Commons DbUtils
索引 通过一个简单的调用看整体结构 Examples 修改JAVA连接数据库#03#中的代码 DbUtils并非是什么ORM框架,只是对原始的JDBC进行了一些封装,以便我们少写一些重复代码.就“用” ...
随机推荐
- 【自用】Notice
读题 不要把 \(\sum a \oplus b\) 看成异或和. 注意读完整,有可能对原有符号有新的约定,不要想当然. 注意模数的 0 数清楚. 卡常&时间 打题之前一般先搞个自己的缺省源. ...
- 实战演习:mysqlbinlog恢复bin-log数据
mysqlbinlog恢复bin-log数据 Binlog日志即binary log,是二进制日志文件,有两个作用,一个是增量备份,另一个是主从复制,即从节点同步主节点数据时获取的即是bin-log, ...
- zstd c++ string 压缩&解压
zstd 简介 维基百科定义: Zstandard(或Zstd)是由Facebook的Yann Collet开发的一个无损数据压缩算法.该名称也指其C语言的参考实现.第1版的实现于2016年8月31日 ...
- md5 的基本使用
import hashlib def make_password(password): md5=hashlib.md5() # 实例化 md5.update(password.encode(encod ...
- DRF框架笔记
序列化器类的定义格式? 继承serializers.Serializer:字段 = serializers.字段类型(选项参数) 序列化器类的基本使用? 序列化器类(instance=None, da ...
- css进阶 04-如何让一个元素水平垂直居中?
04-如何让一个元素水平垂直居中? #前言 老板的手机收到一个红包,为什么红包没居中? 如何让一个子元素在父容器里水平垂直居中?这个问题必考,在实战开发中,也应用得非常多. 你也许能顺手写出好几种实现 ...
- BloomFilter中保存的数据量
结果 /** * @author WeiJiQian * BF_CARDINAL_THRESHOLD BF_FALSE_POSITIVE_RATE 保存的数据量 * 100,0000 0.01 391 ...
- MAC 安装Python3.7
查看下python版本 macosdeMacBook:Versions macos$ cd /System/Library/Frameworks/Python.framework/Versions/ ...
- Sharding-JDBC使用jasypt3.0及以上版本加密数据库连接密码
本文中介绍的是基于Sharding-JDBC 4.0和jasypt 3.0及其以上版本对数据库连接密码进行加密操作 引入依赖 项目的pom.xml中引入maven依赖 <dependency&g ...
- Linux系统搭建RabbitMQ
下载erlang和rabbitmq-server 1.下载Erlang安装包 [root@VM_0_9_centos soft]# wget http://erlang.org/download/ot ...