SSH2事务管理(transactionproxyfactorybean)

来源:互联网 发布:炫酷个人网站php源码 编辑:程序博客网 时间:2024/05/21 15:17

废话不多说,开始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 blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.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);}@Overridepublic List findPersonList(int start, int end, Person person) throws HibernateException, SecurityException, IllegalArgumentException, NoSuchMethodException, IllegalAccessException, InvocationTargetException {return  persondao.findPersonList(start, end, person);}@Overridepublic void updatePerson(Person person) {persondao.updatePerson(person);}@Overridepublic void deletePersonByKeyid(String keyid) {persondao.deletePersonByKeyid(keyid);}}

 

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

  • daima.part1.rar (9.5 MB)
  • 下载次数: 4
  • daima.part3.rar (5.6 MB)
  • 下载次数: 4
  • daima.part2.rar (9.5 MB)
  • 下载次数: 5
0 0
原创粉丝点击