spring3与hibernate4的整合
来源:互联网 发布:阿里云服务器使用方法 编辑:程序博客网 时间:2024/05/06 11:36
首先,spring与hibernate3整合时有三种方式:1、直接使用SessionFactory(该SessionFactory由spring管理并注入)的方式:
@Resourcepublic void setSessionFactory(SessionFactory sessionFactory) {this.sessionFactory = sessionFactory;}protected Session getsSession(){return this.sessionFactory.getCurrentSession();}
其次、利用HibernateTemplate类提供的模板方式:
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate"> <constructor-arg name="sessionFactory" ref="sessionFactory"/></bean> @Resource(name="sessionFactory")public void setHibernateTemplate(SessionFactory sessionFactory) {this.hibernateTemplate =new HibernateTemplate(sessionFactory);}
在Spring与hibernate4的整合中,已经取消了HibernateTemplate和HibernateDaoSupport这两个方法只能通过session来进行处理。
和hibernate4整合没有提供专门的针对Annotation的类,直接在LocalSessionFactoryBean中已经集成
<bean id="sessionFactory"class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
事务管理也要改成hibernate4的支持
<!-- 创建事务管理器--><bean id="txManager"class="org.springframework.orm.hibernate4.HibernateTransactionManager">
如果通过Spring来管理相应的SessionFactory,不再使用factory.openSession()开启session,而应该是一facotry.getCurrentSession来打开Session,这个Session就会被Spring所管理,此时开发人员不用进行事务控制,也不用关闭Session,全部有Spring容器来完成
也可通过注解的方式实现事务管理:
只有配置了事务处理之后,Spring才能有效的管理事务
<!-- 配置Spring的事务处理 --><!-- 创建事务管理器--><bean id="txManager"class="org.springframework.orm.hibernate4.HibernateTransactionManager"><property name="sessionFactory" ref="sessionFactory" /></bean><!-- 配置AOP,Spring是通过AOP来进行事务管理的 --><aop:config><!-- 设置pointCut表示哪些方法要加入事务处理 --><aop:pointcut id="allMethods"expression="execution(* com.tc.spring.service.*.*(..))" /><!-- 通过advisor来确定具体要加入事务控制的方法 --><aop:advisor advice-ref="txAdvice" pointcut-ref="allMethods" /></aop:config><!-- 配置哪些方法要加入事务控制 --><tx:advice id="txAdvice" transaction-manager="txManager"><tx:attributes><!-- 让所有的方法都加入事务管理 --><tx:method name="*" propagation="REQUIRED"/></tx:attributes></tx:advice>
<tx:annotation-driven transaction-manager="transactionManager" /> <span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"> </span>
在要进行事务管理的类和方法中分别添加如下注解:
@Transactional
public class BaseDao<T,PK extends Serializable> implements IBaseDao<T, PK> @Override@Transactional(propagation=Propagation.REQUIRED,readOnly=true)public List<T> list(String sql, Object... args) {Query query=this.getSession().createQuery(sql);if(args!=null){for(int i=0;i<args.length;i++){query.setParameter(i, args[i]);}}return query.list();}@Override@Transactional(propagation=Propagation.REQUIRED,readOnly=true)public T findById(PK id) {return (T)this.getSession().get(clazz, id);}@Override@Transactional(propagation=Propagation.REQUIRED)public void save(T t) {this.getSession().save(t);}
OpenSessionInViewer也要改成基于4的版本
<filter><filter-name>openSessionInViewerFilter</filter-name><filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class> </filter>
另外Hibernate4对DTO不在支持如下的方式:
session.createSQLQuery("select * from student s inner join grade g on s.g_id=g.gid") .addScalar("stu_id", Hibernate.INTEGER) .addScalar("stu_name",Hibernate.STRING) .addScalar("g_name",Hibernate.STRING) .setResultTransformer(Transformers.aliasToBean(StudentDTO.class)) .list();
- spring3与hibernate4的整合
- spring3.1与hibernate4整合
- spring3.1与hibernate4整合
- Spring3与Hibernate4整合配置
- 关于“Spring3 ”与 “Hibernate4” 整合,HibernateTemplate的使用问题。
- Spring3.1.2与Hibernate4.1.8整合
- Spring3.1.2与Hibernate4.1.8整合
- Spring3.1.2与Hibernate4.1.8整合
- spring3.29与hibernate4.45整合出错
- Spring3.1.2与Hibernate4.1.8整合
- Strusts2+Hibernate4+Spring3的框架整合
- Spring3和Hibernate4整合的错误
- struts2+spring3+hibernate4整合
- hibernate4 spring3 整合
- hibernate4 spring3 整合
- spring3+Hibernate4+struts2整合
- Spring3整合Hibernate4
- spring3、hibernate4、JPA整合
- [LeetCode] Longest Common Prefix
- 【wordpress】轻松本地安装WordPress
- 探索--云计算是什么
- oracle 查看 用户 用户权限 用户表空间 用户默认表空间
- gcc/g++
- spring3与hibernate4的整合
- Bat批处理ARP攻击
- VLC0.9.9 ActiveX的精简制作及其在web上的使用
- 达芬奇五年沉浮——嵌入式处理器架构之争决战2012
- Windows使用笔记_DirectX SDK
- DWZ框架表单提交响应
- UVA 10651 Pebble Solitaire 鹅卵石摆放 记忆化搜索+DFS+记忆化搜索
- strcpy函数的实现
- 学习css布局