spring-config.xml 内容如下:<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"><beans>
<!-- 声明数据源, 建议使用apache或Spring自带的数据源 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName">
<value>oracle.jdbc.driver.OracleDriver</value>
</property> <property name="url">
<value>jdbc:oracle:thin:@127.0.0.1:1521:oracledb</value>
</property>
<property name="username">
<value>storm</value>
</property>
<property name="password">
<value>Bfzx1981</value>
</property>
</bean> <!-- 将Spring于Hibernate进行整合, 整合后Hibernate将使用上面所配置的数据源 -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref local="dataSource" />
</property> <property name="mappingResources">
<list>
<value>com/storm/myssh/persistent/dao/mapping/Student01.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
</bean> <!-- 声明Hibernate事务管理机制 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref local="sessionFactory" />
</property>
</bean> <!-- 声明Spring事务管理机制, 此机制依赖于Hibernate的事务管理-->
<bean id="userDAOProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager">
<ref bean="transactionManager" />
</property>
<property name="target">
<ref bean="student01Dao" />
</property>
<property name="transactionAttributes">
<props>
<prop key="insert*">PROPAGATION_REQUIRED</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="delete*">PROPAGATION_REQUIRED</prop>
<prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>
</beans>
spring-ioc.xml 内容如下:<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"><beans>
<!-- 为了方便管理, 注意声明顺序 Action依赖于Service依赖于Dao -->
<bean name="/student01" class="com.storm.myssh.action.Student01Action">
<property name="student01Service">
<ref bean="student01Service" />
</property>
</bean>
<bean id="student01Service" class="com.storm.myssh.service.impl.Student01ServiceImpl">
<property name="student01Dao">
<ref bean="student01Dao" />
</property>
</bean>
<bean id="student01Dao" class="com.storm.myssh.persistent.dao.impl.Student01DaoImpl">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
</beans>Student01DaoImpl.java 内容如下package com.storm.myssh.persistent.dao.impl;import java.util.List;import org.hibernate.SessionFactory;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;import com.storm.myssh.common.SqlUtils;
import com.storm.myssh.dto.Student01Dto;
import com.storm.myssh.persistent.dao.Student01Dao;public class Student01DaoImpl extends HibernateDaoSupport implements Student01Dao{
private SessionFactory sessionFactory;
private static final String[] propertyArray = new String[]{
"schoolId", "name", "sex", "age", "phone", "address"
};
public void insert(Student01Dto student01Dto){
this.getHibernateTemplate().save(student01Dto);
System.out.println("数据已经插入, 即将测试回滚!");
throw new RuntimeException();
} public void update(Student01Dto student01Dto){
getHibernateTemplate().update(student01Dto);
} public void delete(Student01Dto student01Dto){
getHibernateTemplate().delete(student01Dto);
} public List find(Student01Dto student01Dto){
StringBuffer sql = new StringBuffer(100);
sql.append("select {t.*} from Student01 t where 1=1 "); StringBuffer stdsql = new StringBuffer(100);//存储根据对象生成的条件
stdsql.append(SqlUtils.addConditions(student01Dto, propertyArray));
sql.append(stdsql);
List list = getHibernateTemplate().find(sql.toString());
return list;
}
}
Student01Action.java 内容如下:package com.storm.myssh.action;import java.util.List;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 org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;import com.storm.myssh.dto.Student01Dto;
import com.storm.myssh.service.Student01Service;public class Student01Action extends Action {
//在Action中必须定义Service成员及其set方法, 此成员由Spring负责注入.
private Student01Service student01Service;
public void setStudent01Service(Student01Service student01Service) {
this.student01Service = student01Service;
}
private ActionMessages errors = new ActionMessages();
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
errors.clear();//解决了再次进入Action时errors不为空的情况, 解决了转向错误.
try{
student01Service.insert((Student01Dto)form);
}catch(Exception e){
e.printStackTrace();
errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("error.insert.failed"));
}
if (!errors.isEmpty()) {
saveErrors(request, errors);
return (new ActionForward(mapping.getInput()));
}
form.reset(mapping, request);//解决提交成功后跳转回此页面时数据残留的问题
return mapping.findForward("success");
}
public ActionForward update(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
try{
student01Service.update((Student01Dto)form);
}catch(Exception e){
e.printStackTrace();
errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("error.update.failed"));
} if (!errors.isEmpty()) {
saveErrors(request, errors);
return (new ActionForward(mapping.getInput()));
}
return mapping.findForward("success");
}
public ActionForward delete(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
try{
student01Service.delete((Student01Dto)form);
}catch(Exception e){
e.printStackTrace();
errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("error.delete.failed"));
} if (!errors.isEmpty()) {
saveErrors(request, errors);
return (new ActionForward(mapping.getInput()));
}
return mapping.findForward("success");
}
public ActionForward find(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
try{
List list = student01Service.find((Student01Dto)form);
request.setAttribute("list", list);
}catch(Exception e){
e.printStackTrace();
errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("error.delete.failed"));
}
return mapping.findForward("success");
}
}
哪位高手帮我看看, 为什么抛出异常不能回滚呢?
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"><beans>
<!-- 声明数据源, 建议使用apache或Spring自带的数据源 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName">
<value>oracle.jdbc.driver.OracleDriver</value>
</property> <property name="url">
<value>jdbc:oracle:thin:@127.0.0.1:1521:oracledb</value>
</property>
<property name="username">
<value>storm</value>
</property>
<property name="password">
<value>Bfzx1981</value>
</property>
</bean> <!-- 将Spring于Hibernate进行整合, 整合后Hibernate将使用上面所配置的数据源 -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref local="dataSource" />
</property> <property name="mappingResources">
<list>
<value>com/storm/myssh/persistent/dao/mapping/Student01.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
</bean> <!-- 声明Hibernate事务管理机制 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref local="sessionFactory" />
</property>
</bean> <!-- 声明Spring事务管理机制, 此机制依赖于Hibernate的事务管理-->
<bean id="userDAOProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager">
<ref bean="transactionManager" />
</property>
<property name="target">
<ref bean="student01Dao" />
</property>
<property name="transactionAttributes">
<props>
<prop key="insert*">PROPAGATION_REQUIRED</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="delete*">PROPAGATION_REQUIRED</prop>
<prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>
</beans>
spring-ioc.xml 内容如下:<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"><beans>
<!-- 为了方便管理, 注意声明顺序 Action依赖于Service依赖于Dao -->
<bean name="/student01" class="com.storm.myssh.action.Student01Action">
<property name="student01Service">
<ref bean="student01Service" />
</property>
</bean>
<bean id="student01Service" class="com.storm.myssh.service.impl.Student01ServiceImpl">
<property name="student01Dao">
<ref bean="student01Dao" />
</property>
</bean>
<bean id="student01Dao" class="com.storm.myssh.persistent.dao.impl.Student01DaoImpl">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
</beans>Student01DaoImpl.java 内容如下package com.storm.myssh.persistent.dao.impl;import java.util.List;import org.hibernate.SessionFactory;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;import com.storm.myssh.common.SqlUtils;
import com.storm.myssh.dto.Student01Dto;
import com.storm.myssh.persistent.dao.Student01Dao;public class Student01DaoImpl extends HibernateDaoSupport implements Student01Dao{
private SessionFactory sessionFactory;
private static final String[] propertyArray = new String[]{
"schoolId", "name", "sex", "age", "phone", "address"
};
public void insert(Student01Dto student01Dto){
this.getHibernateTemplate().save(student01Dto);
System.out.println("数据已经插入, 即将测试回滚!");
throw new RuntimeException();
} public void update(Student01Dto student01Dto){
getHibernateTemplate().update(student01Dto);
} public void delete(Student01Dto student01Dto){
getHibernateTemplate().delete(student01Dto);
} public List find(Student01Dto student01Dto){
StringBuffer sql = new StringBuffer(100);
sql.append("select {t.*} from Student01 t where 1=1 "); StringBuffer stdsql = new StringBuffer(100);//存储根据对象生成的条件
stdsql.append(SqlUtils.addConditions(student01Dto, propertyArray));
sql.append(stdsql);
List list = getHibernateTemplate().find(sql.toString());
return list;
}
}
Student01Action.java 内容如下:package com.storm.myssh.action;import java.util.List;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 org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;import com.storm.myssh.dto.Student01Dto;
import com.storm.myssh.service.Student01Service;public class Student01Action extends Action {
//在Action中必须定义Service成员及其set方法, 此成员由Spring负责注入.
private Student01Service student01Service;
public void setStudent01Service(Student01Service student01Service) {
this.student01Service = student01Service;
}
private ActionMessages errors = new ActionMessages();
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
errors.clear();//解决了再次进入Action时errors不为空的情况, 解决了转向错误.
try{
student01Service.insert((Student01Dto)form);
}catch(Exception e){
e.printStackTrace();
errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("error.insert.failed"));
}
if (!errors.isEmpty()) {
saveErrors(request, errors);
return (new ActionForward(mapping.getInput()));
}
form.reset(mapping, request);//解决提交成功后跳转回此页面时数据残留的问题
return mapping.findForward("success");
}
public ActionForward update(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
try{
student01Service.update((Student01Dto)form);
}catch(Exception e){
e.printStackTrace();
errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("error.update.failed"));
} if (!errors.isEmpty()) {
saveErrors(request, errors);
return (new ActionForward(mapping.getInput()));
}
return mapping.findForward("success");
}
public ActionForward delete(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
try{
student01Service.delete((Student01Dto)form);
}catch(Exception e){
e.printStackTrace();
errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("error.delete.failed"));
} if (!errors.isEmpty()) {
saveErrors(request, errors);
return (new ActionForward(mapping.getInput()));
}
return mapping.findForward("success");
}
public ActionForward find(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
try{
List list = student01Service.find((Student01Dto)form);
request.setAttribute("list", list);
}catch(Exception e){
e.printStackTrace();
errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("error.delete.failed"));
}
return mapping.findForward("success");
}
}
哪位高手帮我看看, 为什么抛出异常不能回滚呢?
解决方案 »
- GUI JTextArea控件有自动换行时的问题
- 怎么把String保存为xml,100分,在线等 立即结帖!!!
- 就内网一对一语音聊天问题
- 从字符串删除字符串
- 有关使用HttpClient的问题
- >>和>>>区别的实例分析例题有二句没有看懂
- 谢谢kingfish(八百里秦川@龙城异客)解决问题
- 有没有能编辑HTML的Swing组件?最好是免费的,开源的!
- java List containsAll方法的重写改怎么做?
- 请问谁有基于tcp/ip协议的服务器,客户端程序的源代码?请大家帮忙!
- 把List<String> list中不存在Set<String> set的元素删除
- Java JfreeChart 问题请教
<property name="student01Service">
<ref bean="student01Service" />
</property>
</bean><bean id="student01Service" class="com.storm.myssh.service.impl.Student01ServiceImpl">
<property name="student01Dao">
<ref bean="userDAOProxy" />
</property>
</bean> <bean id="userDAOProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager">
<ref bean="transactionManager" />
</property>
<property name="target">
<ref bean="student01Dao" />
</property>
<property name="transactionAttributes">
<props>
<prop key="insert*"> PROPAGATION_REQUIRED ,-RuntimeException</prop>
<prop key="update*"> PROPAGATION_REQUIRED ,-RuntimeException</prop>
<prop key="delete*"> PROPAGATION_REQUIRED ,-RuntimeException</prop>
<prop key="find*"> PROPAGATION_REQUIRED,readOnly </prop>
</props>
</property>
</bean>