文档章节

通过反射解析 jdbc中 的 ResultSet

oldfeel
 oldfeel
发布于 2015/08/30 04:46
字数 168
阅读 178
收藏 6
private <T extends Object> T getResult(Class<?> className, String sql,
			String... params) {
		List<?> list = getResultList(className, sql, params);
		if (list != null && list.size() > 0) {
			return (T) list.get(0);
		}
		return null;
	}

	private <T extends List<?>> T getResultList(Class<?> className, String sql,
			String... params) {
		try {
			PreparedStatement st = conn.prepareStatement(sql);
			for (int i = 1; i <= params.length; i++) {
				st.setString(i, params[i - 1]);
			}
			List<Object> list = new ArrayList<>();
			ResultSet result = st.executeQuery();

			Field[] fields = className.getFields();
			while (result.next()) {
				Object object = className.newInstance();
				for (int i = 0; i < fields.length; i++) {
					Field field = fields[i];
					field.setAccessible(true);
					Class<?> typeClass = field.getType();
					Constructor<?> con = typeClass.getConstructor(typeClass);
					Object value = con.newInstance(result.getString(field
							.getName()));
					field.set(object, value);
				}
				list.add(object);
			}
			return (T) list;
		} catch (NoSuchMethodException e) {
			e.printStackTrace();
		} catch (SecurityException e) {
			e.printStackTrace();
		} catch (InstantiationException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		} catch (IllegalArgumentException e) {
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return null;
	}

注意:类的变量名必须与数据表中的字段名相同.

© 著作权归作者所有

共有 人打赏支持
oldfeel
粉丝 45
博文 78
码字总数 17297
作品 0
防城港
个人站长
私信 提问
加载中

评论(2)

oldfeel
oldfeel

引用来自“zigzagroad”的评论

这样封装的性能太差了,forName在第一个循环前执行一次就可以,获得属性集合也是
好的,谢谢,我改一下.
zigzagroad
zigzagroad
这样封装的性能太差了,forName在第一个循环前执行一次就可以,获得属性集合也是
MyBatis源码窥探:MyBatis整体架构解析

Mybatis的使用这里就不介绍了,不知道怎么使用的朋友可以点击 http://www.mybatis.org/mybatis-3/zh/index.html 这里面的教程很详细,包括xml的配置、映射、动态sql都有介绍,可以学习和使用...

java邵先生
01/15
0
0
从 java bean 的内省到 dbutils 的应用

java bean 内省的基础 java bean 的内省,其实可以算是反射的一种基础应用,关于 java 的反射,无非就是获得对应的类、属性、方法、修饰符等的应用,对于 java 的反射探讨,可以点击参考 ja...

peiquan
2018/07/04
0
0
Mybatis 类型转换源码分析

本文将从以下几个方面进行介绍 相关文章 前言 类型处理器 类型注册器 别名注册器 相关文章 Mybatis 解析配置文件的源码解析 前言 JDBC 提供的数据类型和Java的数据类型并不是完全对应的,当 ...

tsmyk0715
2018/11/04
0
0
深入分析 iBATIS 框架之系统架构与映射原理

简介: iBATIS 通过 SQL Map 将 Java 对象映射成 SQL 语句和将结果集再转化成 Java 对象,与其他 ORM 框架相比,既解决了 Java 对象与输入参数和结果集的映射,又能够让用户方便的手写使用 ...

老盖
2010/11/11
2.2K
3
[IBM DW] 深入分析 iBATIS 框架之系统架构与映射原理

简介: iBATIS 通过 SQL Map 将 Java 对象映射成 SQL 语句和将结果集再转化成 Java 对象,与其他 ORM 框架相比,既解决了 Java 对象与输入参数和结果集的映射,又能够让用户方便的手写使用 ...

红薯
2010/11/13
1K
2

没有更多内容

加载失败,请刷新页面

加载更多

filebeat multiline配置(转)

使用filebeat5.0.1版本,用filebeat作为日志收集工具时: java日志格式需要多行匹配,在filebeat配置文件中添加: ### Multiline options # Mutiline can be used for log messages spanning...

xiaomin0322
24分钟前
1
0
ConstraintLayout的基本使用

<?xml version="1.0" encoding="utf-8"?><android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="ht......

SuShine
28分钟前
1
0
ActiveMQ多个消费者消费不均匀问题

如果客户端处理很慢的话,Broker会在之前发送消息的反馈之前,继续发送新的消息到客户端。如果客户端依旧很慢的话,没有得到确认反馈的消息会持续增长。在这种情况下,Broker有可能会停止发送...

编程SHA
29分钟前
1
0
【机器学习PAI实战】—— 玩转人工智能之综述

模型训练与在线预测服务、推荐算法四部曲、机器学习PAI实战、更多精彩,尽在开发者分会场 【机器学习PAI实战】—— 玩转人工智能之商品价格预测 【机器学习PAI实战】—— 玩转人工智能之你最...

阿里云云栖社区
32分钟前
1
0
根据国务院2019年劳动节假期安排五一放假四天 免费节假日api第一时间调整

根据国务院发布http://www.gov.cn/zhengce/content/2019-03/22/content_5375877.htm 以下为原文 国务院办公厅关于调整 2019年劳动节假期安排的通知 国办发明电〔2019〕3号 各省、自治区、直辖...

xiaogg
37分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部