Dbutils的使用

文章目录

dbutils使用

QueryRunner(query_update)、BeanList\BeanHandler、MapList\MapHandler、ScalarHandler

  1. ResultSetHandler 的作用: QueryRunner 的 query 方法的返回值最终取决于query方法的 ResultHandler 参数的 handle 方法的返回值。
  2. BeanListHandler: 把结果集转为一个 Bean 的 List, 并返回. Bean 的类型在创建BeanListHanlder 对象时以 Class 对象的方式传入,可以适应列的别名来映射JavaBean 的属性名: String sql = “SELECT id, name customerName, email, birth FROM customers WHERE id = ?”;
    BeanListHandler(Class< T > type)
  3. BeanHandler: 把结果集转为一个 Bean, 并返回. Bean 的类型在创建 BeanHandler对象时以 Class 对象的方式传入BeanHandler(Class< T > type)
  4. MapHandler: 把结果集转为一个 Map 对象, 并返回。若结果集中有多条记录, 仅返回第一条记录对应的 Map 对象. Map 的键: 列名(而非列的别名), 值: 列的值。注意代表列的 key 不区分大小写。
  5. MapListHandler: 把结果集转为一个 Map 对象的集合, 并返回。Map 的键: 列名(而非列的别名), 值: 列的值。
  6. ScalarHandler: 可以返回指定列的一个值或返回一个统计函数的值,比如count(1)。
  7. ScalarHandler< T > 用于获取结果集中第一行某列的数据并转换成 T 表示的实际对象。
  8. ArrayHandler 用于获取结果集中的第一行数据,并将其封装到一个数组中,一列值对应一个数组元素。

单行数据处理:ScalarHandler,ArrayHandler,MapHandler,BeanHandler
多行数据处理:BeanListHandler,AbstractListHandler(ArrayListHandler,MapListHandler,ColumnListHandler),AbstractKeyedHandler(KeyedHandler,BeanMapHandler)
可供扩展的类:BaseResultSetHandler

在这里插入图片描述
对数据进行增删查改的简单工具类:
注意导包:commons-dbutils-1.3.jar

import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.sql.Connection;
import java.util.List;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import util.JdbcUtil;
/**
 * 这个一个dao称里的基本类,在于被具体的dao类,UserDao去继承它来用,不能new BaseDao()来直接用
 * 针对要操作各张数据表映射到java工程里java类,Product,...
 */
public class BaseDao<T> {
	// 简单化了SQL查询,它与ResultSetHandler组合在一起使用可以完成大部分的数据库操作,能够大大减少编码量
	QueryRunner queryRunner = new QueryRunner();
	private Class<T> clazz;
	public BaseDao() {
		// 用baseDao的构造方法初始化clazz属性
		Type superType = this.getClass().getGenericSuperclass();//拿到调用者的父类的类型
		if(superType instanceof ParameterizedType) {
			ParameterizedType pt = (ParameterizedType) superType;
			Type[] tarry = pt.getActualTypeArguments();// 返回一个类型数组,要第一个元素
			if(tarry[0] instanceof Class) {
				clazz = (Class<T>) tarry[0];
			}
		}
	}
	/**
	 * 查询数据表,取出sql语句结果集的第一条数据,封装成一个类的对象返回,支持事务
	 */
	public T get(String sql,Object... args) {
		Connection conn = null;
		T entity = null;
		try {
			conn = JdbcUtil.getConnection();
			entity = queryRunner.query(conn,sql,new BeanHandler<T>(clazz),args);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return entity;
	}
	/**
	 * 获取多条记录的通用方法,用泛型实现通用
	 */
	public List<T> getList(String sql,Object... args) {
		Connection conn = null;
		List<T> list = null;
		try {
			conn = JdbcUtil.getConnection();
			list = queryRunner.query(conn, sql, new BeanListHandler<>(clazz), args);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			JdbcUtil.clossAll();
		}
		return list;
	}
	/**
	 * 实现insert,update,delete通用方法
	 */
	public int update(String sql,Object... args) {
		Connection conn = null;
		int rows = 0;
		try {
			conn = JdbcUtil.getConnection();
			rows = queryRunner.update(conn, sql,args);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			JdbcUtil.clossAll();
		}
		return rows;
	}
	/**
	 * 通用的放回sql语句的结果只有一个数值的类型的查询,用户个数,count(id)
	 */
	public Object getValue(String sql,Object... args) {
		Connection conn = null;
		Object obj = null;
		try {
			conn = JdbcUtil.getConnection();
			obj = queryRunner.query(conn,sql, new ScalarHandler(),args);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			JdbcUtil.clossAll();
		}
		return obj;
	}	
}

各个方法实现的增删改查:
参考博客:https://blog.csdn.net/u013210620/article/details/52739897

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值