zoukankan      html  css  js  c++  java
  • spring+jdbc开发

    1.所需要的jar包

     spring基本jar包+ commons-dbcp.jar commons-pool.jar

    数据库驱动mysql-connector-java-3.1.13-bin.jar 

    如果采用注解方式管理组件要引入common-annotations.jar 

    2.注解方式管理事务的XML的配置

     <?xml version="1.0" encoding="UTF-8"?>

    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi
    ="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:context
    ="http://www.springframework.org/schema/context" 
           xmlns:aop
    ="http://www.springframework.org/schema/aop"
           xmlns:tx
    ="http://www.springframework.org/schema/tx"
           xsi:schemaLocation
    ="http://www.springframework.org/schema/beans
               http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
               http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-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"
    >
               
        <!-- 注解方式--> 
        <!--    
        <context:annotation-config/>
        <bean id="personDao" class="com.westsoft.daoimpl.PersonDaoBean"></bean>           
        <bean id="personServiec" class="com.westsoft.serviceimpl.PersonServiceBean">    
            <property name="personDao" ref="personDao"/>
        </bean>
        
    -->
        <!-- 注解方式自动扫描包方式 -->
        <context:component-scan base-package="com.westsoft"/>
            
        
        <!-- Aop支持 -->
        <aop:aspectj-autoproxy/>
        
        <!-- AOP可以用注解的方式也可以用配置XML的方式 -->
        
        <!-- 数据源配置 -->
        <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
            <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
            <property name="url" value="jdbc:mysql://localhost:3306/test?useUnicode=true&amp;characterEncoding=UTF-8"/>
            <property name="username" value="root"/>
            <property name="password" value="soft"/>
             <!-- 连接池启动时的初始值 -->
             <property name="initialSize" value="1"/>
             <!-- 连接池的最大值 -->
             <property name="maxActive" value="500"/>
             <!-- 最大空闲值.当经过一个高峰时间后,连接池可以慢慢将已经用不到的连接慢慢释放一部分,一直减少到maxIdle为止 -->
             <property name="maxIdle" value="2"/>
             <!--  最小空闲值.当空闲的连接数少于阀值时,连接池就会预申请去一些连接,以免洪峰来时来不及申请 -->
             <property name="minIdle" value="1"/>
         </bean>

        <!-- 事务管理 -->
        <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
             <property name="dataSource" ref="dataSource"/>
        </bean>
        <tx:annotation-driven transaction-manager="txManager"/>
        
    </beans> 

    3.示例代码(注解方式管理事务)

     package com.westsoft.serviceimpl;


    import java.util.List;

    import javax.annotation.Resource;
    import javax.sql.DataSource;

    import org.springframework.jdbc.core.JdbcTemplate;
    import org.springframework.stereotype.Service;
    import org.springframework.transaction.annotation.Propagation;
    import org.springframework.transaction.annotation.Transactional;

    import com.westsoft.bean.Person;
    import com.westsoft.dao.PersonDao;
    import com.westsoft.service.PersonService;

    @Service @Transactional
    public class PersonServiceBean implements PersonService {
        
        
        private JdbcTemplate jdbcTemplate;
        
        @Resource
        public void setJdbcTemplate(DataSource dataSource) {
            this.jdbcTemplate = new JdbcTemplate(dataSource);
        }
        
        @Resource
        private PersonDao personDao;
        
        public PersonDao getPersonDao() {
            return personDao;
        }

        public void setPersonDao(PersonDao personDao) {
            this.personDao = personDao;
        }
        
        
        @Override
        public void delete(Integer id) {
            // TODO Auto-generated method stub
            
        }

        @Override
        public Person getPerson(Integer id) {
            // TODO Auto-generated method stub
            return null;
        }

        @Override @Transactional(propagation=Propagation.NOT_SUPPORTED)
        public List<Person> getPersons() {
            // TODO Auto-generated method stub
            return null;
        }

        /*
         * 新增
         * @Transactional(rollbackFor=Exception.class)
         * RuntimeException运行期例外,默认回滚
         * Exception 非运行期例外,不回滚
         * @Transactional(rollbackFor=Exception.class)
         * @Transactional(propagation=Propagation.NOT_SUPPORTED):不开启事务
         * @Transactional(propagation=Propagation.REQUIRED):默认事务行为,如果方法运行时已经处在一个事务中,则加入该事务,
         *                                                     否则为自己创建一个事务
         * @Transactional(propagation=Propagation.REQUIREDNEW):必须开启一个新事务,事务中嵌套事务
         
         *  @Transactional(propagation=Propagation.SUPPORTS):如果方法在已存在的事务中执行,则加入该事务,如果不在事务中执行,
         *                                                  则方法在没有事务的环境下执行.
         *  @Transactional(propagation=Propagation.MANDATORY):指定方法只能在已有的事务中执行,不会自动创建事务,如果没有在事务
         *                                                  中执行,则抛出异常.
         *  @Transactional(propagation=Propagation.NEVER):不能在事务中执行,否则抛出异常
         *  
         *  @Transactional(propagation=Propagation.NESTED):
         *  
         
    */
        @Override @Transactional(propagation=Propagation.REQUIRED)
        public void save(String name) throws Exception {
            // TODO Auto-generated method stub
            
            this.jdbcTemplate.update("insert into person(name) values(?)", new Object[]{name}, 
                        new int[]{java.sql.Types.VARCHAR});
            throw new RuntimeException("运行期例外");
            
        }

        @Override
        public void update(Person person) {
            // TODO Auto-generated method stub
            
        }
    }

    4.XML配置方式管理事务

     <?xml version="1.0" encoding="UTF-8"?>

    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi
    ="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:context
    ="http://www.springframework.org/schema/context" 
           xmlns:aop
    ="http://www.springframework.org/schema/aop"
           xmlns:tx
    ="http://www.springframework.org/schema/tx"
           xsi:schemaLocation
    ="http://www.springframework.org/schema/beans
               http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
               http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-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"
    >
               
        <!-- 注解方式--> 
        <!--    
        <context:annotation-config/>
        <bean id="personDao" class="com.westsoft.daoimpl.PersonDaoBean"></bean>           
        <bean id="personServiec" class="com.westsoft.serviceimpl.PersonServiceBean">    
            <property name="personDao" ref="personDao"/>
        </bean>
        
    -->
        <!-- 注解方式自动扫描包方式 -->
        <context:component-scan base-package="com.westsoft"/>
            
        
        <!-- Aop支持 -->
        <aop:aspectj-autoproxy/>
        
        <!-- AOP可以用注解的方式也可以用配置XML的方式 -->
        
        <!-- 数据源配置 -->
        <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
            <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
            <property name="url" value="jdbc:mysql://localhost:3306/test?useUnicode=true&amp;characterEncoding=UTF-8"/>
            <property name="username" value="root"/>
            <property name="password" value="soft"/>
             <!-- 连接池启动时的初始值 -->
             <property name="initialSize" value="1"/>
             <!-- 连接池的最大值 -->
             <property name="maxActive" value="500"/>
             <!-- 最大空闲值.当经过一个高峰时间后,连接池可以慢慢将已经用不到的连接慢慢释放一部分,一直减少到maxIdle为止 -->
             <property name="maxIdle" value="2"/>
             <!--  最小空闲值.当空闲的连接数少于阀值时,连接池就会预申请去一些连接,以免洪峰来时来不及申请 -->
             <property name="minIdle" value="1"/>
         </bean>

        <!-- 事务管理 -->        
        <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
             <property name="dataSource" ref="dataSource"/>
        </bean>
        
        <!--注解方式 -管理事务--类中需要注解
        <tx:annotation-driven transaction-manager="txManager"/>
         
    -->
         
         <!-- 配置方式管理事务,可以出去类中的关于事务的注解 -->
         <aop:config>
              <aop:pointcut id="transactionPointcut" expression="execution(* com.westsoft.serviceimpl.*.*(..))"/>
              <aop:advisor advice-ref="txAdvice" pointcut-ref="transactionPointcut"/>
        </aop:config> 
        <tx:advice id="txAdvice" transaction-manager="txManager">
              <tx:attributes>
                <tx:method name="get*" read-only="true" propagation="NOT_SUPPORTED"/>
                <tx:method name="*"/>
              </tx:attributes>
        </tx:advice>
         
         
        <!-- 
        <bean id="personServiceBean" class="com.westsoft.serviceimpl.PersonServiceBean">
            <property name="jdbcTemplate" ref="dataSource"/>
        </bean>
         
    -->
         <!-- 
         <bean id="abc" class="com.westsoft.bean.testAbc"/>
          
    -->
    </beans> 

    5.将(3)中的类中除去事务的注解 

  • 相关阅读:
    2nd
    C#连接Sqlite 出现:混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该程序集。的解决方案
    后端项目与钉钉接口(第三方)对接要注意的问题
    springboot的第一节课
    - Missing artifact com.jate.fk.base:fk-base-service:jar:1.0.1
    Android框架模式
    函数的定义与调用
    kotlin基础
    观察者模式
    实现单例的六种方式
  • 原文地址:https://www.cnblogs.com/kuailewangzi1212/p/2408540.html
Copyright © 2011-2022 走看看