刚刚看了一篇关于IBM的pureQuery的介绍。
结合工作中的实际情况。忽然发现,大部分的模块都会有查询功能。尽管很多项目都使用了hibernate,但是,查询结果页面上的数据一般都不会是单纯某个hibernate entity object所具备的,很多都是几张表的数据凑起来的。要是再加上分页要求的话,使用HQL查询似乎有困难。使用纯SQL,JDBC查询的话相对简单,但是,每个地方都会编写几乎雷同的代码。而这种情况出现多次的话,大家都会去COPY,PASTE。很快,各种小问题就跟着来了。
所以,写一个实现如标题的小工具应该很有实用性。
public class SQLResults2POJOUtil {
public SQLResults2POJOUtil (java.sql.Connection queryConnection) {
...
}
public List query(String sql, Object[] params, Class pojoClass) throws java.sql.SQLException {
/* 第一步:执行SQL查询,得到结果集。
* 第二步:将结果集中的每个column的name和pojoClass中的相关属性的set方法关联起来。
* 第三步:遍历结果集的每个数据,设置到pojoClass的实例。
* 最后:返回pojoClass集合。
* 这里面有2个关键点,第一是column name和属性名称匹配时要忽略大小写,忽略下划线
* 第二点是实际设置pojoClass实例的值时还要记得类型转换(常规转化就那么几种,可以考虑建立转化注册机制,方便实际使用中特殊类型转化的扩展需要)。
*/
}
public List query(String sql, Class pojoClass) throws java.sql.SQLException {
return (query(sql, null, pojoClass));
}
}