`
peijunlin2008
  • 浏览: 171916 次
  • 性别: Icon_minigender_1
  • 来自: 河北省
社区版块
存档分类
最新评论

hibernate纯sql查询结果集映射为DTO(VO,DO)

阅读更多
感谢glamey,paddy.w 两位兄弟的文章。原文链接如下: http://paddy-w.iteye.com/blog/888830

        假设我们现在有一个DTO,其属性包括两张表的属性,我们现在需要将sql语句查询得到的内容转为一个DTO对象,其解决方法如下:

String sql = "select u.userName as userName ,p.title as title ,p.addTime as addTime from user as u,post as p where u.id=p.userId"    
Query q = factory.getCurrentSession().createSQLQuery(sql).setResultTransformer(Transformers.aliasToBean(PostVO.class));
 

        上面select中as后面的内容必须和PostVO中属性名一致,这样就可以返回一个针对PostVO的一个集合。
        其实大家可以看下hibernate这一部分的源码就会发现,主要是使用了AliasToBeanResultTransformer这个类,通过sql的查询,会返回数组,然后hibernate根据数据表的映射,自动帮我们来set对应的字段属性,所以标红的部分务必要跟VO中的属性值一直,要不然会报错的。
        如果需要的话,大家也可以重写这个类。例如VOResultTransformer。然后在dao中更改成:
 
setResultTransformer(new VOResultTransformer(PostVO.class));  



另外,除了以上glamey的方法外,还有一种方法:

Query q = session.createQuery("select new com.hibernate.MsgInfo(m.id, m.cont, m.topic.title, m.topic.category.name) from Msg m");  
List<MsgInfo> list=q.list();  


其中,MsgInfo是DTO。值得注意的是,第二种方法中DTO必须提供带参数的构造方法,并且HQL语句中属性的位置要与构造方法中的位置一一对应。
分享到:
评论

相关推荐

    java术语(PO/POJO/VO/BO/DAO/DTO)

    DAO对象负责执行SQL查询或ORM框架操作,用于获取、存储和更新数据。这样,即使数据库结构改变,业务逻辑层的代码也无需改动。 6. DTO(Data Transfer Object,数据传输对象) DTO与VO类似,也是用于数据传输,但...

    eclipse插件,根据数据库表自动生成DTO(pojo)插件

    在生成的DTO和POJO类中,注解可以用来标记字段,以便于框架如Hibernate或MyBatis进行ORM(对象关系映射)操作。 `JavaBeanTool_2.0`可能是插件的一个版本号,暗示这个工具已经经过了多次迭代和优化。JavaBean是一种...

    strute+hibernate写的一个分页

    5. **封装并返回响应**:Struts2的Action类会将处理后的数据封装成一个VO(Value Object)或者DTO(Data Transfer Object),然后通过Result转发到相应的JSP页面或者JSON响应。 6. **前端展示**:在JSP页面上,利用...

    分页(struts和hibernate实现)

    6. **返回结果**:Action将查询到的分页数据包装成一个VO(Value Object)或者DTO(Data Transfer Object),并设置到ActionContext中,以便在JSP页面上展示。 7. **创建JSP页面**:在JSP页面上,使用Struts2的标签...

    Struts、Spring、Hibernate&Ajax;学习笔记总结

    通过 Hibernate,开发者可以使用面向对象的方式进行数据库操作,而无需编写 SQL 语句。 - **Session**:Hibernate 中用于与数据库交互的主要接口。 - **SessionFactory**:创建 Session 的工厂。 - **Transaction**...

    网上书城系统Struts+Hibernate+Mysql

    Action处理请求后,可能会调用Hibernate进行数据库操作,然后将结果封装成VO(Value Object)或DTO(Data Transfer Object),最后返回到JSP页面进行展示。 7. **安全与性能**:在实际应用中,还需要考虑安全性,...

    Spring对DAO的支持.doc

    - **数据传递对象(DTO/VO)**:封装业务数据的JavaBean类,用于在DAO和业务层之间传递信息。 例如,`PersonBean`作为DTO,`PersonDao`作为DAO接口,`PersonDaoImpl`作为DAO实现类。`PersonBean`包含了`id`, `name`...

    Java程序简历模板-适合Java程序员跳槽

    * 掌握 JavaEE 设计模式,如前端控制器、Dao、VO 与 DTO 等 * 掌握架构思想,如 IoC 容器、AOP 实现原理、独立服务的概念等 安全和权限控制知识点 * 掌握权限的设计和实现,包括 RBAC 权限模型的应用 * 掌握授权和...

    EX快速开发一个功能.docx

    3. **数据库映射hb.xml**:这里提到的hb可能是Hibernate的简写,hb.xml是Hibernate的配置文件,用于定义数据库映射规则,如对象关系映射(ORM),将数据库表映射为Java对象。 4. **DAO(Data Access Object)**:数据...

    Java Web开发学习路线图(JBoss Seam方向)

    4. **DAO模式**:了解DAO(Data Access Object)模式,掌握DO、PO、VO、DTO、Domain Object等术语的含义。 #### 七、企业级应用开发 1. **EJB2**:探索Enterprise JavaBeans 2.0规范,包括EntityBean和SessionBean...

    javaweb旅游小项目.rar

    7. **db**:可能包含数据库脚本或配置文件,如MySQL的.sql文件或Hibernate的XML映射文件。 8. **WEB-INF/classes**:编译后的Java类文件会被放在这里。 9. **README** 或 **doc**:可能包含项目说明、开发指南或API...

    阿里巴巴 Java 开发手册1.3.1(纪念版)

    - **强制规定**:类名使用UpperCamelCase风格,特殊类除外(如DO/BO/DTO/VO/AO/PO等)。 - 正例:MarcoPolo/UserDO/XmlService/TcpUdpDeal/TaPromotion - 反例:macroPolo/UserDo/XMLService/TCPUDPDeal/...

    阿里巴巴Java开发手册v1.2.0

    但特殊类如DO(Data Object)、BO(Business Object)、DTO(Data Transfer Object)、VO(View Object)、AO(Application Object)等除外。 - **正例**:UserDO/XmlService/TcpUdpDeal/TaPromotion - **反例**:...

    crud_client_api

    - **DTO/VO**(Data Transfer Objects/Value Objects):用于在服务和视图之间传递数据的对象。 - **Configuration**:配置文件,如`application.properties`或`application.yml`,用于设置应用的环境变量、数据库...

Global site tag (gtag.js) - Google Analytics