在Hibernate中Query的uniqueResult查询。

转自品略图书馆:http://www.pinlue.com/article/2020/03/0920/1310003985022.html

 

以前写代码,总免不了编写登陆部分。在获取user的时候,只可能返回一个user实例,或者为null。以前使用以下方法实现。

Java代码

public User get(String id){

Session session=HibernateUtil.getSessionFactory().openSession();

String hql="from User u where u.id = ?";

List list=session.createQuery(hql).setString(0, id).list();

if (list.size()==1){

return (User)list.get(0);

}else{

return null;

}

}

public User get(String id){ Session session=HibernateUtil.getSessionFactory().openSession(); String hql="from User u where u.id = ?"; List list=session.createQuery(hql).setString(0, id).list(); if (list.size()==1){ return (User)list.get(0); }else{ return null; } }

昨天重读hibernate的参考手册,发现query接口提供了一个更好的方法用来获取实例,当返回的实例明确只有一个或者为null的时候。

uniqueResult

public Object uniqueResult()throws

抛出:当返回的实例大于一个的时候的抛出

对应的使用方法如下

Java代码

public User get(String id){

Session session=HibernateUtil.getSessionFactory().openSession();

String hql="from User u where u.id=?";

return (User)session.createQuery(hql).setString(0,id).uniqueResult();

public User get(String id){ Session session=HibernateUtil.getSessionFactory().openSession(); String hql="from User u where u.id=?"; return (User)session.createQuery(hql).setString(0,id).uniqueResult();

}

备注:感觉不是很实用呀,当查询条件不太确定是否只有一条记录时,这时候就出麻烦了。

  • 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、付费专栏及课程。

余额充值