admin管理员组文章数量:1442233
JavaWeb后端入门3—DBUtils
1. 概述
- 是什么
Apache组织提供的一个对JDBC进行简单封装的开源工具库,能简化JDBC的开发,同时也不影响程序性能。
就是对JDBC的简单封装
- 为何要学习
因为JDBC手写比较麻烦,且有很多代码是类似的,比如获得链接、预编译SQL、释放资源等
可以将这些代码抽取出来放到工具类中,将类似的代码进行抽取,大大简化UJDBC的编程
2. DBUtils的API接口
参考文档:点击打开
2.1 QueryRunner
对象:核心运行类
- 构造方法
QueryRunner()
QueryRunner( DataSource ds)
- 方法
##增删改
update(String sql, Object... params)
update(Connection conn, String sql, Object... params)
##执行查询
query(String sql, ResultSetHandler<T> rsh, Object... params)
query(Connection conn, String sql, ResultSetHandler<T> rsh, Object... params)
一般情况下,如果执行CRUD的操作时:
代码语言:javascript代码运行次数:0运行复制构造:
QueryRunner(DataSource ds);
方法:
int update(String sql,Object ... args);
T query(String sql,ResultSetHandler rsh,Object...args);
如果有事务管理的话使用另一套完成CRUD操作
代码语言:javascript代码运行次数:0运行复制构造:
QueryRunner();
方法:
int update(Connection conn,String sql,Object ... args);
T query(Connection conn,String sql,ResultSetHandler rsh,Object...args);
- 方法
batch(Connection conn, String sql, Object[][] params)
batch(String sql, Object[][] params)
2.2 DBUtils
- 方法
commitAndCloseQuietly(Connection conn)
rollbackAndCloseQuietly(Connection conn)
##安静关闭指的是同时把异常处理掉
2.3 其他还有很多就不举例了
3. DBUtils的增删改操作
3.1 添加
代码语言:javascript代码运行次数:0运行复制/**
* 添加操作
*/
@Test
public void demo1() throws SQLException {
// 创建核心类:QueryRunner
QueryRunner queryRunner = new QueryRunner(JDBCUtils2.getDataSource());
queryRunner.update("insert into account values (null,?,?)", "ddd", 10000);
}
3.2 修改
代码语言:javascript代码运行次数:0运行复制/**
* 修改操作
* @throws SQLException
*/
@Test
public void demo2() throws SQLException {
// 创建核心类:QueryRunner
QueryRunner queryRunner = new QueryRunner(JDBCUtils2.getDataSource());
queryRunner.update("update account set name =? ,money =? where id = ?", "eee",20000,4);
}
3.3 删除
代码语言:javascript代码运行次数:0运行复制/**
* 删除操作
* @throws SQLException
*/
@Test
public void demo3() throws SQLException {
//创建核心类
QueryRunner queryRunner = new QueryRunner(JDBCUtils2.getDataSource());
queryRunner.update("delete from account where id =?", 3);
}
4. DBUtils的查询操作
- 创建一个包,新建类命名为
Account.java
package com.itheima.DBUtils.domain;
/**
* 用于存储在数据库中查询到的信息
* */
public class Account {
private Integer id;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Double getMoney() {
return money;
}
public void setMoney(Double money) {
this.money = money;
}
private String name;
private Double money;
@Override
public String toString() {
return "Account [id=" + id + ", name=" + name + ", money=" + money + "]";
}
}
- 新建
DBUtilsDemo2.java
,实现如下
package com.itheima.DBUtils.demo2;
/**
* DBUtils的查询操作
* */
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import org.apachemons.dbutils.QueryRunner;
import org.apachemons.dbutils.ResultSetHandler;
import org.junit.Test;
import com.itheima.DBUtils.domain.Account;
import com.itheima.jdbc.utils.JDBCUtils2;
import com.mchange.v2.c3p0.impl.NewPooledConnection;
public class DBUtilsDemo2 {
/**
* 查询1:查询1条记录的操作
* @throws SQLException
* */
@Test
public void demo1() throws SQLException {
//创建核心类
QueryRunner queryRunner = new QueryRunner(JDBCUtils2.getDataSource());
//执行查询
Account account = queryRunner.query("select * from account where id =?", new ResultSetHandler<Account>() {
@Override
public Account handle(ResultSet rs) throws SQLException {
Account account = new Account();
if (rs.next()) {
account.setId(rs.getInt("id"));
account.setName(rs.getString("name"));
account.setMoney(rs.getDouble("money"));
}
return account;
}
}, 1);
System.out.println(account);
}
/**
* 查询2:查询多条记录的操作
* @throws SQLException
* */
@Test
public void demo2() throws SQLException {
//创建核心类
QueryRunner queryRunner = new QueryRunner(JDBCUtils2.getDataSource());
//执行查询
List<Account> list = queryRunner.query("select * from account", new ResultSetHandler<List<Account>>() {
@Override
public List<Account> handle(ResultSet rs) throws SQLException {
//创建一个集合用于封装数据
List<Account> list = new ArrayList<Account>();
while (rs.next()) {
Account account = new Account();
account.setId(rs.getInt("id"));
account.setName(rs.getString("name"));
account.setMoney(rs.getDouble("money"));
//将对象存入到list集合
list.add(account);
}
return list;
}
});
//将集合中的数据输入(遍历)
for (Account account : list) {
System.out.println(account);
}
}
}
5. DBUtils
的ResultSetHandler
实现类1— ArrayHandler
和ArrayListHandler
5.1 概述
ArrayHandler
是将一条记录封装到一个数组当中,这个数组是Object[]
ArrayListHandler
是将多条记录封装到一个装有一个Object[]
的list
集合中
5.2 代码实现
- 使用
ArrayHandler
实现查询一条记录
/**
* ArrayHandler:将一条记录封装到一个Object数组中
* @throws SQLException
* */
@Test
public void demo1() throws SQLException {
QueryRunner queryRunner = new QueryRunner(JDBCUtils2.getDataSource());
Object[] objs = queryRunner.query("select * from account where id =?", new ArrayHandler(), 1);
System.out.println(Arrays.toString(objs));
}
- 使用
ArrayListHandler
实现查询多条记录
/**
* ArrayListHandler:将多条数据封装到一个装有Object数组的List数组中
* 一条记录封装到Object[]数组中,多条记录就是多个Object[],那么多个Objecy数组就将其装入List集合中
* @throws SQLException
* */
@Test
public void demo2() throws SQLException {
QueryRunner queryRunner = new QueryRunner(JDBCUtils2.getDataSource());
List<Object[]> list = queryRunner.query("select * from account", new ArrayListHandler());
for (Object[] objects : list) {
System.out.println(Arrays.toString(objects));
}
}
6. DBUtils
的ResultSetHandler
实现类2—BeanHandler
和BeanListHandler
6.1 概述
BeanHandler
:将一条记录封装到一个JavaBean中BeanListHandler
:将多条记录封装到一个装有JavaBean的List集合中
6.2 代码实现
BeanHandler
:将一条记录封装到一个JavaBean中
/**
* BeanHandler:将一条记录封装到一个JavaBean中
* @throws SQLException
* */
@Test
public void demo3() throws SQLException {
QueryRunner queryRunner = new QueryRunner(JDBCUtils2.getDataSource());
Account account = queryRunner.query("select * from account where id = ?", new BeanHandler<Account>(Account.class), 2);
System.out.println(account);
}
BeanListHandler
:将多条记录封装到一个JavaBean的List集合中
/**
* BeanListHandler:将多条记录封装到一个JavaBean的List集合中
* 一条记录就是一个Java的对象(JavaBean),如果是多条记录(多个Java对象),将多个Java对象装到一个List集合中
* @throws SQLException
* */
@Test
public void demo4() throws SQLException {
QueryRunner queryRunner = new QueryRunner(JDBCUtils2.getDataSource());
List<Account> list = queryRunner.query("select * from account", new BeanListHandler<Account>(Account.class));
for (Account account : list) {
System.out.println(account);
}
}
7. DBUtils
的ResultSetHandler
实现类3—MapHandler
和MapListHandler
7.1 概述
MapHandler
:将一条记录封装到一个Map集合中,Map的key是列名,Map的value是表中列的记录值BeanListHandler
:将多条记录封装到一个装有Map的List集合中
7.2 代码
-
MapHandler
/**
* MapHandler:一条记录封装到一个Map集合中
* @throws SQLException
* */
@Test
public void demo5() throws SQLException {
QueryRunner queryRunner = new QueryRunner(JDBCUtils2.getDataSource());
Map<String,Object> map = queryRunner.query("select * from account where id =?", new MapHandler(), 4);
System.out.println(map);
}
-
MapListHandler
/**
* MapListHandler:一条记录封装到一个Map集合中
* @throws SQLException
* */
@Test
public void demo6() throws SQLException {
QueryRunner queryRunner = new QueryRunner(JDBCUtils2.getDataSource());
List<Map<String,Object>> list = queryRunner.query("select * from account", new MapListHandler());
for (Map<String, Object> map : list) {
System.out.println(map);
}
}
8. DBUtils
的ResultSetHandler
实现类4—ColumnListHandler
、ScalarHandler
、 KeyedHandler
ColumnListHandler
:将数据中心的某列封装到list集合中
/**
* ColumnListHandler:将某列的值封装到List集合中
* @throws SQLException
* */
@Test
public void demo7() throws SQLException {
QueryRunner queryRunner = new QueryRunner(JDBCUtils2.getDataSource());
List<Object> list = queryRunner.query("select name,money from account", new ColumnListHandler("name"));
for (Object object : list) {
System.out.println(object);
}
}
ScalarHandler
:将数据中心的某列封装到list集合中
/**
* ScalarHandler:将单个的值封装
* @throws SQLException
* */
@Test
public void demo8() throws SQLException {
QueryRunner queryRunner = new QueryRunner(JDBCUtils2.getDataSource());
Object object = queryRunner.query("select count(*) from account", new ScalarHandler() );
System.out.println(object);
}
KeyedHandler
:将一条记录封装到一个Map集合中。将多条记录封装到一个装有Map集合的 Map集合中。而且外面的 Map的 key是可以指定的。
↑一条记录 ↑ | ↑ 多条记录 ↑ |
---|
代码演示:
代码语言:javascript代码运行次数:0运行复制/**
* KeyedHandler:将一条记录封装到一个Map集合中。将多条记录封装到一个装有Map集合的 Map集合中
* @throws SQLException
* */
@Test
public void demo9() throws SQLException {
QueryRunner queryRunner = new QueryRunner(JDBCUtils2.getDataSource());
Map<Object,Map<String,Object>> map = queryRunner.query("select * from account", new KeyedHandler("name") );//这里的"name"就是作为key的
for (Object key : map.keySet()) {
System.out.println(key+" "+map.get(key));
}
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2021-04-08 ,如有侵权请联系 cloudcommunity@tencent 删除后端集合入门数组对象本文标签: JavaWeb后端入门3DBUtils
版权声明:本文标题:JavaWeb后端入门3—DBUtils 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/biancheng/1748000384a2789252.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论