zoukankan      html  css  js  c++  java
  • 吴裕雄--天生自然轻量级JAVA EE企业应用开发Struts2Sping4Hibernate整合开发学习笔记:Spring_TransactionProxyFactoryBean

    <?xml version="1.0" encoding="GBK"?>
    <project name="spring" basedir="." default="">
        <property name="src" value="src"/>
        <property name="dest" value="classes"/>
    
        <path id="classpath">
            <fileset dir="../../lib">
                <include name="**/*.jar"/>
            </fileset>
            <pathelement path="${dest}"/>
        </path>
    
        <target name="compile" description="Compile all source code">
            <delete dir="${dest}"/>
            <mkdir dir="${dest}"/>
            <copy todir="${dest}">
                <fileset dir="${src}">
                    <exclude name="**/*.java"/>
                </fileset>        
            </copy>
            <javac destdir="${dest}" debug="true" includeantruntime="yes"
                deprecation="false" optimize="false" failonerror="true">
                <src path="${src}"/>
                <classpath refid="classpath"/>
                <compilerarg value="-Xlint:deprecation"/>
            </javac>
        </target>
    
        <target name="run" description="Run the main class" depends="compile">
            <java classname="lee.SpringTest" fork="yes" failonerror="true">
                <classpath refid="classpath"/>
            </java>
        </target>
    
    </project>
    drop database spring;
    create database spring;
    use spring;
    
    create table news_inf
    (
     news_id int primary key auto_increment,
     news_title varchar(255) unique,
     news_content varchar(255)
    );
    

      

    <?xml version="1.0" encoding="GBK"?>
    <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xmlns="http://www.springframework.org/schema/beans"
    	xmlns:p="http://www.springframework.org/schema/p"
    	xsi:schemaLocation="http://www.springframework.org/schema/beans
    	http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">
    	<!-- 定义数据源Bean,使用C3P0数据源实现,并注入数据源的必要信息 -->
    	<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
    		destroy-method="close"
    		p:driverClass="com.mysql.jdbc.Driver"
    		p:jdbcUrl="jdbc:mysql://localhost/spring"
    		p:user="root"
    		p:password="32147"
    		p:maxPoolSize="40"
    		p:minPoolSize="2"
    		p:initialPoolSize="2"
    		p:maxIdleTime="30"/>
    	<!-- 配置JDBC数据源的局部事务管理器,使用DataSourceTransactionManager 类 -->
    	<!-- 该类实现PlatformTransactionManager接口,是针对采用数据源连接的特定实现-->
    	<!-- 配置DataSourceTransactionManager时需要依注入DataSource的引用 -->
    	<bean id="transactionManager" 
    		class="org.springframework.jdbc.datasource.DataSourceTransactionManager"
    		p:dataSource-ref="dataSource"/>
    	<!-- 配置一个业务逻辑Bean -->
    	<bean id="newsDao" class="org.crazyit.app.dao.impl.NewsDaoImpl"
    		p:ds-ref="dataSource"/>
    	<!-- 为业务逻辑Bean配置事务代理
    		transactionManager用于为配置事务代理注入所需的事务管理器
    		target用于指定为哪个Bean配置事务代理 -->
    	<bean id="newsDaoTrans" class=
    	"org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
    		p:transactionManager-ref="transactionManager"
    		p:target-ref="newsDao">
    		<!-- 指定事务属性 -->
    		<property name="transactionAttributes"> 
    			<props> 
    				<prop key="*">PROPAGATION_REQUIRED</prop> 
    			</props>
    		</property>
    	</bean> 
    </beans>
    

      

    package lee;
    
    import org.springframework.context.support.*;
    import org.springframework.context.*;
    
    import org.crazyit.app.dao.*;
    /**
     * Description:
     * <br/>网站: <a href="http://www.crazyit.org">疯狂Java联盟</a>
     * <br/>Copyright (C), 2001-2016, Yeeku.H.Lee
     * <br/>This program is protected by copyright laws.
     * <br/>Program Name:
     * <br/>Date:
     * @author  Yeeku.H.Lee kongyeeku@163.com
     * @version  1.0
     */
    public class SpringTest
    {
    	public static void main(String[] args)
    	{
    		// 创建Spring容器
    		ApplicationContext ctx = new
    			ClassPathXmlApplicationContext("beans.xml");
    		// 获取事务代理Bean
    		NewsDao dao = (NewsDao)ctx
    			.getBean("newsDaoTrans" , NewsDao.class);
    		// 执行插入操作
    		dao.insert("疯狂Java" , "轻量级Java EE企业应用实战");
    	}
    }
    

      

    package org.crazyit.app.dao;
    
    /**
     * Description:
     * <br/>网站: <a href="http://www.crazyit.org">疯狂Java联盟</a>
     * <br/>Copyright (C), 2001-2016, Yeeku.H.Lee
     * <br/>This program is protected by copyright laws.
     * <br/>Program Name:
     * <br/>Date:
     * @author  Yeeku.H.Lee kongyeeku@163.com
     * @version  1.0
     */
    public interface NewsDao
    {
        public void insert(String title, String content);
    }
    package org.crazyit.app.dao.impl;
    
    import javax.sql.DataSource;
    import java.sql.Connection;
    
    import org.springframework.jdbc.core.JdbcTemplate;
    
    import org.crazyit.app.dao.*;
    /**
     * Description:
     * <br/>网站: <a href="http://www.crazyit.org">疯狂Java联盟</a>
     * <br/>Copyright (C), 2001-2016, Yeeku.H.Lee
     * <br/>This program is protected by copyright laws.
     * <br/>Program Name:
     * <br/>Date:
     * @author  Yeeku.H.Lee kongyeeku@163.com
     * @version  1.0
     */
    public class NewsDaoImpl implements NewsDao
    {
        private DataSource ds;
        public void setDs(DataSource ds)
        {
            this.ds = ds;
        }
        public void insert(String title, String content)
        {
            JdbcTemplate jt = new JdbcTemplate(ds);
            jt.update("insert into news_inf"
                + " values(null , ? , ?)"
                , title , content);
            // 两次插入的数据违反唯一键约束
            jt.update("insert into news_inf"
                + " values(null , ? , ?)"
                , title , content);
            // 如果没有事务控制,则第一条记录可以被插入
            // 如果增加事务控制,将发现第一条记录也插不进去。
        }
    }
  • 相关阅读:
    新人补钙系列教程之:回调函数
    新人补钙系列教程之:卡马克卷轴算法
    新人补钙系列教程之:体验ApplicationDomain 应用程序域
    新人补钙系列教程之:一天一招让你的代码越来越好
    新人补钙系列教程之:AS3 与 PHP 简单通信基础
    新人补钙系列教程之:Molehill底层API中最重要的Context3D
    新人补钙系列教程之:AS 与 JS 相互通信
    新人补钙系列教程之:AS3 位运算符
    新人补钙系列教程之:XML处理方法
    新人补钙系列教程之:网页游戏分线到不分线
  • 原文地址:https://www.cnblogs.com/tszr/p/12372694.html
Copyright © 2011-2022 走看看