《Spring》------声明式事务处理

来源:互联网 发布:那个新闻软件最好 编辑:程序博客网 时间:2024/06/03 05:07

- 前言

提到对数据库的CRUD操作就想到了事务,在之前做过的项目中操作事务时,用到的是Spring框架,Spring的声明式事务处理将,操作起来相对于JDBC来说,简单了很多,其目的是让程序员不再关注事务。

操作步骤

创建持久化类和映射文件

 创建hibernate.cfg.xml,person.class、person.hbm.xml 代码小编省略

写spring的配置文件,引入sessionFactory

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"    xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xsi:schemaLocation="http://www.springframework.org/schema/beans           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd           http://www.springframework.org/schema/aop            http://www.springframework.org/schema/aop/spring-aop-2.5.xsd           http://www.springframework.org/schema/tx            http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">  <!--JDBC文件配置--><bean    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">        <property name="locations">            <value>classpath:jdbc.properties</value>        </property></bean>    <bean id="dataSource" destroy-method="close"        class="org.apache.commons.dbcp.BasicDataSource">        <property name="driverClassName" value="${jdbc.driverClassName}" />        <property name="url" value="${jdbc.url}" />        <property name="username" value="${jdbc.username}" />        <property name="password" value="${jdbc.password}" />    </bean>    <!--引入SessionFactory-->    <bean id="sessionFactory2"        class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">        <property name="dataSource" ref="dataSource" />        <!-- 映射文件所在的路径 -->        <property name="mappingDirectoryLocations">            <list>                <!-- spring容器会去该包及子包下搜索所有的映射文件 -->                <value>com/dmsd/spring/domain</value>            </list>        </property>        <property name="hibernateProperties">            <props>                <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop>                <prop key="hibernate.show_sql">true</prop>                <prop key="hibernate.hbm2ddl.auto">update</prop>            </props>        </property>    </bean>    <!--           创建 事物的管理器  其作用就是告诉Spring容器使用的是什么事物管理技术            1.HiberanteTransactionManager            2.DataSourceTransactionManager            3.JdoTransactionManager    -->    <bean id="transactionManager"         class="org.springframework.orm.hibernate3.HibernateTransactionManager">        <property name="sessionFactory">            <ref bean="sessionFactory2" />        </property>    </bean>    <!--         事物的声明             1、告诉Spring容器事物管理器            2.告诉Spring容器什么样的目标方法采用什么样的事物策略    -->    <tx:advice transaction-manager="transactionManager" id="tx">        <tx:attributes>        <!--             name:目标方法的范围            isolation:事物的隔离机制            propagation:传播属性,解决事物的嵌套问题            read-only:true(只读事物) false(读写事物)         -->            <tx:method name="save*" isolation="DEFAULT" propagation="REQUIRED"                read-only="false" />        </tx:attributes>    </tx:advice>    <aop:config>        <aop:pointcut expression="execution(* com.dmsd.spring.service.impl.*.*(..))"            id="perform" />        <aop:advisor advice-ref="tx" pointcut-ref="perform" />    </aop:config>  <!--编写personService和personDao的bean-->    <bean id="personService" class="com.dmsd.spring.service.impl.PersonServiceImpl">        <property name="personDao">            <ref bean="personDao" />        </property>    </bean>    <bean id="personDao" class="com.dmsd.spring.dao.impl.PersonDaoImpl">        <property name="sessionFactory">            <ref bean="sessionFactory2" />        </property>    </bean></beans>

Persondao

public interface PersonDao {    public void savePerson(Person person);}

PersonDaoImpl

public class PersonDaoImpl extends HibernateDaoSupport implements PersonDao {    public void savePerson(Person person) {        this.getHibernateTemplate().save(person);    }}

PersonService

public interface PersonService {    public void savePerson(Person person);}

PersonServiceImpl

public class PersonServiceImpl implements PersonService {    private PersonDao personDao;    public PersonDao getPersonDao() {        return personDao;    }    public void setPersonDao(PersonDao personDao) {        this.personDao = personDao;    }    public void savePerson(Person person) {        this.personDao.savePerson(person);    }}

测试类

@Test    public void testSavePerson(){        ApplicationContext context= new ClassPathXmlApplicationContext("applicationContext.xml");        PersonService personService =(PersonService) context.getBean("personService");        Person person=new Person();        person.setDescription("这是谁的媳妇儿????");        person.setName("王二狗");        personService.savePerson(person);    }

小结

  • Spring的声明式事务处理配置在项目中的应用大概就这几个步骤,其中主要的配置都在Spring的配置文件中了,在引入SessionFactory的时候,要配置好DataSource,然后声明事务管理器,声明事务策略,配置AOP切面,这样,一条线就下来了。
1 0
原创粉丝点击