在我的DAO层中,我有一个类似的Find函数
public List<?> findCategoryWithSentenceNumber(int offset, int maxRec) { Criteria crit = getSession().createCriteria(Category.class, "cate"); crit.createAlias("cate.sentences", "sent"); crit.setProjection(Projections.projectionList(). add(Projections.property("title"), "title"). add(Projections.count("sent.id"), "numberOfSentence"). add(Projections.groupProperty("title")) ); crit.setFirstResult(offset); crit.setMaxResults(maxRec); return crit.list(); }
因此,为了读取数据,我必须使用Loop(带有Iterator)
Iterator
List<?> result = categoryDAO.findCategoryWithSentenceNumber(0, 10); // List<DQCategoryDTO> dtoList = new ArrayList<>(); for (Iterator<?> it = result.iterator(); it.hasNext(); ) { Object[] myResult = (Object[]) it.next(); String title = (String) myResult[0]; Long count = (Long) myResult[1]; assertEquals("test", title); assertEquals(1, count.intValue()); // dQCategoryDTO = new DQCategoryDTO(); // dQCategoryDTO.setTitle(title); // dQCategoryDTO.setNumberOfSentence(count); // dtoList.add(dQCategoryDTO); }
我的问题是:是否有任何api框架可以轻松地将其转换List<?> result为DTO对象列表(例如DQCategoryDTO),而无需使用任何循环,迭代器和调用setter / getter来填充值?
List<?> result
DTO
您可以使用ResultTransformer,它可以从别名转换为bean(DTO)属性。对于用法,您可以在此处的Hibernate文档第13.1.5节中找到。