感谢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语句中属性的位置要与构造方法中的位置一一对应。
分享到:
相关推荐
J2EE基础知识之DTO,VO,PO,DO等定义J2EE基础知识之DTO,VO,PO,DO等定义J2EE基础知识之DTO,VO,PO,DO等定义
jpa复杂查询,映射到具体的DTO上就比较复杂,需要类型完全匹配,还要求要建造构造函数,而且只能使用jpql查询,非常麻烦,querydsl也不方便,代码太长,后期维护的时候看上去也不直观。复杂sql还是采用原生sql比较...
如果想生成未预置的代码,如vo对象、前端vue页面以及其他自定义代码等,需要做一些定制和扩展来实现。 从使用角度而言,官方资料介绍得比较简要,要实际使用,仍然需要进行具体的尝试和摸索,包括必要时看下源码...
JAVA 中 的 什 么 是 POJO、VO、PO、DO、DTO 都 是 什 么 ? 他 们 有 什 么 区 别 ?
NULL 博文链接:https://ewf-momo.iteye.com/blog/1738853
让繁琐的的数据集不需要开发者自己动手就可以封装的对应的bean中去
Java中 PO VO BO DTO DAO 和 POJO 关系图
简单来说,当我们需要一个对象10个字段的内容,但这个对象总共有20个字段,我们不需要把整个PO对象全部字段传输到客户端,而是可以用DTO重新封装,传递到客户端。
直接返回VO 特征 支持一个实体映射到多个表 支持动态字段运算符 支持分组和聚合查询 支持选择 | 地点 | 从子查询 支持实体中的嵌入参数 支持现场转换器 支持sql拦截器 支持sql方言扩展 支持多数据源和动态数据源 ...
主要介绍了使用Java 8 Lambda表达式将实体映射到DTO的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
专注高级查询的只读 ORM,天生支持联表,免 DTO/VO 转换,使一行代码实现复杂列表检索成为可能。支持 实体多表映射。支持 动态字段运算符。支持 分组聚合 查询。支持 Select | Where | From 子查询。支持 实体类嵌入...
java简单基础 需要的了解一下 我们大家还是有必要去区分的
主要介绍了java实现相同属性名称及相似类型的pojo、dto、vo等互转操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
NULL 博文链接:https://eddysoft.iteye.com/blog/1941484
PO可以严格对应数据库表,一张表对映一个PO。... VO:value object值对象、view object视图对象 PO:持久对象 QO:查询对象 DAO:数据访问对象——同时还有DAO模式 DTO:数据传输对象——同时还有DTO模式
您需要以某种方式将所有属性从基本实体映射到DTO实体,反之亦然,如果您无需手动映射属性即可自动执行此操作,那将是很好的选择。 这是我们可以使用ModelMapping实现的方法... 项目结构。 用户模型 在这里,我们有...
目前,该插件将读取您现有类的所有字段,并将它们复制到一个目标类,该类的名称与您当前类的名称相同,前缀为DTO 。 它将为您的所有字段生成 getter 和 setter。 注意:如果一个属性扩展了 Collection 类,它将为您...
J2EE开发人员必须知道 Java Web开发中VO、PO、DTO、POJO代表含义。
dto-mapper:仅需使用库即可通过打字稿装饰器映射DTO