JavaWeb后端入门3—DBUtils

1. 概述是什么Apache组织提供的一个对JDBC进行简单封装的开源工具库,能简化JDBC的开发,同时也不影响程序性能。就是对JDBC的简单封装为何要学习因为JDBC手写比较麻烦,且有很多代码是类似的,比如获得链接、预编译SQL、释放资源

JavaWeb后端入门3—DBUtils

1. 概述

  • 是什么

Apache组织提供的一个对JDBC进行简单封装的开源工具库,能简化JDBC的开发,同时也不影响程序性能。

就是对JDBC的简单封装

  • 为何要学习

因为JDBC手写比较麻烦,且有很多代码是类似的,比如获得链接、预编译SQL、释放资源等

可以将这些代码抽取出来放到工具类中,将类似的代码进行抽取,大大简化UJDBC的编程

2. DBUtils的API接口

参考文档:点击打开

2.1 QueryRunner对象:核心运行类

  • 构造方法
代码语言:javascript代码运行次数:0运行复制
QueryRunner()
QueryRunner( DataSource ds)
  • 方法
代码语言:javascript代码运行次数:0运行复制
##增删改
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);
  • 方法
代码语言:javascript代码运行次数:0运行复制
batch(Connection conn, String sql, Object[][] params) 
batch(String sql, Object[][] params) 

2.2 DBUtils

  • 方法
代码语言:javascript代码运行次数:0运行复制
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
代码语言:javascript代码运行次数:0运行复制
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,实现如下
代码语言:javascript代码运行次数:0运行复制
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. DBUtilsResultSetHandler实现类1ArrayHandlerArrayListHandler

5.1 概述

  • ArrayHandler是将一条记录封装到一个数组当中,这个数组是Object[]
  • ArrayListHandler是将多条记录封装到一个装有一个 Object[]list集合中

5.2 代码实现

  • 使用ArrayHandler实现查询一条记录
代码语言:javascript代码运行次数:0运行复制
/**
 * 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 实现查询多条记录
代码语言:javascript代码运行次数:0运行复制
/**
	 * 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. DBUtilsResultSetHandler实现类2—BeanHandlerBeanListHandler

6.1 概述

  • BeanHandler:将一条记录封装到一个JavaBean中
  • BeanListHandler:将多条记录封装到一个装有JavaBean的List集合中

6.2 代码实现

  • BeanHandler:将一条记录封装到一个JavaBean中
代码语言:javascript代码运行次数:0运行复制
/**
	 * 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集合中
代码语言:javascript代码运行次数:0运行复制
/**
	 * 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. DBUtilsResultSetHandler实现类3—MapHandlerMapListHandler

7.1 概述

  • MapHandler:将一条记录封装到一个Map集合中,Map的key是列名,Map的value是表中列的记录值
  • BeanListHandler:将多条记录封装到一个装有Map的List集合中

7.2 代码

  • MapHandler
代码语言:javascript代码运行次数:0运行复制
/**
	 * 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
代码语言:javascript代码运行次数:0运行复制
/**
	 * 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. DBUtilsResultSetHandler实现类4—ColumnListHandlerScalarHandlerKeyedHandler

  • ColumnListHandler:将数据中心的某列封装到list集合中
代码语言:javascript代码运行次数:0运行复制
/**
	 * 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集合中
代码语言:javascript代码运行次数:0运行复制
/**
	 * 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 删除后端集合入门数组对象

发布者:admin,转转请注明出处:http://www.yc00.com/web/1748000330a4717315.html

相关推荐

  • JavaWeb后端入门3—DBUtils

    1. 概述是什么Apache组织提供的一个对JDBC进行简单封装的开源工具库,能简化JDBC的开发,同时也不影响程序性能。就是对JDBC的简单封装为何要学习因为JDBC手写比较麻烦,且有很多代码是类似的,比如获得链接、预编译SQL、释放资源

    6小时前
    10

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信