需求说明
使用hibernate的项目,很多时候,用HQL语言查出来的对应的是数据库实体类;另外一些情况,需要查出来对应一个普通的类(或者现在流行的说法教DTO类),就是普通的SQL查询(NativeQuery)对应出来的类,很多现在用MyBatis的都有这种类似的需求。
实现
例如一个StudentDto.java
@Data public class StudentDto { private Long id; private Integer age; private String name; }
这里我们已经没有给这个类加@Entity和@Table注释了
StudentDaoImpl.java 下查询StudentDto的代码如下:
NativeQuery query = sessionFactory.getCurrentSession().createNativeQuery("select t.id, t.name, t.age from t_student t"); query.addScalar("id", new LongType()); query.addScalar("name", new StringType()); query.addScalar("age", new IntegerType()); query.setResultTransformer(Transformers.aliasToBean(StudentDto.class)); List<StudentDto> list = query.list();
综上,我们使用了ResultTransformer来将结果转换成普通的Dto类,另外需要把每个字段的类型指定类型(query.addScalar("id", new LongType()))这一点确实有点不太人性化,不能将类型推断出来。
文章评论