Hibernate Native SQL查询常用的2种方法及对返回结果处理

1.直接返回List结果集,不包括列名信息

List ls = session.createSQLQuery(querySql).list();

如果当前查询SQL里包括多列,则List里每行存放的是Object数组,如果直接查询的是一列,则每行存放的则直接就是查询的哪一列的数据。
也可以在返回的结果数据里指定每一列的类型
List ls2 = session.createSQLQuery(querySql).addScalar("column_name", Hibernate.DATE).list();
这样返回的数据的时候Hiberante就会对返回的数据转换成你指定的数据类型.这个是在3.1版本就支持的操作。

2.返回包括列名信息,可以是数据每行转换成一个Map形式。则KEY对应列名,VALUE对应当前列的值。
实现方法如下:

List ls3 = session.createSQLQuery(querySql).setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP).list();

这样返回的结果集每行就是Map(key:column,value:columnValue);还可以使用其他的一些Hibernate定义好的一些ResultTransformer方法的实现类。具体可以参考org.hibernate.criterion.CriteriaSpecification里定义的一些。
当然列可以实现自己的数据组装方法,只需要实现ResultTransformer接口就行了。
注意:ResultTransformer实现新版本的Hibernate才支持


以上例子说明的两种方法是没有Hibernate的mapping对象的概念。直接和JDBC返回的结果差不多。
如果想支持返回数据为Hibernate的Entity可以具体参考Hibernate参考文档里的 Native SQL查询一章的实现方法。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用Hibernate Native Query查询并返回DTO的步骤如下: 1. 创建一个DTO类,它包含你想要返回的字段的属性。 ```java public class UserDTO { private int id; private String username; private String email; // getters and setters } ``` 2. 编写一个SQL查询,使用Hibernate Native Query执行查询,并将结果映射到DTO对象中。 ```java String sql = "SELECT id, username, email FROM users WHERE id = :id"; Query query = session.createNativeQuery(sql) .setParameter("id", id) .setResultTransformer(Transformers.aliasToBean(UserDTO.class)); UserDTO user = (UserDTO) query.uniqueResult(); ``` 在这个例子中,我们编写了一个SQL查询,并使用Hibernate Native Query执行查询。我们使用setParameter方法设置查询参数,并使用setResultTransformer方法将查询结果映射到UserDTO对象中。 Transformers.aliasToBean方法是一个Transformer实现,它可以将查询结果自动映射到一个JavaBean对象中。在这里,我们将UserDTO.class传递给这个方法,表示将查询结果映射到UserDTO对象中。 3. 在Java代码中,使用Hibernate Session执行查询。 ```java Session session = sessionFactory.openSession(); Transaction tx = session.beginTransaction(); UserDTO user = null; try { String sql = "SELECT id, username, email FROM users WHERE id = :id"; Query query = session.createNativeQuery(sql) .setParameter("id", id) .setResultTransformer(Transformers.aliasToBean(UserDTO.class)); user = (UserDTO) query.uniqueResult(); tx.commit(); } catch (Exception e) { if (tx != null) { tx.rollback(); } e.printStackTrace(); } finally { session.close(); } ``` 在这个例子中,我们使用Hibernate Session打开一个数据库会话,并在try-catch-finally块中执行查询。我们使用createNativeQuery方法创建一个Hibernate Native Query对象,并使用setParameter和setResultTransformer方法设置查询参数和结果转换器。最后,我们使用uniqueResult方法获取查询结果,并提交或回滚事务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值