以前写代码,总免不了编写登陆部分。在获取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
;
-
}
-
}
昨天重读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();
-
-
}
如果查询结果有多个值则抛出错误;
如果查询结果有且只有一个值,返回一个object;
如果没值,返回null
分享到:
相关推荐
这里的 `setParameter()` 方法用于设置参数,`uniqueResult()` 方法用于获取唯一的查询结果。 总结来说,`HibernateUtil` 类的完善意味着优化数据库操作的便捷性,而 HQL 查询则提供了灵活且强大的对象查询能力。...
例如,使用Session的createCriteria()或createQuery()方法,然后添加查询条件,最后调用list()或uniqueResult()获取结果。 6. **缓存机制** Hibernate支持一级缓存(Session级别的)和二级缓存(SessionFactory...
- `uniqueResult()` 返回查询结果的唯一对象,如果结果集为空或有多个结果,会抛出异常。 - `iterator()` 只检索对象的 ID 字段,用于遍历结果集。`load()` 方法则用于按需加载对象,减少内存消耗。 8. **缓存...
- Query对象是HQL查询的核心,通过调用Session的createQuery()方法创建Query实例,并通过setXXX()方法设置参数,最后执行list()、uniqueResult()等方法获取查询结果。 - HQL查询步骤包括获取Session、编写HQL、...
`load()`返回一个代理对象,如果数据不存在会抛出异常。`load()`默认支持懒加载,而`get()`在找不到数据时会立即执行SQL查询。 **HQL(Hibernate Query Language)** HQL是Hibernate提供的面向对象的查询语言,与...
- `uniqueResult()`方法:执行查询并返回唯一结果,如果没有结果返回null,如果有多个结果则抛出异常。 通过以上介绍可以看出,Hibernate不仅提供了强大的配置和映射机制,还提供了丰富的API支持,使得开发人员...
- 构建一个带参数的查询,使用`setParameter`方法设置参数值,然后执行查询。 #### 实验十三:Query-namedQuery **实验目的:** - 理解并使用`namedQuery`功能。 **实验步骤:** - 定义一个命名查询并在`...
`List()`返回查询结果列表,`uniqueResult()`返回唯一结果,如果结果不唯一会抛出异常。 7. **映射文件`: `.hbm.xml`文件是Hibernate对象和数据库表之间的映射描述。它定义了类名、表名、主键生成策略等。例如,`...
Hibernate HQL,全称为Hibernate Query Language,是Hibernate框架中用于操作数据库的一种面向对象的查询语言。它允许开发者用面向对象的方式来编写查询语句,极大地提高了开发效率和代码的可读性。以下是对HQL的...
但需要注意的是,如果查询结果不唯一,则不能使用此方法,否则会抛出异常。 #### 六、分页查询 为了提高性能并减少数据传输量,分页查询是一种常用的优化手段。HQL提供了 `setFirstResult()` 和 `setMaxResult()` ...
- 如果找不到匹配的记录,可能会抛出`org.hibernate.ObjectNotFoundException`异常。 - 只有当真正访问对象的属性时,才触发数据库查询。如果配置了代理模式,那么`load()`会返回一个代理对象,而不是立即加载实体...
6. **执行查询**:执行 HQL 查询通常使用 `query.list()` 获取结果列表,如果确定结果只有一条,可以使用 `query.uniqueResult()` 获取单个对象,否则可能会抛出异常。 7. **查询语句**:HQL 包括多种查询方式: -...
与`load`方法不同的是,`get`在找不到对象时返回null,而`load`会抛出`ObjectNotFoundEcception`异常,因此`get`在效率上稍有优势。 5. `save(Object entity)`:保存一个新的实例到数据库。在执行前,通常会使用`...
使用`Session`的`load()`或`get()`方法可获取特定用户,但为了性能考虑,通常使用HQL(Hibernate Query Language)或Criteria API进行查询。例如: ```java Session session = sessionFactory.openSession(); ...
当我们在前端尝试直接查询 `strategy` 表时,如果HQL(Hibernate Query Language)简单地写成 `From Strategy where id=:id`,那么由于默认的懒加载,当试图获取关联对象属性时,由于Session已经关闭,就会抛出“no ...