BlogJava-本人已死,有事烧纸http://www.blogjava.net/nico/-nicozh-cnSat, 10 May 2025 14:34:20 GMTSat, 10 May 2025 14:34:20 GMT60突然灵感:SQL查询结果和POJO的映射http://www.blogjava.net/nico/archive/2008/01/30/178586.htmlNicoNicoWed, 30 Jan 2008 13:28:00 GMThttp://www.blogjava.net/nico/archive/2008/01/30/178586.htmlhttp://www.blogjava.net/nico/comments/178586.htmlhttp://www.blogjava.net/nico/archive/2008/01/30/178586.html#Feedback0http://www.blogjava.net/nico/comments/commentRss/178586.htmlhttp://www.blogjava.net/nico/services/trackbacks/178586.html     结合工作中的实际情况。忽然发现,大部分的模块都会有查询功能。尽管很多项目都使用了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));
    }
}

Nico 2008-01-30 21:28 发表评论
]]>