以前写代码,总免不了编写登陆部分。在获取user的时候,只可能返回一个user实例,或者为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;
- }
- }
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 HibernateException
返回:单个实例或者null
抛出:当返回的实例大于一个的时候的抛出NonUniqueResultException
对应的使用方法如下
- 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();
分享到:
相关推荐
在Java的Hibernate框架中,有时候我们需要执行自定义的SQL查询以获取特定的数据,这时就可以使用SQLQuery接口。本文将深入探讨Hibernate如何通过SQLQuery接口执行原生SQL查询,并展示如何处理查询结果。 一、创建...
在Java的持久化框架Hibernate中,有时我们需要使用原生的SQL查询来实现特定的数据库操作,这时就需要利用到SQLQuery接口。本篇文章将详细解析如何使用Hibernate的SQLQuery来进行本地SQL查询,并探讨其各种应用场景。...
我们也可以使用 `SQLQuery` 对象来执行原生 SQL 语句,该对象提供了多种方法来执行查询,例如 `list()` 方法、`uniqueResult()` 方法等。 例如,我们可以使用以下代码来执行一个原生 SQL 语句: ```java SQLQuery ...
Query 接口支持方法链编程风格,将上面所有步骤写入一句程序代码中。 四、QBC 检索 QBC 是一种使用 Query By Criteria API 来检索对象的方式,该 API 封装了基于字符串形式的查询语句,提供了更加面向对象的查询...
总之,Hibernate的SQLQuery接口提供了一种灵活的方式来执行原生SQL查询,并将结果映射到Java对象。通过使用别名、结果集映射和命名SQL查询,开发者可以处理复杂的数据库交互,同时保持代码的清晰和整洁。
- 执行查询后,调用`Query`对象的`uniqueResult`方法获取单个结果。 #### 实验十六:Query-iterator()方法 **实验目的:** - 掌握`Query`对象的`iterator`方法。 **实验步骤:** - 执行查询后,调用`Query`对象...
`或命名参数`:param`实现,然后使用`Query`对象的`setString`、`setInteger`等方法赋值。 联合查询可以使用逗号分隔多个实体,例如`select s.name from Student s, Clazz c where s.clazzId=c.id`。对于分页查询,...
return (Long) query.uniqueResult(); } @Override public List getList(PageBean page) throws Exception { Session session = getSessionFactory().getCurrentSession(); Query query = session....
User user = query.uniqueResult(); if (user != null) { tx.commit(); return user; } else { tx.rollback(); return null; } } catch (Exception e) { if (tx != null) { tx.rollback(); } e....
5. 执行查询:最后,调用Criteria的list()或uniqueResult()方法获取结果。 在Spring框架中,HibernateTemplate提供了一种方便的方式来执行DetachedCriteria查询,通过getHibernateTemplate().findByCriteria...
例如,使用Session的createCriteria()或createQuery()方法,然后添加查询条件,最后调用list()或uniqueResult()获取结果。 6. **缓存机制** Hibernate支持一级缓存(Session级别的)和二级缓存(SessionFactory...
Query接口用于执行HQL(Hibernate Query Language)查询,提供List、uniqueResult、setString、setParameterList等方法。 5. **POJO(Plain Old Java Object)** POJO是与Hibernate关联的Java对象,有瞬时态、...
**QBC(Query By Example)**是Hibernate框架中的一种查询方式,它允许开发者通过实例对象来构造查询条件,提供了一种更加面向对象的查询方法。QBC查询在处理复杂的动态查询时尤其方便,因为它可以避免编写大量的SQL...
return ((Long) query.uniqueResult()).intValue(); // 返回总记录数 } } ``` ##### 2. Service 层设计 Service 层负责业务逻辑处理,调用 DAO 层提供的方法。 ```java @Service public class KindEntityService...
泛型是Java SE 5.0引入的新特性,它允许在类、接口和方法中使用类型参数,从而实现更强大的类型检查和减少类型转换的冗余。 1. 泛型BaseDAO:`GenericBaseDao.java`和`GenericBaseDaoInter.java` 泛型BaseDAO的主要...
7. **Query接口**:提供了执行HQL和SQL查询的API,如`createQuery()`, `createSQLQuery()`, `list()`, `uniqueResult()` 等方法。 8. **实体(Entity)**:是Hibernate中代表数据库表的Java类,通常使用`@Entity`...
4. **执行查询**:调用Query对象的list或uniqueResult等方法执行查询并获取结果。 5. **关闭Session**:查询完毕后,确保关闭Session以释放资源。 通过以上详尽的解析,我们可以看出,理解和掌握Hibernate中的关联...
Dept dept = (Dept) query.uniqueResult(); System.out.println(dept.getDeptDesc()); session.close(); return dept; } ``` 这个示例展示了如何使用HQL进行查询,并获取唯一结果。通过这种方式,可以方便地从...
5. **执行查询并处理结果**:调用`SQLQuery`对象的`executeUpdate()`方法执行DML语句(INSERT, UPDATE, DELETE),或`list()`、`uniqueResult()`等方法获取查询结果。对于返回的结果集,可以使用Hibernate提供的API...