zoukankan      html  css  js  c++  java
  • Spring中如何配置事务

    学过SSH的都知道,整合了SSH之后,SSH的经典增删改查案例业务逻辑层的代码就十分简单.基本上都是一句话的事.
    	public void addUser(Webuserlogin user) {
    		//增
    		this.getHibernateTemplate().save(user);
    
    	}
    
    	public void delUser(int userid) {
    		//删
    		this.getHibernateTemplate().delete(queryById(userid));
    	}
    
    	public Webuserlogin queryById(int userid) {
    		//根据ID查询
    		return this.getHibernateTemplate().get(Webuserlogin.class, userid);
    	}
    
    	public void updateUser(Webuserlogin user) {
    		//改
    		Webuserlogin users = this.queryById(user.getUserid());
    
    		users.setUserrealname(user.getUserrealname());
    		users.setUseraddress(user.getUseraddress());
    
    		this.getHibernateTemplate().merge(users);
    
    	}
    
    	public List<Webuserlogin> queryList() {
    		//查
    		return this.getHibernateTemplate().find("From Webuserlogin");
    	}
    
    	public Webuserlogin loginWeb(Webuserlogin user) {
    		//登陆 == 按用户名/密码查询
    		List<Webuserlogin> list = this
    				.getHibernateTemplate()
    				.find(
    						"From Webuserlogin wul Where wul.username =  ? and wul.userpwd= ?",
    						user.getUsername(), user.getUserpwd());
    		if (list != null && list.size() > 0) {
    			return user;
    		}
    		return null;
    	}
    

    但是Spring的增删改查并没有将事务整合进去.给我们提供事务的切面,而在实际开发中,增删改查没有事务是非常不利于数据维护的.所以Spring在它的配置文件中给我们提供了用户自定义配置事务的方法.

    	<!-- 使用事务!!! -->
    	<bean id="transactionManager"
    		class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    		<property name="dataSource" ref="dataSource"></property>
    	</bean>
    	<!-- 配置事务中方法的属性 -->
    	<tx:advice id="transactionAdvice" transaction-manager="transactionManager">
    		<tx:attributes>
    			
    			<!-- update* 表示这个事务对 * com.services.*.*(..)中的update开头的方法都有效;
    					对于一些只读(比如登陆)的数据,可以设置readonly=true-->
    			<tx:method name="update*" propagation="REQUIRED" />
    			<tx:method name="del*" propagation="REQUIRED" />
    			<tx:method name="add*" propagation="REQUIRED" />
    			<tx:method name="*" propagation="REQUIRED" />
    		</tx:attributes>
    	</tx:advice>
    	<!--配置生效位置  -->
    	<aop:config>
    	<!-- 第一个星号:方法的返回值为次类型的值时生效(com.model.Webuserlogin/String);
    			2.services中的哪一个类生效 userServices*;
    			3.类中的何种方法生效del*;(..)方法中何种参数时生效 -->
    		<aop:advisor advice-ref="transactionAdvice"	
    			pointcut="execution(* com.services.*.*(..))" />
    	</aop:config>
    事务配置成功之后,在配置文件(applicationContext.xml)和serviceImpl层会有对应的call out--call in小电话

    上图--



  • 相关阅读:
    源码学习之Yii-去掉magic_quote里的反斜线
    PHP中传递回调函数的方法
    mac里的terminal环境下如何跳转行首和行末
    mac下切换输入法
    nginx上配置vhosts
    MySQL学习之查询优化(一)
    MySQL学习之索引(三)
    在LINUX下为自己加上sudo权限的方法
    MySQL学习之索引(二)
    MySQL学习之索引(一)
  • 原文地址:https://www.cnblogs.com/qwop/p/6637320.html
Copyright © 2011-2022 走看看