DBUtils介绍 apache
什么是dbutils,它的作用
DBUtils是java编程中的数据库操作实用工具,小巧简单实用。
DBUtils封装了对JDBC的操作,简化了JDBC操作。可以少写代码。
1.对于数据表的读操作,他可以把结果转换成List,Array,Set等java集合,便于程序员操作;
2.对于数据表的写操作,也变得很简单(只需写sql语句)
3.可以使用数据源,使用JNDI,数据库连接池等技术来优化性能--重用已经构建好的数据库连接对象
DBUtils的三个核心对象
QueryRunner类
ResultSetHandler接口
DBUtils类
- QueryRunner类
QueryRunner中提供对sql语句操作的API.
它主要有三个方法
query() 用于执行select
update() 用于执行insert update delete
batch() 批处理 - ResultSetHandler接口
用于定义select操作后,怎样封装结果集. - DbUtils类
它就是一个工具类,定义了关闭资源与事务处理的方法
Dbutils快速入门
package com.lib.util;
import com.ljb.entity.User;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.junit.Test;
import java.sql.SQLException;
import java.util.Date;
import java.util.List;
public class TestCRUD {
@Test
public void testSelect() throws SQLException {
//创建一个QueryRunner对象
QueryRunner qr = new QueryRunner(C3P0Util.getDs());
List<User> list = qr.query("select * from users", new BeanListHandler<User>(User.class));
for (User user: list) {
System.out.println(user);
}
List<User> list2 = qr.query("select * from users where id = ?", new BeanListHandler<User>(User.class), 1);
for (User user: list2) {
System.out.println(user);
}
}
@Test
public void testInsert() throws SQLException {
QueryRunner qr = new QueryRunner(C3P0Util.getDs());
qr.update("insert into users(username, password, email, brithday) values(?,?,?,?)","bobo","123","333@qq.com",new Date());
}
@Test
public void testUpdate() throws SQLException {
QueryRunner qr = new QueryRunner(C3P0Util.getDs());
qr.update("update users set username=?, password=? where id = ?","bobooo","123",1);
}
@Test
public void testDelete() throws SQLException {
QueryRunner qr = new QueryRunner(C3P0Util.getDs());
qr.update("delete from users where id = ?",1);
}
@Test
public void testBatch() throws SQLException {
QueryRunner qr = new QueryRunner(C3P0Util.getDs());
Object[][] params = new Object[10][];//高维代表执行多少次
for (int i =0; i < params.length; i ++) {
params[i] = new Object[]{"bobo" + i,"123","333@qq.com",new Date()};
}
qr.batch("insert into users(username, password, email, brithday) values(?,?,?,?)",params);
}
}
QueryRunner对象
构造函数:
new QueryRunner();
它的事务可以手动控制。
也就是说此对象调用的方法(如:query、update、batrch)参数中要有Connection对象。
new QueryRunner(DataSource ds);
它的事务是自动控制的。一个sql一个事务。
此对象调用的方法(如:query、update、batrch)参数中无需Connection对象。
ResultSetHandler接口
- ArrayHandler:适合取1条记录。把该条记录的每列值封装到一个数组中Object[]
@Test
public void testArrylist() throws SQLException {
QueryRunner qr = new QueryRunner(C3P0Util.getDs());
Object[] query = qr.query("select * from users", new ArrayHandler());
for (Object o:
query){
System.out.println(o);
}
}
- ArrayListHandler:适合取多条记录。把每条记录的每列值封装到一个数组中Object[],把数组封装到一个List中
- ColumnListHandler:取某一列的数据。封装到List中。
- KeyedHandler:取多条记录,每一条记录封装到一个Map中,再把这个Map封装到另外一个Map中,key为指定的字段值。
@Test
public void testKeyedHandler() throws SQLException {
QueryRunner qr = new QueryRunner(C3P0Util.getDs());
//大map的key是表中的某列,小map的key是表的列名,说明第一个是object类型,第二个是string类型
Map<Object, Map<String, Object>> query = qr.query("select * from users", new KeyedHandler(1));
for (Map.Entry<Object, Map<String, Object>> item:
query.entrySet()) {
for (Map.Entry<String, Object> mm:
item.getValue().entrySet()) {
System.out.println(mm.getKey() + "\t" + mm.getValue());
}
System.out.println("============");
}
}
- MapHandler:适合取1条记录。把当前记录的列名和列值放到一个Map中
- MapListHandler:适合取多条记录。把每条记录封装到一个Map中,再把Map封装到List中
- ScalarHandler:适合取单行单列数据
@Test
public void testScalarHandler() throws SQLException {
QueryRunner qr = new QueryRunner(C3P0Util.getDs());
Object query = qr.query("select count(*) from users", new ScalarHandler(1));
System.out.println(query);
}
- BeanHandler:适合取单行数据
@Test
public void testBeanHandler() throws SQLException {
QueryRunner qr = new QueryRunner(C3P0Util.getDs());
User user = qr.query("select * from users", new BeanHandler<User>(User.class));
System.out.println(user);
}
- BeanListHandler
网友评论