spring_5处理数据库

spring 使用JDBC

spring利用spring中的JdbcTemplate对象操作数据库
从Ioc容器中获取JdbcTemplate对象实例,通过调用JdbcTemplate对象的相应的insert,update,delete,query方法实现数据库操作

基于配置xml的spring Jdbc
  1. 写一个实体类
  2. 写一个dao层类,针对实体类的持久化操作。在类中定义一个JdbcTemplate成员变量,通过setJdbcTemplate()方法来装配bean的JdbcTemplate属性。类的方法通过JdbcTemplate的引用变量进行数据库操作,并返回相应结果集
  3. 写一个测试类,调用dao层的方法
  4. spring的配置文件applicationContext.xml中的配置
    <!-- 导入资源文件 -->
    <context:property-placeholder location="classpath:db.properties"/>
    
    <!-- 配置c3p0数据源 -->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="user" value="${jdbc.user}"></property>
        <property name="password" value="${jdbc.password}"></property>
        <property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>
        <property name="driverClass" value="${jdbc.driverClass}"></property>
        
        <property name="initialPoolSize" value="${jdbc.initPoolSize}"></property>
        <property name="maxPoolSize" value="${jdbc.maxPoolSize}"></property>
    </bean>
    
    <!-- 配置相应的bean -->
    <bean id="employeeDao" ...>
        <property name="jdbcTempalte" ref="jdbcTemplate">
    </bean>

    <!-- 配置 spring 的 Jdbc Template -->
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dataSource"></property>
    </bean>  
基于注解的Spring Jdbc
  1. 写一个实体类
  2. 写一个dao层的类,针对实体类的持久化操作,添加@Repository注解。在类中定义一个JdbcTemplate成员变量,并添加@Autowire注解,自动装配bean的JdbcTemplate属性。类的方法通过JdbcTemplate的引用变量进行数据库操作,并返回相应结果集
  3. 写一个测试类,只需调用dao层的方法进行相应的持久化操作
  4. spring的配置文件applicationContext.xml中的配置
<!-- 自动扫描包 -->
    <context:component-scan base-package="jdbcByZhujie"></context:component-scan>
    <!-- 导入资源文件 -->
    <context:property-placeholder location="classpath:db.properties"/>
    
    <!-- 配置c3p0数据源 -->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="user" value="${jdbc.user}"></property>
        <property name="password" value="${jdbc.password}"></property>
        <property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>
        <property name="driverClass" value="${jdbc.driverClass}"></property>
        
        <property name="initialPoolSize" value="${jdbc.initPoolSize}"></property>
        <property name="maxPoolSize" value="${jdbc.maxPoolSize}"></property>
    </bean>
    
    <!-- 配置 spring 的 Jdbc Template -->
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dataSource"></property>
    </bean>  

spring事务

  • 事务的使用
    一般在service层的方法上使用事务,在方法上添加事务注解或者通过配置文件配置
    当测试类调用service层的一个方法时,他需要调用dao层多个方法(数据库的操作)。当某个方法出现异常时可以回滚到开始的状态。
  • spring中设置事务的属性
    1.指定事务的传播行为,使用propagation ,即当前事务方法被另外一个事务方法调用时,如何使用事务
    默认值REQUIRE,使用调用方法的事务
    REQUIRE_NEW使用自己的事务,调用的事务方法的事务被挂起。
    2.指定事务的隔离级别,通过设置isolation属性,最常用的取值为READ_COMMITTED
    3.指定对那些异常不进行回滚。通过设置noRollbackFor属性,默认情况Spring的声明式事务对所有异常进行回滚,通常使用默认值
    4.事务的只读属性,使用readOnly指定事务事务为只读,表示这个事务只读取数据不更新数据
    5.事务的占用时间,使用timeout指定强制回滚之前事务可以占用的时间
基于注解的Spring 事务(Spring声明式事务)
  1. 写相应的实体类
  2. 写相应的dao层,通过注解的方式进行持久化操作
  3. 写service层,在这里添加事务注解@Transactional()可以配置事务的属性
  4. 在spring配置文件applicationContext.xml添加的配置
    <!-- 配置事务管理器 -->
    <bean id="transactionManager" 
    class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"></property>
    </bean>
    <!-- 启用事务注解 -->
    <tx:annotation-driven transaction-manager="transactionManager"/>  

配置事务属性

@Transactional(propagation=Propagation.REQUIRED
            ,isolation=Isolation.READ_COMMITTED
            ,noRollbackFor={UserAccountException.class}
            ,readOnly=true
            ,timeout=3)  
基于配置XML的Spring 事务
  1. 写相应的实体类
  2. 写相应的dao层的类,通过配置xml的方法装配bean。即要写setJdbcTemplate()方法来获取实例
  3. 写service层的类(通过配置spring文件在该类中方法上添加事务)
  4. 在spring配置文件applicationContext.xml添加的配置
    <!-- 1.配置事务管理器 -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"></property>
    </bean>
    <!-- 2.配置事务切入点,以及把事务切入点和事务关联起来(相当于在service层方法上添加注解) -->
    <aop:config>
        <aop:pointcut expression="execution(* txByXml.serviceImpl.*.*(..))" id="txPointCut"/>
        <aop:advisor advice-ref="txAdvice" pointcut-ref="txPointCut"/>
    </aop:config> 
    <!-- 3.配置事务属性(相当于在注解@Transaction()中配置属性) -->
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <tx:method name="purchase" propagation="REQUIRED"/>
            <tx:method name="get*" read-only="true"/>
            <tx:method name="find*" read-only="true"/>
            <tx:method name="*"/>
        </tx:attributes>
    </tx:advice>
posted @ 2016-05-07 16:52  Taogen  阅读(167)  评论(0编辑  收藏  举报