在hibernate中,运用doInHibernate,避免了手动open session和close session ,减少了一系列session关闭的麻烦。
公用的setParameter 方法,下面有调用,传入一个query 实例,和Map<String, Object> map 类型的参数
private void setParameter(Query query, Map<String, Object> map) {
if (map != null && !map.isEmpty()) {
Set<String> keySet = map.keySet();
for (String string : keySet) {
Object obj = map.get(string);
// 这里考虑传入的参数是什么类型,不同类型使用的方法不同
if (obj instanceof Collection<?>) {
query.setParameterList(string, (Collection<?>) obj);
} else if (obj instanceof Object[]) {
query.setParameterList(string, (Object[]) obj);
} else {
query.setParameter(string, obj);
}
}
}
}
updateByHql:
public void updateByHql(final String hql, final Map<String, Object> map) throws Exception {
template.execute(new HibernateCallback() {
@Override
public Object doInHibernate(Session session) throws HibernateException, SQLException {
Query query = session.createQuery(hql);
//调用set参数的方法
setParameter(query, map);
query.executeUpdate();
return null;
}
});
}
findByHql:
public List<Object> findByHql(final String hql, final Map<String, Object> map) throws Exception {
return (List<Object>) template.execute(new HibernateCallback() {
public List<Object> doInHibernate(final Session session) throws HibernateException, SQLException {
Query query = session.createQuery(hql);
setParameter(query, map);
/*
* StringBuffer sb = new StringBuffer(); Query query0 =
* session.createSQLQuery(sb.toString());//<STRONG>执行普通sql</STRONG> Query query1 =
* session.createQuery(sb.toString());// <STRONG>执行hql </STRONG>
*/
return query.list();
}
});
}
调用例子:
String hql = "from ABC where bb = :aa";
Map<String, Object> map = new HashMap<String, Object>();
map.put("aa", 22);
List<Object> cList = commonDao.findByHql(hql, map);
if (cList == null || cList.size() == 0)
return null;
else
return (ABC) cList.get(0);
update类似与query,只是没有返回参数
相关推荐
在上面的代码中,我们使用 `HibernateCallback` 接口来执行原生 SQL 语句,该接口提供了一个 `doInHibernate()` 方法,该方法将在 Hibernate 事务中执行。我们可以在该方法中执行原生 SQL 语句,并使用 `Connection`...
在Hibernate中,可以通过`Query`对象的`setFirstResult()`和`setMaxResults()`方法来实现分页查询。其中: - `setFirstResult(int firstResult)`:设置从第几条记录开始查询。 - `setMaxResults(int maxResults)`:...
本篇将详细讲解如何在Hibernate中进行分页查询,并结合Spring和Struts2进行整合应用。 首先,我们来看DAO层的设计。在分页查询中,我们需要两个核心方法:一个用于执行具体的分页查询,另一个用于获取所有记录的...
在Spring的配置文件中,可以通过如下方式来配置Hibernate和Spring的集成: ```xml xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx=...
在这个接口中,我们可以定义一个方法来接收偏移量和每页大小,然后调用之前在`MyHibernateDaoSupport`中定义的分页查询方法。 在服务层,我们可以注入这个`StudentDao`,并通过调用`findAllByPage()`来实现对学生的...
通常,程序中采用实现HibernateCallback的匿名内部类来获取HibernateCallback的实例,方法doInHibernate()就是Spring执行的持久化操作。 24.3 Spring对Hibernate的简化 24.3.5 HibernateDaoSupport Spring为与...
- **`CriteriaQuery`** 类用于封装Hibernate的QBC查询方法,接受实体类类型、当前操作、当前页码等参数,以便构造出相应的上下翻页工具条。 - **`findAllRole`** 方法是用于从数据库中获取角色列表的具体实现,它...
通过`HibernateTemplate`的`execute`方法传入一个实现了`HibernateCallback`接口的对象,可以在回调方法中执行任意的Hibernate操作。 ```java public class PersonDaoImpl extends HibernateDaoSupport implements ...
此外,`HibernateTemplate`还支持`HibernateCallback`接口,允许开发者在回调方法`doInHibernate(Session session)`中使用原生的Hibernate API,以应对更复杂的数据访问需求。这种方法确保了灵活性,即使在Spring的...
在Spring框架中整合Hibernate是为了提供更高效、便捷的数据访问和事务管理能力。Spring整合Hibernate主要有以下三种方式: 1. **使用HibernateTemplate** HibernateTemplate是Spring早期为了简化Hibernate操作而...
在Hibernate中,实现分页主要通过`setMaxResults()`和`setFirstResult()`这两个方法。其中: - `setMaxResults(int maxResult)`:设置每页显示的数据量。 - `setFirstResult(int index)`:设置从哪条记录开始查询。...
其中`queryForPage`方法用于执行分页查询,接受HQL(Hibernate Query Language)查询语句、偏移量和查询长度作为参数;`getAllRowCount`方法用于获取符合查询条件的总记录数。 **实现类**: ```java public class ...
在提供的代码示例中,`doInHibernate` 方法展示了如何使用Hibernate调用不带参数返回值的存储过程。首先,我们需要创建一个`Session`对象,然后开始一个事务。接下来,通过`session.createSQLQuery`创建一个SQL查询...
在企业级应用开发中,Struts2、Hibernate 和 Spring(通常简称为 SSH 框架)是三个非常重要的技术栈。它们各自解决不同的问题,并且通过良好的集成可以构建出高效、稳定的应用系统。本文将详细介绍如何在 Struts2 + ...
在Hibernate中,我们可以使用`setFirstResult()`和`setMaxResults()`方法来实现分页。假设每页显示10条记录,你想获取第5页的数据,你可以这样做: ```java int pageSize = 10; int currentPage = 5; int ...
- **DAO层**:`UserDao`接口定义了获取用户信息的方法,而`UserDaoImpl`类实现了这些方法,并通过Hibernate的映射来查询数据库。 ```java public interface UserDao { List<User> getName(String id); } ...
在Hibernate中,我们可以利用`Session`对象的`createQuery()`方法创建HQL(Hibernate Query Language)查询,然后通过`setFirstResult()`和`setMaxResults()`方法设置查询的起始位置(即偏移量offset)和每页记录数...
在实现分页查询时,需要注意的是,要在HibernateCallback的`doInHibernate`方法中编写HQL语句或Criteria查询,通过Session创建Query对象,然后设置分页参数(如`setFirstResult`和`setMaxResults`),最后执行查询。...
在Hibernate中,我们可以使用`Query`对象的`setMaxResults()`和`setFirstResult()`方法来完成这个任务。`setMaxResults()`定义了每页显示的数据量,而`setFirstResult()`则指定了从哪一条记录开始获取数据。 以下是...
- **功能**:执行命名查询,即在 Hibernate 配置文件中定义的查询。 - **示例代码**: ```java List<User> users = template.findByNamedQuery("findUsersByAge"); ``` 6. **get(Class entityClass, ...