SSH2事物管理

原创 2013年12月04日 10:11:07

废话不多说,开始SSH 事物的配置

 

1、JSP页面发送请求到server端

  <!-- 后面的action不能少,它会根据action前面的字符串去匹配是否有对应的请求 -->
  <form action="personAdd.action" method="post" enctype="multipart/form-data">
    用户名:<input type="text" name="name"><br>
    密码:<input type="text" name="password"><br>
    年龄:<input type="text" name="age"><br>
    性别:<input type="text" name="sex"><br>
    文件:<input type="file" name="myfile"><br>
    <input type="submit" value="提交">
    <input type="reset" value="重置">
 </form>

 

2、被struts2拦截器拦截

   a)struts配置文件

<!-- 如果指明了method方法,则调用该类的addperson方法,默认是调用execute方法 -->
<action name="personAdd" class="personAddSpring" method="addPerson">
<result name="success" type="redirectAction">personList</result>
</action>

   b)到spring配置文件中找到具体的类,然后注入

<bean id="personAddSpring" class="hb.person.action.PersonAction"></bean> 

 

3、找到PersonAction类的addPerson方法

public String addPerson(){
	Person person = new Person();
	person.setAge(new Integer(this.age));
	person.setName(this.name);
	try {
		person.setPassword(MD5Util.EncoderPwdByMd5(this.password));
	} catch (UnsupportedEncodingException e) {
		e.printStackTrace();
	} catch (NoSuchAlgorithmException e) {
		e.printStackTrace();
	}
	person.setBirthday(Calendar.getInstance().getTime());
	if(this.myfile != null){
		System.out.println(this.myfileFileName);
//			File temp = new File("c:\\huangbiao");
//			try {
//				FileUtils.copyFile(this.myfile, temp);
//			} catch (IOException e) {
//				e.printStackTrace();
//			}
		try {
			FileInputStream fis = new FileInputStream(this.myfile);
			byte[] buf = new byte[fis.available()];
			while(fis.read(buf)!=-1){
			}
			person.setAttach(buf);
			fis.close();
			
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}	
	IPersonService personService = (IPersonService)BeanUtil.getBean("ipersonService");
	personService.addPerson(person);
	return "success";
}

 

得到的personService保存“对象”,里面的内容就是操作数据库了

 

4、写一个得到service的类

package hb.util;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;

public class BeanUtil {

	private static ApplicationContext applicationContext;
	private static String[] configs = {"E:\\workspace\\mycode\\WebRoot\\WEB-INF\\config\\spring\\applicationContext_bean_person.xml", 
				"E:\\workspace\\mycode\\WebRoot\\WEB-INF\\config\\spring\\applicationContext.xml"};
	public static Object getBean(String bean){
		System.out.println("test");
		if(null == applicationContext){
			//使用根据工程名称来读取文件的方式得到context,因为这个能接收参数
			applicationContext =  new FileSystemXmlApplicationContext(configs);
			
		}
		
		return applicationContext.getBean(bean);
	}
	
	public static void main(String[]args){
		applicationContext =  new FileSystemXmlApplicationContext("/WebRoot/WEB-INF/config/spring/applicationContext*.xml");
	}
}

 5、在spring配置文件中配置事物

<bean id="dataSource"
	class="org.apache.commons.dbcp.BasicDataSource">
	<property name="driverClassName"
		value="oracle.jdbc.driver.OracleDriver">
	</property>
	<property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl"></property>
	<property name="username" value="huangbiao"></property>
	<property name="password" value="huangbiao"></property>
	<property name="maxActive" value="100"></property>
	<property name="maxIdle" value="30"></property>
	<property name="maxWait" value="500"></property>
	<property name="defaultAutoCommit" value="true"></property>
</bean>

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
	<property name="dataSource" ref="dataSource"></property>
	<property name="hibernateProperties">
		<props>
			<prop key="hibernate.dialect">
				org.hibernate.dialect.Oracle9Dialect
			</prop>
			<prop key="hibernate.show_sql">true</prop>
		</props>
	</property>

	<property name="mappingResources">
		<list>
			<value>hb/person/model/Person.hbm.xml</value>
			<value>hb/dept/model/Dept.hbm.xml</value>
		</list>
	</property>
</bean>

<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
	<property name="sessionFactory">
			<ref local="sessionFactory"/>
	</property>
</bean>	

<!-- 配置事物开始 -->
<bean id="ipersonServiceTarget" class="hb.person.service.imp.PersonServiceImp">
	<property name="persondao" ref="ipersonDao"></property>
	<property name="deptdao" ref="ideptDao"></property>
</bean>

<bean id="ipersonDao" class="hb.person.dao.imp.PersonDaoImp">
	<property name="sessionFactory">
		<ref bean="sessionFactory"/>
	</property>
</bean>

<bean id="ipersonService" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
	<property name="transactionManager">
		<ref bean="transactionManager"/>
	</property>
	<property name="target">
		<ref local="ipersonServiceTarget"/>
	</property>
	<property name="transactionAttributes">
		<props>
			<prop key="*">PROPAGATION_REQUIRED</prop>
		</props>
	</property>
</bean>
<!-- 配置事物结束 -->

 

 6、在PersonServiceImp中注入了两个dao(persondao和deptdao),也就是两张表需要在这个方法中进行操作

 

备注:上面的配置文件还少了一张表的配置,这个是我为了测试添加的

 

<!-- model dept -->
<bean id="ideptServiceTarget" class="hb.dept.service.imp.DeptServiceImp">
	<property name="deptDao" ref="ideptDao"></property>
</bean>

<bean id="ideptDao" class="hb.dept.dao.imp.DeptDaoImp">
	<property name="sessionFactory">
		<ref bean="sessionFactory"/>
	</property>
</bean>

<bean id="ideptService" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
	<property name="transactionManager">
		<ref bean="transactionManager"/>
	</property>
	<property name="target">
		<ref local="ideptServiceTarget"/>
	</property>
	<property name="transactionAttributes">
		<props>
			<prop key="*">PROPAGATION_REQUIRED</prop>
		</props>
	</property>
</bean>

 

如果只是一张表的操作可以像dept表这样配置,如果是多张表操作可以像person表那样配置

 

7、实现多表操作的具体实现

package hb.person.service.imp;

import hb.dept.dao.IDeptDao;
import hb.dept.model.Dept;
import hb.dept.service.IDeptService;
import hb.person.dao.IPersonDao;
import hb.person.model.Person;
import hb.person.service.IPersonService;
import hb.util.BeanUtil;

import java.lang.reflect.InvocationTargetException;
import java.util.List;

import org.hibernate.HibernateException;


public class PersonServiceImp implements IPersonService {

	private IPersonDao persondao;
	private IDeptDao deptdao;
	
	public IPersonDao getPersondao() {
		return persondao;
	}

	public void setPersondao(IPersonDao persondao) {
		this.persondao = persondao;
	}

	public void addPerson(Person person) {
		persondao.addPerson(person);
		
		IDeptService service = (IDeptService)BeanUtil.getBean("ideptService");
		Dept dept = new Dept();
		String temp = "2";
		//new Integer("dsaf");//模拟操作出现异常
		dept.setDmanager(temp);
		dept.setDname(temp);
		dept.setNote(temp);
		service.addDept(dept);
		//new Integer("dsfads");测试事物
	}

	public IDeptDao getDeptdao() {
		return deptdao;
	}

	public void setDeptdao(IDeptDao deptdao) {
		this.deptdao = deptdao;
	}

	public Person findPersonById(String id) {
		return persondao.findPersonById(id);
	}

	public List findPersonList(int start, int end) {
		return persondao.findPersonList(start, end);
	}

	@Override
	public List findPersonList(int start, int end, Person person) throws HibernateException, SecurityException, IllegalArgumentException, NoSuchMethodException, IllegalAccessException, InvocationTargetException {
		return  persondao.findPersonList(start, end, person);
	}

	@Override
	public void updatePerson(Person person) {
		persondao.updatePerson(person);
	}

	@Override
	public void deletePersonByKeyid(String keyid) {
		persondao.deletePersonByKeyid(keyid);
	}

}

 

 备注:查看addPerson()方法,里面模拟了添加dept对象,如果出现异常,两张表都操作不成功

ssh2项目之自己想的购物网站

想着把零碎的整理一下,合成一个完整的,虽然做完还是很简陋的项目 哎呀,这样一个小练手的项目,我居然做了七天,天哪,先大概回想一下有哪些需求 工具:tomcat /weblogic  myeclipse...
  • I_do_can
  • I_do_can
  • 2016年01月15日 17:04
  • 3055

Spring事物管理——五种配置方法

前段时间对spring的事务配置做了比较深入的研究,在此之间对Spring的事务配置虽说也配置过,但是一直没有一个清楚的认识。通过这次的学习发觉Spring的事务配置只要把思路理清,还是比较好掌握的。...
  • bear_wr
  • bear_wr
  • 2016年10月04日 02:08
  • 2210

SSH2配置事务的两种方式

在介绍Hibernate事务配置之前仍然要先搭建SSH2环境,在前文《Spring整合Struts2中拦截链与注解的使用 》中已经介绍过了Spring与Struts2的整合,接下来我们集成Hiber...
  • a1314517love
  • a1314517love
  • 2013年12月03日 11:13
  • 5996

ssh2 注解 事物

  • 2013年03月06日 14:54
  • 25.88MB
  • 下载

SSH学习——声明式事物管理(Spring)

1.什么是事物?     事务是一组操作的执行单元,相对于数据库操作来讲,事务管理的是一组SQL指令,比如增加,修改,删除等,事务的一致性,要求,这个事务内的操作必须全部执行成功,如果在此过程种...
  • qq_35661171
  • qq_35661171
  • 2017年10月20日 21:19
  • 77

SSH学习——声明式事物管理(Spring)

转自:http://www.cnblogs.com/andy6163/p/Andy_xiao.html SSH学习——声明式事物管理(Spring) 1.什么是事物?  ...
  • qq497291093
  • qq497291093
  • 2017年05月13日 23:22
  • 138

java SSH和SSM框架 事物配置以及管理

事务的四大特性: 1、一致性:将事务中所做的操作捆绑成一个原子单元,即对于事务所进行的数据修改等操作,要么全部执行,要么全部不执行。 2、原子性:事务在完成时,必须使所有的数据都保持一致状态,而...
  • qq6407521
  • qq6407521
  • 2016年08月18日 11:16
  • 3073

11级_Java_曹建波 03.02 Struts2_事物管理&文件上传

在实现登陆后 对admin的增删改查的操作中。              http客户端-------------> web容器 ----->struts2过滤器-              ...
  • freekiteyu
  • freekiteyu
  • 2013年03月02日 20:53
  • 469

Struts2_事物管理&文件上传

Struts2_事物管理&文件上传        2013-03-04 22:15520人阅读评论(0)收藏举报 在实现登陆后 对admin的增删改查的操作中。 http客户端----...
  • u013305082
  • u013305082
  • 2014年10月18日 08:18
  • 204

【SSH项目实战】国税协同平台-4.用户管理需求分析&CRUD方法2

下面我们继续来完成我们的用户管理模块 回顾一下我们的列表部分界面: 然后我们开始写新增方法,原来的列表界面的HTML如下: 用户管理 //全选、全反...
  • u013517797
  • u013517797
  • 2015年10月22日 12:47
  • 2453
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SSH2事物管理
举报原因:
原因补充:

(最多只允许输入30个字)