- 浏览: 514923 次
- 性别:
- 来自: 惠州
文章分类
- 全部博客 (255)
- ant (1)
- springMVC (2)
- ajax (4)
- oracle (12)
- SSH (13)
- struts1 (2)
- Hibernate (14)
- spring (5)
- jstl (1)
- 连接池 (1)
- acegi (4)
- java (17)
- jquery (11)
- div+css (4)
- drupal (1)
- php (8)
- freemaker调模板生成静态页面 (1)
- xml (1)
- json (2)
- javascript (9)
- 正则表达式 (4)
- Ext (8)
- jdbc (1)
- sql server (2)
- perl (5)
- db4o (1)
- webservice (4)
- flex (13)
- it资讯 (1)
- joomla (0)
- 设计模式 (1)
- struts2 (4)
- s2sh (8)
- linux (3)
- ejb (2)
- android旅途 (24)
- android (36)
- C/C++ (16)
- mysql (1)
最新评论
-
fengyuxing168:
IBelyService bs = IBelyService. ...
为 Android 添加 Java 层服务也就是添加自定义的aidl服务到serviceManager 通过ServiceManager.getService取 -
dengzhangtao:
"由于ActivityManagerService是 ...
binder理解 -
yzyspy:
ActivityManagerService:startHom ...
Android的Launcher成为系统中第一个启动的,也是唯一的 -
Matchstick:
使用SELECT DISTINCT alias FROM Po ...
hibernate 一对多表查询时fetchMode.join 生成left outer join 出来数据重复问题 -
dlheart:
没看懂你什么意思啊,我遇到的问题是一对多,设了fetch = ...
hibernate 一对多表查询时fetchMode.join 生成left outer join 出来数据重复问题
Struts Spring Hibernate 事务管理的例子。
关键词: Struts Spring Hibernate 事务管理
这两天比较清闲,试着配置了一下Struts Spring Hibernate 。由Spring来接管Struts的Action和Hibernate的事务管理。现做一下笔记。
1. Struts配置文件struts-config.xml
首先加上Spring的Context Loader插件
<plug-in
className="org.springframework.web.struts.ContextLoaderPlugIn">
<set-property property="contextConfigLocation"
value="/WEB-INF/beans.xml" />
</plug-in>
其中beans.xml是Spring的配置文件。
添加一个Action
<action path="/sample"
type="org.springframework.web.struts.DelegatingActionProxy">
</action>
注意type变成了Spring的代理类,当然这儿可以加入一些Forward
2. Spring的配置文件 beans.xml
添加action的对应bean,由于struts已经把这个bean委托给spring来管了,所以当然应该在spring中配置对应的class
<bean name="/sample" class="com.windrift.action.SampleAction">
<property name="sampleManager" ref="sampleManager" />
</bean>
对 sampleManager的配置,实际上对应的是 com.windrift.manager.SampleManager,由于需要对这个 manager配置事务,所以给他指定了一个模板parent="baseService",注意这个parent并不是指继承关系,稍后我们会对这个模板指定事务的策略。
<bean id="sampleManager" parent="baseService">
<property name="target">
<bean class="com.windrift.manager.SampleManager" autowire="byName">
<property name="sampleDAO" ref="sampleDAO" />
</bean>
</property>
</bean>
配置sampleDAO,这里的模板baseDao我们不关心,这儿不详述。
<bean id="sampleDAO" parent="baseDao">
<property name="target">
<bean class="com.windrift.dao.imp.SampleDAOImp" autowire="byName"></bean>
</property>
</bean>
下面配置Hibernate的数据源,这儿用的是MySQL数据库,由于数据库的处理等已经交由Spring处理,因此不再需要Hibernate的配置文件。除了表和PO的映射文件外(如Sample.hbm.xml)
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName">
<value>com.mysql.jdbc.Driver</value>
</property>
<property name="url">
<value>jdbc:mysql://localhost/shop</value>
</property>
<property name="username">
<value>root</value>
</property>
<property name="password">
<value>root</value>
</property>
</bean>
sessionFactory依据数据源创建Session链接
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref local="dataSource" />
</property>
<property name="mappingResources">
<list>
<value>SystemInfo.hbm.xml</value>
<value>Ad.hbm.xml</value>
<value>Good.hbm.xml</value>
<value>Logo.hbm.xml</value>
<value>Member.hbm.xml</value>
<value>News.hbm.xml</value>
<value>NSort.hbm.xml</value>
<value>Pub.hbm.xml</value>
<value>Sort.hbm.xml</value>
<value>Sub.hbm.xml</value>
<value>Basket.hbm.xml</value>
<value>Sample.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.connection.useUnicode">true</prop>
<prop key="hibernate.connection.characterEncoding">
UTF-8
</prop>
<prop key="hibernate.cglib.use_reflection_optimizer">
false
</prop>
<prop key="hibernate.connection.pool.size">2</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="jdbc.fetch_size">50</prop>
<prop key="jdbc.batch_size">25</prop>
<prop key="jdbc.use_scrollable_resultset">false</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</prop>
</props>
</property>
</bean>
事务管理类,通过SessionFactory来获取session
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref local="sessionFactory" />
</property>
</bean>
配置一个切入器,它依据配置的一些事务策略,会调用 transactionManager来进行事务管理。
这个例子中需要进行事务管理的类(所有parent是baseService的类)的所有以Get开头的方法会在一个只读事务环境中运行。其余方法需要进行事务传递,并且一旦这个方法抛出BaseException异常则回滚事务。(如果希望强制commit事务,则把BaseException前面的-改成+)
<bean id="transactionInterceptor"
class="org.springframework.transaction.interceptor.TransactionInterceptor">
<property name="transactionManager">
<ref bean="transactionManager" />
</property>
<property name="transactionAttributes">
<props>
<prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="*">
PROPAGATION_REQUIRED,-BaseException
</prop>
</props>
</property>
</bean>
这个就是前面提到的模板,它说明所有应用此模板的类(parent=baseService的 类)都会被 置于transactionInterceptor中配置的事务环境中。
<bean id="baseService" abstract="true"
class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="interceptorNames">
<list>
<value>transactionInterceptor</value>
</list>
</property>
</bean>
3. SampleAction.java
只是简单的调用了一下manager的方法
package com.windrift.action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import com.windrift.manager.SampleManager;
public class SampleAction extends Action{
private SampleManager sampleManager;
public ActionForward execute(ActionMapping aMapping, ActionForm aForm,
HttpServletRequest aRequest, HttpServletResponse aResponse)
throws Exception {
sampleManager.doSomething();
return null;
}
public void setSampleManager(SampleManager sampleManager) {
this.sampleManager = sampleManager;
}
}
4. SampleManager.java
方法doSomething中我们往数据库里加了两个记录Sample1和Sample2
但是在最后我们强制抛出了一个BaseException,根据前面设置的事务环境和策略,这两条插入的记录都会被回滚。
package com.windrift.manager;
import com.windrift.dao.SampleDAO;
import com.windrift.dao.persist.Sample;
import com.windrift.exception.BaseException;
public class SampleManager {
private SampleDAO sampleDAO;
public void setSampleDAO(SampleDAO sampleDAO) {
this.sampleDAO = sampleDAO;
}
public void doSomething() throws BaseException{
Sample sample1 = new Sample();
sample1.setSample("sample1");
sampleDAO.addSample(sample1);
Sample sample2 = new Sample();
sample2.setSample("sample2");
sampleDAO.addSample(sample2);
throw new BaseException();
}
}
5. SampleDAOImp.java
简单的调用了父类的方法。
package com.windrift.dao.imp;
import com.windrift.dao.SampleDAO;
import com.windrift.dao.persist.Sample;
public class SampleDAOImp extends BaseDAOImp implements SampleDAO {
public void addSample(Sample sample) {
this.save(sample);
}
}
补充一个需要使用回调函数的方法。由于我们的session的管理(包括事务)都交给spring来处理了。所以通常情况下我们是无法访问session的。但是有时候我们又需要使用session,这时候就需要使用回调函数,以取得session。
public List getAllSortASC() {
return getHibernateTemplate().executeFind(new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Query query = session.createQuery("from Sort order by sort_id asc");
List sorts = query.list();
return sorts;
}});}
public Sort getSortById(final int id) {
List list = getHibernateTemplate().executeFind(new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Query query = session
.createQuery("from Sort where sort_ID = ?");
query.setInteger(0, id);
return query.list();
}
});
if (list != null && list.isEmpty() == false) {
return (Sort) list.get(0);
} else {
return null;
}
}
6. DAO的基类
注意由于所有dao都需要继承自HibernateDaoSupport ,所以我们在基类中做这个动作。
package com.windrift.dao.imp;
import java.io.Serializable;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import com.windrift.dao.BaseDAO;
public class BaseDAOImp extends HibernateDaoSupport implements BaseDAO {
/* (non-Javadoc)
* @see com.windrift.dao.imp.BaseDAO#delete(java.lang.Object)
*/
public void delete(Object o) {
getHibernateTemplate().delete(o);
}
/* (non-Javadoc)
* @see com.windrift.dao.imp.BaseDAO#flush()
*/
public void flush() {
getHibernateTemplate().flush();
}
/* (non-Javadoc)
* @see com.windrift.dao.imp.BaseDAO#get(java.lang.Class, java.io.Serializable)
*/
public Object get(Class clazz, Serializable id) {
return getHibernateTemplate().get(clazz, id);
}
/* (non-Javadoc)
* @see com.windrift.dao.imp.BaseDAO#load(java.lang.Class, java.io.Serializable)
*/
public Object load(Class clazz, Serializable id) {
return getHibernateTemplate().load(clazz, id);
}
/* (non-Javadoc)
* @see com.windrift.dao.imp.BaseDAO#refresh(java.lang.Object)
*/
public void refresh(Object o) {
getHibernateTemplate().refresh(o);
}
/* (non-Javadoc)
* @see com.windrift.dao.imp.BaseDAO#remove(java.lang.Class, java.io.Serializable)
*/
public void remove(Class clazz, Serializable id) {
getHibernateTemplate().delete(get(clazz, id));
}
/* (non-Javadoc)
* @see com.windrift.dao.imp.BaseDAO#save(java.lang.Object)
*/
public void save(Object o) {
getHibernateTemplate().save(o);
}
/* (non-Javadoc)
* @see com.windrift.dao.imp.BaseDAO#saveOrUpdate(java.lang.Object)
*/
public void saveOrUpdate(Object o) {
getHibernateTemplate().saveOrUpdate(o);
}
/* (non-Javadoc)
* @see com.windrift.dao.imp.BaseDAO#update(java.lang.Object)
*/
public void update(Object o) {
getHibernateTemplate().update(o);
}
}
自此圆满完成这个小例子。最后说一点,由于hibernate进行了一次版本更新,因此存在hibernate3和hibernate两个包(如:import org.springframework.orm.hibernate3.support.HibernateDaoSupport;)。大家一定都使用 hibernate3,不然出错比较难找。
关键词: Struts Spring Hibernate 事务管理
这两天比较清闲,试着配置了一下Struts Spring Hibernate 。由Spring来接管Struts的Action和Hibernate的事务管理。现做一下笔记。
1. Struts配置文件struts-config.xml
首先加上Spring的Context Loader插件
<plug-in
className="org.springframework.web.struts.ContextLoaderPlugIn">
<set-property property="contextConfigLocation"
value="/WEB-INF/beans.xml" />
</plug-in>
其中beans.xml是Spring的配置文件。
添加一个Action
<action path="/sample"
type="org.springframework.web.struts.DelegatingActionProxy">
</action>
注意type变成了Spring的代理类,当然这儿可以加入一些Forward
2. Spring的配置文件 beans.xml
添加action的对应bean,由于struts已经把这个bean委托给spring来管了,所以当然应该在spring中配置对应的class
<bean name="/sample" class="com.windrift.action.SampleAction">
<property name="sampleManager" ref="sampleManager" />
</bean>
对 sampleManager的配置,实际上对应的是 com.windrift.manager.SampleManager,由于需要对这个 manager配置事务,所以给他指定了一个模板parent="baseService",注意这个parent并不是指继承关系,稍后我们会对这个模板指定事务的策略。
<bean id="sampleManager" parent="baseService">
<property name="target">
<bean class="com.windrift.manager.SampleManager" autowire="byName">
<property name="sampleDAO" ref="sampleDAO" />
</bean>
</property>
</bean>
配置sampleDAO,这里的模板baseDao我们不关心,这儿不详述。
<bean id="sampleDAO" parent="baseDao">
<property name="target">
<bean class="com.windrift.dao.imp.SampleDAOImp" autowire="byName"></bean>
</property>
</bean>
下面配置Hibernate的数据源,这儿用的是MySQL数据库,由于数据库的处理等已经交由Spring处理,因此不再需要Hibernate的配置文件。除了表和PO的映射文件外(如Sample.hbm.xml)
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName">
<value>com.mysql.jdbc.Driver</value>
</property>
<property name="url">
<value>jdbc:mysql://localhost/shop</value>
</property>
<property name="username">
<value>root</value>
</property>
<property name="password">
<value>root</value>
</property>
</bean>
sessionFactory依据数据源创建Session链接
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref local="dataSource" />
</property>
<property name="mappingResources">
<list>
<value>SystemInfo.hbm.xml</value>
<value>Ad.hbm.xml</value>
<value>Good.hbm.xml</value>
<value>Logo.hbm.xml</value>
<value>Member.hbm.xml</value>
<value>News.hbm.xml</value>
<value>NSort.hbm.xml</value>
<value>Pub.hbm.xml</value>
<value>Sort.hbm.xml</value>
<value>Sub.hbm.xml</value>
<value>Basket.hbm.xml</value>
<value>Sample.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.connection.useUnicode">true</prop>
<prop key="hibernate.connection.characterEncoding">
UTF-8
</prop>
<prop key="hibernate.cglib.use_reflection_optimizer">
false
</prop>
<prop key="hibernate.connection.pool.size">2</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="jdbc.fetch_size">50</prop>
<prop key="jdbc.batch_size">25</prop>
<prop key="jdbc.use_scrollable_resultset">false</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</prop>
</props>
</property>
</bean>
事务管理类,通过SessionFactory来获取session
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref local="sessionFactory" />
</property>
</bean>
配置一个切入器,它依据配置的一些事务策略,会调用 transactionManager来进行事务管理。
这个例子中需要进行事务管理的类(所有parent是baseService的类)的所有以Get开头的方法会在一个只读事务环境中运行。其余方法需要进行事务传递,并且一旦这个方法抛出BaseException异常则回滚事务。(如果希望强制commit事务,则把BaseException前面的-改成+)
<bean id="transactionInterceptor"
class="org.springframework.transaction.interceptor.TransactionInterceptor">
<property name="transactionManager">
<ref bean="transactionManager" />
</property>
<property name="transactionAttributes">
<props>
<prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="*">
PROPAGATION_REQUIRED,-BaseException
</prop>
</props>
</property>
</bean>
这个就是前面提到的模板,它说明所有应用此模板的类(parent=baseService的 类)都会被 置于transactionInterceptor中配置的事务环境中。
<bean id="baseService" abstract="true"
class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="interceptorNames">
<list>
<value>transactionInterceptor</value>
</list>
</property>
</bean>
3. SampleAction.java
只是简单的调用了一下manager的方法
package com.windrift.action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import com.windrift.manager.SampleManager;
public class SampleAction extends Action{
private SampleManager sampleManager;
public ActionForward execute(ActionMapping aMapping, ActionForm aForm,
HttpServletRequest aRequest, HttpServletResponse aResponse)
throws Exception {
sampleManager.doSomething();
return null;
}
public void setSampleManager(SampleManager sampleManager) {
this.sampleManager = sampleManager;
}
}
4. SampleManager.java
方法doSomething中我们往数据库里加了两个记录Sample1和Sample2
但是在最后我们强制抛出了一个BaseException,根据前面设置的事务环境和策略,这两条插入的记录都会被回滚。
package com.windrift.manager;
import com.windrift.dao.SampleDAO;
import com.windrift.dao.persist.Sample;
import com.windrift.exception.BaseException;
public class SampleManager {
private SampleDAO sampleDAO;
public void setSampleDAO(SampleDAO sampleDAO) {
this.sampleDAO = sampleDAO;
}
public void doSomething() throws BaseException{
Sample sample1 = new Sample();
sample1.setSample("sample1");
sampleDAO.addSample(sample1);
Sample sample2 = new Sample();
sample2.setSample("sample2");
sampleDAO.addSample(sample2);
throw new BaseException();
}
}
5. SampleDAOImp.java
简单的调用了父类的方法。
package com.windrift.dao.imp;
import com.windrift.dao.SampleDAO;
import com.windrift.dao.persist.Sample;
public class SampleDAOImp extends BaseDAOImp implements SampleDAO {
public void addSample(Sample sample) {
this.save(sample);
}
}
补充一个需要使用回调函数的方法。由于我们的session的管理(包括事务)都交给spring来处理了。所以通常情况下我们是无法访问session的。但是有时候我们又需要使用session,这时候就需要使用回调函数,以取得session。
public List getAllSortASC() {
return getHibernateTemplate().executeFind(new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Query query = session.createQuery("from Sort order by sort_id asc");
List sorts = query.list();
return sorts;
}});}
public Sort getSortById(final int id) {
List list = getHibernateTemplate().executeFind(new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Query query = session
.createQuery("from Sort where sort_ID = ?");
query.setInteger(0, id);
return query.list();
}
});
if (list != null && list.isEmpty() == false) {
return (Sort) list.get(0);
} else {
return null;
}
}
6. DAO的基类
注意由于所有dao都需要继承自HibernateDaoSupport ,所以我们在基类中做这个动作。
package com.windrift.dao.imp;
import java.io.Serializable;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import com.windrift.dao.BaseDAO;
public class BaseDAOImp extends HibernateDaoSupport implements BaseDAO {
/* (non-Javadoc)
* @see com.windrift.dao.imp.BaseDAO#delete(java.lang.Object)
*/
public void delete(Object o) {
getHibernateTemplate().delete(o);
}
/* (non-Javadoc)
* @see com.windrift.dao.imp.BaseDAO#flush()
*/
public void flush() {
getHibernateTemplate().flush();
}
/* (non-Javadoc)
* @see com.windrift.dao.imp.BaseDAO#get(java.lang.Class, java.io.Serializable)
*/
public Object get(Class clazz, Serializable id) {
return getHibernateTemplate().get(clazz, id);
}
/* (non-Javadoc)
* @see com.windrift.dao.imp.BaseDAO#load(java.lang.Class, java.io.Serializable)
*/
public Object load(Class clazz, Serializable id) {
return getHibernateTemplate().load(clazz, id);
}
/* (non-Javadoc)
* @see com.windrift.dao.imp.BaseDAO#refresh(java.lang.Object)
*/
public void refresh(Object o) {
getHibernateTemplate().refresh(o);
}
/* (non-Javadoc)
* @see com.windrift.dao.imp.BaseDAO#remove(java.lang.Class, java.io.Serializable)
*/
public void remove(Class clazz, Serializable id) {
getHibernateTemplate().delete(get(clazz, id));
}
/* (non-Javadoc)
* @see com.windrift.dao.imp.BaseDAO#save(java.lang.Object)
*/
public void save(Object o) {
getHibernateTemplate().save(o);
}
/* (non-Javadoc)
* @see com.windrift.dao.imp.BaseDAO#saveOrUpdate(java.lang.Object)
*/
public void saveOrUpdate(Object o) {
getHibernateTemplate().saveOrUpdate(o);
}
/* (non-Javadoc)
* @see com.windrift.dao.imp.BaseDAO#update(java.lang.Object)
*/
public void update(Object o) {
getHibernateTemplate().update(o);
}
}
自此圆满完成这个小例子。最后说一点,由于hibernate进行了一次版本更新,因此存在hibernate3和hibernate两个包(如:import org.springframework.orm.hibernate3.support.HibernateDaoSupport;)。大家一定都使用 hibernate3,不然出错比较难找。
发表评论
-
关于openSession()与getCurrentSession()
2010-05-13 14:25 2212关于openSession()与getCurrentSessi ... -
s2sh 配置文件说明 application.xml文件配置说明
2010-05-13 10:22 2356Hibernate配置项 Xml代码 ... -
二级缓存的配置 配置ehcache.xml文件
2010-05-13 10:12 1388原文出处:http://i.cn.yahoo.com/en.w ... -
配置一个数据源 spring
2010-03-26 09:01 978配置一个数据源 Spring在第三方依赖包中包含了两个 ... -
Spring的四种声明式事务的配置-Hibernate事务
2009-04-03 13:41 1972Spring的四种声明式事务的配置-Hibernate事务20 ... -
我的通用DAO理解,请大家指正
2008-11-20 12:28 4282首先声明我的资料大我来自javaeye,先谢谢各位. 但因本人 ... -
J2EE学习笔记——初试SSH之泛型通用DAO
2008-11-19 16:12 1688J2EE学习笔记——初试SSH之泛型通用DAO 在做项目的时候 ... -
一个acegi配置文件applicationContext-security-acegi.xm
2008-10-08 20:29 1745<?xml version="1.0" ... -
一个proxool连接池的applicationContext.xml配置文件
2008-10-08 20:23 1814applicationContext.xml <?xml ... -
一个web.xml配置文件
2008-10-08 20:20 2314web.xml <?xml version=" ... -
ssh 整合测试
2008-08-18 18:27 1837ssh 整合测试 关键字: ssh整合 搞了很久的ssh整合 ... -
我的智囊团构建全过程
2008-05-15 14:26 1702ssh综合实战 (Struts+sprin ...
相关推荐
在"宠物医院"项目中,Spring 负责管理对象的生命周期和装配,包括 Struts 的 Action 对象和 Hibernate 的 SessionFactory。Spring 还可以用来实现事务管理,确保数据的一致性。此外,Spring 提供的 SpringMVC 组件...
在这个“Struts Spring Hibernate例子”中,我们将深入探讨这三个框架如何集成并发挥其优势。 Struts是MVC(模型-视图-控制器)架构模式的一个实现,主要处理用户交互和请求分发。它提供了Action类来处理HTTP请求,...
在SSH整合中,Spring主要负责管理Bean,包括Struts的Action和Hibernate的SessionFactory,以及事务控制,确保用户注册操作的原子性和一致性。 3. **Hibernate**:Hibernate是一个对象关系映射(ORM)框架,它允许...
在SSH整合中,Spring可以管理Struts2的Action实例,以及Hibernate的SessionFactory,从而实现事务控制和数据访问对象(DAO)的管理。配置文件如applicationContext.xml将定义这些组件的依赖关系。 Hibernate是Java ...
标题 "Eclipse + MyEclipse整合Struts+Spring+Hibernate简单例子开发" 指向的是一个关于如何在集成开发环境Eclipse与MyEclipse中搭建Struts、Spring和Hibernate(SSH)框架的教程。SSH是Java Web开发中常用的一个...
为了练手培训,给大家准备的 Open Session In View 的简单例子,纯代码,大家可以参考,其中主要说了六部分内容: ...5.通过 spring aop(aspectJ) 声明事务 6.通过formular 映射参数表,指定两个死的变量
Struts、Spring和Hibernate是Java开发中非常重要的三个框架,它们分别用于MVC(Model-View-Controller)架构、依赖注入(DI)和持久层管理。这篇文章将详细讲解这三个框架的集成过程及其重要性。 首先,Struts是一...
Struts提供MVC架构,Spring负责依赖注入和事务管理,而Hibernate则处理数据库交互。此外,对于Hibernate的使用,推荐安装Hibernate Synchronizer Eclipse Plugin,它可以帮助开发者更便捷地同步Hibernate实体类和...
在学习和使用Spring+Struts+Hibernate的例子时,要注意理解每个框架的核心概念,熟悉它们的配置方式,以及如何通过XML或注解进行组件装配。同时,实践中应注重代码的规范性和可读性,遵循良好的编程习惯,这样才能更...
这样,当用户发送请求时,Struts会调用Spring管理的Bean执行业务逻辑,最终由Hibernate处理数据操作。 具体到用户登录和注册功能,可能涉及到ActionForm用于收集表单数据,Action进行验证和业务处理,而Hibernate则...
本资源“精通Java EE项目案例--基于Eclipse Spring Struts Hibernate (例子中的初始化SQL)”正是针对这样的集成环境提供了一套完整的数据库初始化语句,帮助开发者快速构建一个功能完善的Web应用。 首先,让我们...
Struts2、Spring和Hibernate是Java Web开发中的三大框架,它们各自解决应用程序的不同问题:Struts2负责控制层,Spring提供了全面的依赖注入和事务管理,而Hibernate则专注于持久层,简化了数据库操作。将这三者整合...
在这个“struts+hibernate+spring”例子中,我们将深入探讨这三个框架的核心概念以及如何将它们整合在一起。 **Struts** 是一个基于MVC(Model-View-Controller)设计模式的Java Web框架,主要负责控制应用程序的...
**Spring** 是一个全面的后端应用程序框架,它不仅包含依赖注入(DI)和面向切面编程(AOP)等核心特性,还支持事务管理、数据访问、Web应用等。Spring通过IoC容器管理对象的生命周期和依赖关系,使得代码更易于测试...
在SSH中,Spring主要负责服务层的管理,如Bean的创建、事务控制以及对Hibernate的支持。 **Hibernate** 是一个对象关系映射(ORM)框架,它将Java对象与数据库中的表进行映射,简化了数据库操作。通过Hibernate,...
在"开发者突击:Java Web主流框架整合开发:J2EE+Struts+Hibernate+Spring 部分例子源代码及数据库"这个资料中,开发者可以学习到如何将这四个组件整合在一起,构建出高效稳定的Web应用。Struts2Test很可能是一个...
Struts主要负责控制层,Spring作为全面的容器和框架,涵盖IoC(Inversion of Control,控制反转)、AOP(Aspect Oriented Programming,面向切面编程)以及持久层管理,而Hibernate则专注于对象关系映射(ORM),...
7. **事务管理**:掌握Spring和Hibernate结合进行事务处理的方法,包括编程式事务管理和声明式事务管理。 8. **错误和异常处理**:学习如何在Struts框架中配置全局异常处理,确保程序的健壮性。 9. **实战演练**:...
在"struts hibernate spring 整合"的例子中,Struts的Action可能会调用Spring管理的Service层来处理业务,这样可以方便地进行依赖注入,减少代码间的耦合。 接下来,Hibernate作为ORM工具,它将Java对象与数据库表...
在这个例子中,Spring2将作为服务层的管理器,负责Bean的生命周期管理和事务管理。 Hibernate2是持久化框架,它简化了数据库操作,让开发者可以使用对象关系映射(ORM)技术,而不是直接编写SQL语句。Hibernate2...