Hibernate下NativeQuery的SQL映射普通DTO类的实现

2022-05-07 965点热度 0人点赞 0条评论

需求说明

使用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()))这一点确实有点不太人性化,不能将类型推断出来。

 

 

admin

这个人很懒,什么都没留下

文章评论

您需要 登录 之后才可以评论