感谢glamey兄弟的文章,正好解决了当前遇到的问题。原文链接如下:
http://glamey.iteye.com/blog/721019
假设我们现在有一个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语句中属性的位置要与构造方法中的位置一一对应。
分享到:
相关推荐
DAO对象负责执行SQL查询或ORM框架操作,用于获取、存储和更新数据。这样,即使数据库结构改变,业务逻辑层的代码也无需改动。 6. DTO(Data Transfer Object,数据传输对象) DTO与VO类似,也是用于数据传输,但...
在生成的DTO和POJO类中,注解可以用来标记字段,以便于框架如Hibernate或MyBatis进行ORM(对象关系映射)操作。 `JavaBeanTool_2.0`可能是插件的一个版本号,暗示这个工具已经经过了多次迭代和优化。JavaBean是一种...
5. **封装并返回响应**:Struts2的Action类会将处理后的数据封装成一个VO(Value Object)或者DTO(Data Transfer Object),然后通过Result转发到相应的JSP页面或者JSON响应。 6. **前端展示**:在JSP页面上,利用...
6. **返回结果**:Action将查询到的分页数据包装成一个VO(Value Object)或者DTO(Data Transfer Object),并设置到ActionContext中,以便在JSP页面上展示。 7. **创建JSP页面**:在JSP页面上,使用Struts2的标签...
通过 Hibernate,开发者可以使用面向对象的方式进行数据库操作,而无需编写 SQL 语句。 - **Session**:Hibernate 中用于与数据库交互的主要接口。 - **SessionFactory**:创建 Session 的工厂。 - **Transaction**...
Action处理请求后,可能会调用Hibernate进行数据库操作,然后将结果封装成VO(Value Object)或DTO(Data Transfer Object),最后返回到JSP页面进行展示。 7. **安全与性能**:在实际应用中,还需要考虑安全性,...
- **数据传递对象(DTO/VO)**:封装业务数据的JavaBean类,用于在DAO和业务层之间传递信息。 例如,`PersonBean`作为DTO,`PersonDao`作为DAO接口,`PersonDaoImpl`作为DAO实现类。`PersonBean`包含了`id`, `name`...
* 掌握 JavaEE 设计模式,如前端控制器、Dao、VO 与 DTO 等 * 掌握架构思想,如 IoC 容器、AOP 实现原理、独立服务的概念等 安全和权限控制知识点 * 掌握权限的设计和实现,包括 RBAC 权限模型的应用 * 掌握授权和...
3. **数据库映射hb.xml**:这里提到的hb可能是Hibernate的简写,hb.xml是Hibernate的配置文件,用于定义数据库映射规则,如对象关系映射(ORM),将数据库表映射为Java对象。 4. **DAO(Data Access Object)**:数据...
4. **DAO模式**:了解DAO(Data Access Object)模式,掌握DO、PO、VO、DTO、Domain Object等术语的含义。 #### 七、企业级应用开发 1. **EJB2**:探索Enterprise JavaBeans 2.0规范,包括EntityBean和SessionBean...
7. **db**:可能包含数据库脚本或配置文件,如MySQL的.sql文件或Hibernate的XML映射文件。 8. **WEB-INF/classes**:编译后的Java类文件会被放在这里。 9. **README** 或 **doc**:可能包含项目说明、开发指南或API...
- **强制规定**:类名使用UpperCamelCase风格,特殊类除外(如DO/BO/DTO/VO/AO/PO等)。 - 正例:MarcoPolo/UserDO/XmlService/TcpUdpDeal/TaPromotion - 反例:macroPolo/UserDo/XMLService/TCPUDPDeal/...
但特殊类如DO(Data Object)、BO(Business Object)、DTO(Data Transfer Object)、VO(View Object)、AO(Application Object)等除外。 - **正例**:UserDO/XmlService/TcpUdpDeal/TaPromotion - **反例**:...
- **DTO/VO**(Data Transfer Objects/Value Objects):用于在服务和视图之间传递数据的对象。 - **Configuration**:配置文件,如`application.properties`或`application.yml`,用于设置应用的环境变量、数据库...