Spring封装Hibernate
public Object execute(HibernateCallback action) throws DataAccessException {
return execute(action, isExposeNativeSession());
}
public List executeFind(HibernateCallback action) throws DataAccessException {
Object result = execute(action, isExposeNativeSession());
if (result != null && !(result instanceof List)) {
throw new InvalidDataAccessApiUsageException(
"Result object returned from HibernateCallback isn't a List: [" + result + "]");
}
return (List) result;
}
public Object execute(HibernateCallback action, boolean exposeNativeSession) throws DataAccessException {
Assert.notNull(action, "Callback object must not be null");
Session session = getSession();
boolean existingTransaction = SessionFactoryUtils.isSessionTransactional(session, getSessionFactory());
if (existingTransaction) {
logger.debug("Found thread-bound Session for HibernateTemplate");
}
FlushMode previousFlushMode = null;
try {
previousFlushMode = applyFlushMode(session, existingTransaction);
Session sessionToExpose = (exposeNativeSession ? session : createSessionProxy(session));
Object result = action.doInHibernate(sessionToExpose);
flushIfNecessary(session, existingTransaction);
return result;
}
catch (HibernateException ex) {
throw convertHibernateAccessException(ex);
}
catch (SQLException ex) {
throw convertJdbcAccessException(ex);
}
catch (RuntimeException ex) {
// Callback code threw application exception...
throw ex;
}
finally {
if (existingTransaction) {
logger.debug("Not closing pre-bound Hibernate Session after HibernateTemplate");
if (previousFlushMode != null) {
session.setFlushMode(previousFlushMode);
}
}
else {
// Never use deferred close for an explicitly new Session.
if (isAlwaysUseNewSession()) {
SessionFactoryUtils.closeSession(session);
}
else {
SessionFactoryUtils.closeSessionOrRegisterDeferredClose(session, getSessionFactory());
}
}
}
}
-----------------------------
public void update(Object entity) throws DataAccessException {
update(entity, null);
}
public void update(final Object entity, final LockMode lockMode) throws DataAccessException {
execute(new HibernateCallback() {
public Object doInHibernate(Session session) throws HibernateException {
checkWriteOperationAllowed(session);
session.update(entity);
if (lockMode != null) {
session.lock(entity, lockMode);
}
return null;
}
}, true);
}
public void saveOrUpdate(final Object entity) throws DataAccessException {
execute(new HibernateCallback() {
public Object doInHibernate(Session session) throws HibernateException {
checkWriteOperationAllowed(session);
session.saveOrUpdate(entity);
return null;
}
}, true);
}
public void saveOrUpdateAll(final Collection entities) throws DataAccessException {
execute(new HibernateCallback() {
public Object doInHibernate(Session session) throws HibernateException {
checkWriteOperationAllowed(session);
for (Iterator it = entities.iterator(); it.hasNext();) {
session.saveOrUpdate(it.next());
}
return null;
}
}, true);
}
public Object saveOrUpdateCopy(final Object entity) throws DataAccessException {
return execute(new HibernateCallback() {
public Object doInHibernate(Session session) throws HibernateException {
checkWriteOperationAllowed(session);
return session.saveOrUpdateCopy(entity);
}
}, true);
}
-------------------------
public List find(final String queryString, final Object[] values, final Type[] types)
throws DataAccessException {
if (values != null && types != null && values.length != types.length) {
throw new IllegalArgumentException("Length of values array must match length of types array");
}
return (List) execute(new HibernateCallback() {
public Object doInHibernate(Session session) throws HibernateException {
Query queryObject = session.createQuery(queryString);
prepareQuery(queryObject);
if (values != null) {
for (int i = 0; i < values.length; i++) {
if (types != null && types[i] != null) {
queryObject.setParameter(i, values[i], types[i]);
}
else {
queryObject.setParameter(i, values[i]);
}
}
}
return queryObject.list();
}
}, true);
}
----------------------------
public List findByNamedParam(
final String queryString, final String[] paramNames, final Object[] values, final Type[] types)
throws DataAccessException {
if (paramNames.length != values.length) {
throw new IllegalArgumentException("Length of paramNames array must match length of values array");
}
if (types != null && paramNames.length != types.length) {
throw new IllegalArgumentException("Length of paramNames array must match length of types array");
}
return (List) execute(new HibernateCallback() {
public Object doInHibernate(Session session) throws HibernateException {
Query queryObject = session.createQuery(queryString);
prepareQuery(queryObject);
if (values != null) {
for (int i = 0; i < values.length; i++) {
applyNamedParameterToQuery(queryObject, paramNames[i], values[i], (types != null ? types[i] : null));
}
}
return queryObject.list();
}
}, true);
}
public List findByValueBean(final String queryString, final Object valueBean)
throws DataAccessException {
return (List) execute(new HibernateCallback() {
public Object doInHibernate(Session session) throws HibernateException {
Query queryObject = session.createQuery(queryString);
prepareQuery(queryObject);
queryObject.setProperties(valueBean);
return queryObject.list();
}
}, true);
}
----------------------
public List findByNamedQuery(final String queryName, final Object[] values, final Type[] types)
throws DataAccessException {
if (values != null && types != null && values.length != types.length) {
throw new IllegalArgumentException("Length of values array must match length of types array");
}
return (List) execute(new HibernateCallback() {
public Object doInHibernate(Session session) throws HibernateException {
Query queryObject = session.getNamedQuery(queryName);
prepareQuery(queryObject);
if (values != null) {
for (int i = 0; i < values.length; i++) {
if (types != null && types[i] != null) {
queryObject.setParameter(i, values[i], types[i]);
}
else {
queryObject.setParameter(i, values[i]);
}
}
}
return queryObject.list();
}
}, true);
}
------------------------
public List findByNamedQueryAndNamedParam(
final String queryName, final String[] paramNames, final Object[] values, final Type[] types)
throws DataAccessException {
if (paramNames != null && values != null && paramNames.length != values.length) {
throw new IllegalArgumentException("Length of paramNames array must match length of values array");
}
if (values != null && types != null && paramNames.length != types.length) {
throw new IllegalArgumentException("Length of paramNames array must match length of types array");
}
return (List) execute(new HibernateCallback() {
public Object doInHibernate(Session session) throws HibernateException {
Query queryObject = session.getNamedQuery(queryName);
prepareQuery(queryObject);
if (values != null) {
for (int i = 0; i < values.length; i++) {
applyNamedParameterToQuery(queryObject, paramNames[i], values[i], (types != null ? types[i] : null));
}
}
return queryObject.list();
}
}, true);
}
public List findByNamedQueryAndValueBean(final String queryName, final Object valueBean)
throws DataAccessException {
return (List) execute(new HibernateCallback() {
public Object doInHibernate(Session session) throws HibernateException {
Query queryObject = session.getNamedQuery(queryName);
prepareQuery(queryObject);
queryObject.setProperties(valueBean);
return queryObject.list();
}
}, true);
}
-------------------
protected void prepareQuery(Query queryObject) {
if (isCacheQueries()) {
queryObject.setCacheable(true);
if (getQueryCacheRegion() != null) {
queryObject.setCacheRegion(getQueryCacheRegion());
}
}
if (getFetchSize() > 0) {
queryObject.setFetchSize(getFetchSize());
}
if (getMaxResults() > 0) {
queryObject.setMaxResults(getMaxResults());
}
SessionFactoryUtils.applyTransactionTimeout(queryObject, getSessionFactory());
}
protected void prepareCriteria(Criteria criteria) {
if (isCacheQueries()) {
criteria.setCacheable(true);
if (getQueryCacheRegion() != null) {
criteria.setCacheRegion(getQueryCacheRegion());
}
}
if (getFetchSize() > 0) {
criteria.setFetchSize(getFetchSize());
}
if (getMaxResults() > 0) {
criteria.setMaxResults(getMaxResults());
}
SessionFactoryUtils.applyTransactionTimeout(criteria, getSessionFactory());
}
-----------------------
protected void applyNamedParameterToQuery(Query queryObject, String paramName, Object value, Type type)
throws HibernateException {
if (value instanceof Collection) {
if (type != null) {
queryObject.setParameterList(paramName, (Collection) value, type);
}
else {
queryObject.setParameterList(paramName, (Collection) value);
}
}
else if (value instanceof Object[]) {
if (type != null) {
queryObject.setParameterList(paramName, (Object[]) value, type);
}
else {
queryObject.setParameterList(paramName, (Object[]) value);
}
}
else {
if (type != null) {
queryObject.setParameter(paramName, value, type);
}
else {
queryObject.setParameter(paramName, value);
}
}
}
分享到:
相关推荐
它封装了常见的Hibernate操作,如保存、更新、删除和查询。在Spring配置文件中,我们可以定义一个`HibernateTemplate`bean,并将其与SessionFactory关联。 4. **定义DAO层**: 数据访问对象(DAO)层负责与数据库的...
Spring MVC、Spring 和 Hibernate 是Java Web开发中的三大主流框架,它们各司其职,共同构建了一个强大而灵活的后端架构。Spring MVC 负责处理HTTP请求并将其路由到相应的控制器,Spring 提供了依赖注入(DI)和面向...
开发者通过HibernateCallback,可以完全使用Hibernate灵活的方式来访问数据库,解决了Spring封装Hibernate后灵活性不足的缺陷。 24.3 Spring对Hibernate的简化 24.3.4 HibernateTemplate的复杂用法 ...
SpringMVC作为Spring的一部分,专门用于处理Web层的请求,而Hibernate则是一个强大的对象关系映射(ORM)框架,简化了数据库操作。下面我们将深入探讨"非注解SpringMVC+Spring+Hibernate入门实例"中的关键知识点。 ...
在IT行业中,Spring和Hibernate是两个非常重要的框架,它们分别专注于不同的领域。Spring是一个全面的后端开发框架,提供依赖注入、AOP(面向切面编程)、MVC(模型-视图-控制器)等特性,使得Java应用的构建变得...
HibernateTemplate封装了一些常用的Hibernate操作,如save、update、delete、find等。 6. **注解驱动的实体类和映射**:Hibernate支持使用注解来定义实体类和数据库表之间的映射。例如,使用`@Entity`标记实体类,`...
在IT行业中,Spring和Hibernate是两个非常重要的框架,它们分别在应用层和数据持久化层发挥着关键作用。Spring是一个全面的Java企业级应用开发框架,提供了依赖注入、AOP(面向切面编程)、MVC(模型-视图-控制器)...
5. **DAO(数据访问对象)和Service层**:Spring可以帮助我们创建DAO和Service层,其中DAO层负责具体的数据操作,而Service层则封装业务逻辑,两者之间通过依赖注入进行通信。 整合步骤大致如下: 1. **配置...
在Java企业级应用开发中,Spring、Hibernate和Struts是三个非常重要的框架,它们分别负责控制层、持久层和视图层的管理。这三种框架的整合能够提供一个高效、松耦合的开发环境。以下是对Spring、Hibernate、Struts...
5. **定义Service层**:创建业务服务接口和实现,使用Spring的@Autowired注解注入DAO,封装业务逻辑。 6. **创建Web服务**:使用CXF生成Web服务接口和实现,将Service层作为服务的业务逻辑。可以通过JAX-WS或JAX-RS...
标题和描述中指出的文档《Struts+Spring+Hibernate开发实例.pdf》包含了关于这三个流行的Java开源框架结合使用的示例代码和相关知识点。Struts负责视图与控制器部分,Spring负责业务逻辑层及依赖注入,Hibernate负责...
6. **Query的创建和执行**:Spring允许在Service层使用Criteria API或HQL构建动态查询,这可以更好地封装和解耦查询逻辑。 7. **AOP整合**:Spring的AOP可以用于日志记录、性能监控、缓存管理等,与Hibernate的查询...
2. 工具类和实用方法:可能提供了对Spring和Hibernate常用操作的封装,提高开发效率。 3. 模块化设计:可能将不同的功能模块化,便于代码重用和维护。 4. 性能优化:可能包含了针对Spring和Hibernate的性能调优策略...
在 JCatalog 示例中,Spring 可能用于实现业务服务接口,提供对 Hibernate DAO 的封装,而 JSF 的 Managed Beans 作为视图与控制器的结合,负责处理用户请求并调用 Spring 服务。此外,安全控制也应纳入设计考虑,如...
- **AOP(面向切面编程)**:Spring AOP允许开发者定义“切面”来封装那些跨多模块的功能,如日志记录、安全控制等,从而提高代码的复用性和可维护性。 - **事务管理**:Spring提供了一套强大的事务管理机制,能够...
本篇文章将深入探讨三个流行的Java框架:Spring、Hibernate和iBatis,它们都提供了对数据库操作的高效封装,使得开发人员能够更便捷地处理数据库事务。 首先,Spring框架以其强大的依赖注入和面向切面编程闻名,它...
### Spring2 Hibernate3集成知识点详解 #### 一、Spring与Hibernate简介 - **Spring框架**:作为一款轻量级的Java开发框架,Spring的核心特性包括依赖注入(DI)和面向切面编程(AOP),这使得它在企业级应用开发...
12.6.16 编写Spring和Hibernate的配置文件spring-config.xml 12.6.17 编写web.xml 12.6.18 验证示例 12.7 小结 第四篇 J2EE项目案例精选 第十三章 网上调查系统 13.1 系统概述 13.2 需求分析 13.2.1 系统用例图 ...
SSH(Struts + Spring + Hibernate)是一种常见的Java Web开发框架组合,用于构建高效、可维护的Web应用。这三种框架分别负责不同的职责,协同工作以实现模型-视图-控制器(MVC)设计模式。 1. **Struts**: - ...