JDBC结果集转实体对象 支持实体属性(驼峰命名法)到数据库列名转换

工作中有时候不得不使用JDBC进行查询,此时最麻烦的就是手工从结果集中获取数据的过程,这里博主写了一个简单的工具类去做JDBC结果集和对应实体之间的转换,代码如下:

	/**
	 * 转换数据 JDBC结果集转实体
	 *
	 * @param resultSet 结果集
	 * @param clazz	实体字节码文件对象
	 * @param <T>	实体类型
	 * @throws Exception  sql异常 NoClass异常等等
	 */
	public static <T> List<T> exchangeData(ResultSet resultSet, Class<T> clazz) throws Exception {
   
   
		//获取全部类方法  包括父类的
		Method[] declaredMethods = clazz.getMethods();
		List<T> list = new ArrayList<>();
		ResultSetMetaData metaData = resultSet.getMetaData();
		while (resultSet.next()) {
   
   
			//反射实例化对象
			T obj = clazz.newInstance();
			//遍历类调用方法
			for (Method method : declaredMethods) {
   
   
				//获取方法名
				String name = method.getName();
				if (!name.startsWith("set")){
   
   
					//只要setter
					continue;
				}
				//获取数据库名 驼峰命名法转数据库字段命名法
				String dbName = getDbName(name);
				//遍历数据库所有列
				for (int i = 1; i <= metaData.getColumnCount(); i++) {
   
   
					//抓取指定列赋值
					if (metaData.getColumnName(i).equals(dbName)) {
   
   
						if (resultSet.getObject(i) != null) {
   
   
							//赋值
							setValue(obj,method,resultSet,i);
						}
						break;
					}
				}
			}
			list.add(obj);
		}
		return list;
	}

	/**
	 *  赋值操作,
	 *  	主要是处理数据类型
	 *  		此处只简单处理下基本数据类型和Date类型
	 * @param obj	泛型对象
	 * @param method	方法
	 * @param resultSet	结果集
	 * @param i	脚标
	 * @param <T>	泛型
	 */
	private static <T> void setValue(T obj, Method method, ResultSet resultSet, int i) throws SQLException, InvocationTargetException, IllegalAccessException {
   
   
		//Setter方法只有一个参数,获取参数类型名称
		String name = method
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值