欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Spring jdbc Template和Spring 事务管理

程序员文章站 2022-07-13 21:21:23
...

使用jdbcTemplate完成增删改查操作(重点)

package com.it.jdbctemplate;

import java.util.List;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import com.it.domain.User;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations="classpath:applicationContext.xml")
public class JdbcTemplateTest3 {
    @Autowired
    private JdbcTemplate jdbcTemplate;
    //修改
    @Test
    public void test1(){
        jdbcTemplate.execute("update t_user set sex='男' where id=2");
    }
    //添加操作
    @Test
    public void test2(){
        jdbcTemplate.execute("insert into t_user values(null,'赵六',20,'女')");
    }
    
    //删除操作
    @Test
    public void test3(){
        jdbcTemplate.execute("delete from  t_user where id =5");
    }
    //测试返回简单数据类型
    @Test
    public void test4(){
        String name = jdbcTemplate.queryForObject("select name from t_user where id=?", String.class,1);
        System.out.println(name);
    }
    //测试返回简单数据类型
    @Test
    public void test5(){
        Integer count = jdbcTemplate.queryForObject("select count(*) from t_user",Integer.class);
        System.out.println(count);
    }
    //使用BeanPropertyRowMapper
    @Test
    public void test6(){
//        User user = jdbcTemplate.queryForObject("select * from t_user where id=?",
//                new BeanPropertyRowMapper<User>(User.class),2);
        
        List<User> user = jdbcTemplate.query("select * from t_user", new BeanPropertyRowMapper<User>(User.class));
        System.out.println(user);
        
    }
    
    
}

 


掌握数据库连接池的使用和配置(重点)

<?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"
	xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
        
        <!--引入外部的properties文件  -->
        <context:property-placeholder location="classpath:db.properties"/>
	<!-- <bean id="driveManageDatoSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
	<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
	<property name="url" value="jdbc:mysql:///springtest"></property>
	<property name="username" value="root"></property>
	<property name="password" value="123"></property>
	</bean> -->
	<!-- 设置c3p0连接池 -->
	<bean id="c3p0DataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
	<property name="driverClass" value="${jdbc.driverClass}"/>
	<property name="jdbcUrl" value="${jdbc.url}"/>
	<property name="user" value="${jdbc.username}"/>
	<property name="password" value="${jdbc.password}"/>
	
	</bean>
	
	<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
	<property name="dataSource" ref="c3p0DataSource"></property>
	</bean>
	
</beans>    

  


jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql:///springtest
jdbc.username=root
jdbc.password=123

  


3.掌握事务的传播行为(重点)

Spring事务管理机制

3.1PlatformTransactionManager(平台事务管理器)

3.2TransactionDefinition(事务的定义信息)

传播 :它解决的是两个被事务管理的方法互相调用问题。它与数据库没有关系,是程序内部维护的问题

propagation required(传播请求) :  默认值 两个操作处于同一个事务,如果之前没有事务,新建一个事务

propagation requires new (传播新请求) : 两个操作处于不同的事务

propagtion nested  : 它是一种嵌套事务,它是使用SavePoint来实现的。事务回滚时可以回滚到指定的 savepoint

注意:它只对DataSourceTransactionManager有作用

3.2TransactionStatus(事务状态信息)

  

4.了解基于xml配置声明式事务管理(了解)

    <!--创建事务管理器  -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="c3p0DataSource"></property>
    </bean>
    <!--配置通知  -->
    <tx:advice id="txAdvice"  transaction-manager="transactionManager">
    <tx:attributes>
    <tx:method  name="account" />
    </tx:attributes>
    </tx:advice>
    
    
    
    <!--配置切面  -->
    <aop:config>
    <aop:pointcut expression="execution(* com.it.service.IAccountService.account(..))" id="txPointcut"/>
    <aop:advisor advice-ref="txAdvice" pointcut-ref="txPointcut"/>
    </aop:config>

 


5.掌握基于annotation声明式事务管理(重点)

@Transactional()
    public void account(String outname, String inname, double money) {
        //转出操作
        accountDao.accountOut(outname, money);
        System.out.println(10/0);//一定会出现异常
        //转入操作
        accountDao.accountIn(inname, money);
        
    }



<tx:annotation-driven transaction-manager="transactionManager"/>