Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2797832
  • 博文数量: 471
  • 博客积分: 7081
  • 博客等级: 少将
  • 技术积分: 5369
  • 用 户 组: 普通用户
  • 注册时间: 2012-01-04 21:55
文章分类

全部博文(471)

文章存档

2014年(90)

2013年(69)

2012年(312)

分类: Java

2012-03-12 21:44:46

使用Spring+JDBC集成步骤如下:第一要配置数据源,第二要配置事务
配置数据源,如:
 
   
   
   
   
     .....略
 

配置事务。配置事务时,需要在xml配置文件中引入用于声明事务的tx命名空间(见下页),事务的配置方式有两种:注解方式和基于XML配置方式(比较麻烦)。
 
数据源:

点击(此处)折叠或打开

  1. <context:property-placeholder location=“jdbc.properties”/>
  2.  <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
  3.    <property name="driverClassName" value="${driverClassName}"/>
  4.     <property name="url" value="${url}"/>
  5.     <property name="username" value="${username}"/>
  6.     <property name="password" value="${password}"/>
  7.      <!-- 连接池启动时的初始值 -->
  8.      <property name="initialSize" value="${initialSize}"/>
  9.      <!-- 连接池的最大值 -->
  10.      <property name="maxActive" value="${maxActive}"/>
  11.      <!-- 最大空闲值.当经过一个高峰时间后,连接池可以慢慢将已经用不到的连接慢慢释放一部分,一直减少到maxIdle为止 -->
  12.      <property name="maxIdle" value="${maxIdle}"/>
  13.      <!-- 最小空闲值.当空闲的连接数少于阀值时,连接池就会预申请去一些连接,以免洪峰来时来不及申请 -->
  14.      <property name="minIdle" value="${minIdle}"/>
  15.   </bean>
 

dataSource 配置成一个单例的bead 还有一个close方法 &是转义字符,如果用配置文件property.properies,eclipse会自动转义的

使用属性占位符,就可以数据源的配置信息写在.properties文件里,自己喜欢

点击(此处)折叠或打开

  1. driverClassName=org.gjt.mm.mysql.Driver
  2. url=jdbc\:mysql\://localhost\:3306/itcast?useUnicode\=true&characterEncoding\=UTF-8
  3. username=root
  4. password=king
  5. initialSize=1
  6. maxActive=500
  7. maxIdle=2
  8. minIdle=1
配置事务:
采用注解方式(要求注入一个数据源,我们把上面的注入就OK,dataSource)

点击(此处)折叠或打开

  1. <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  2.    <property name="dataSource" ref="dataSource"/>
  3. </bean>
定义配置项,注解本身是干不了事的,是因为有一个处理器,对这个注解进行处理,专门对这个注解进行解析,开启对事务注解的支持。如果是所有bean都要用到注解,还要在开头加上配置,
 
这里只是支持事务注解

点击(此处)折叠或打开

  1. <!– 采用@Transactional注解方式使用事务 -->
  2.   <tx:annotation-driven transaction-manager="txManager"/>
beans.xml的配置

点击(此处)折叠或打开

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns=""
  3.        xmlns:xsi=""
  4.        xmlns:context=""
  5.        xmlns:aop=""
  6.        xmlns:tx=""
  7.        xsi:schemaLocation="
  8.            /spring-beans-2.5.xsd
  9.             /spring-context-2.5.xsd
  10.             /spring-aop-2.5.xsd
  11.             /spring-tx-2.5.xsd">

  12.      <context:property-placeholder location="classpath:jdbc.properties"/>
  13.      <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
  14.      <property name="driverClassName" value="${driverClassName}"/>
  15.      <property name="url" value="${url}"/>
  16.      <property name="username" value="${username}"/>
  17.      <property name="password" value="${password}"/>
  18.      <!-- 连接池启动时的初始值 -->
  19.          <property name="initialSize" value="${initialSize}"/>
  20.          <!-- 连接池的最大值 -->
  21.          <property name="maxActive" value="${maxActive}"/>
  22.          <!-- 最大空闲值.当经过一个高峰时间后,连接池可以慢慢将已经用不到的连接慢慢释放一部分,一直减少到maxIdle为止 -->
  23.          <property name="maxIdle" value="${maxIdle}"/>
  24.          <!-- 最小空闲值.当空闲的连接数少于阀值时,连接池就会预申请去一些连接,以免洪峰来时来不及申请 -->
  25.          <property name="minIdle" value="${minIdle}"/>
  26.      </bean>

  27.     <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  28.        <property name="dataSource" ref="dataSource"/>
  29.     </bean>
  30.     <tx:annotation-driven transaction-manager="txManager"/>
  31.     
  32.     <bean id="personService" class="cn.itcast.service.impl.PersonServiceBean">
  33.         <property name="dataSource" ref="dataSource"/>
  34.     </bean>
  35. </beans>

配置事务的bean

@Transactional在类名前标注,开启事务管理,则所有方法都纳入spring管理

点击(此处)折叠或打开

  1. package cn.itcast.service.impl;

  2. import java.util.List;

  3. import javax.sql.DataSource;

  4. import org.springframework.jdbc.core.JdbcTemplate;
  5. import org.springframework.transaction.annotation.Transactional;

  6. import cn.itcast.bean.Person;
  7. import cn.itcast.service.PersonService;

  8. @Transactional
  9. public class PersonServiceBean implements PersonService {
  10.     private JdbcTemplate jdbcTemplate;
  11.     
  12.     public void setDataSource(DataSource dataSource) {
  13.         this.jdbcTemplate = new JdbcTemplate(dataSource);
  14.     }

  15.     public void delete(Integer personid) {
  16.         jdbcTemplate.update("delete from person where id=?", new Object[]{personid},
  17.                 new int[]{java.sql.Types.INTEGER});
  18.     }

  19.     public Person getPerson(Integer personid) {        
  20.         return (Person)jdbcTemplate.queryForObject("select * from person where id=?", new Object[]{personid},
  21.                 new int[]{java.sql.Types.INTEGER}, new PersonRowMapper());
  22.     }

  23.     @SuppressWarnings("unchecked")
  24.     public List<Person> getPersons() {
  25.         return (List<Person>)jdbcTemplate.query("select * from person", new PersonRowMapper());
  26.     }

  27.     public void save(Person person) {
  28.         jdbcTemplate.update("insert into person(name) values(?)", new Object[]{person.getName()},
  29.                 new int[]{java.sql.Types.VARCHAR});
  30.     }

  31.     public void update(Person person) {
  32.         jdbcTemplate.update("update person set name=? where id=?", new Object[]{person.getName(), person.getId()},
  33.                 new int[]{java.sql.Types.VARCHAR, java.sql.Types.INTEGER});
  34.     }
  35. }


测试

点击(此处)折叠或打开

  1. package junit.test;


  2. import org.junit.BeforeClass;
  3. import org.junit.Test;
  4. import org.springframework.context.ApplicationContext;
  5. import org.springframework.context.support.ClassPathXmlApplicationContext;

  6. import cn.itcast.bean.Person;
  7. import cn.itcast.service.PersonService;

  8. public class PersonServiceTest {
  9.     private static PersonService personService;

  10.     @BeforeClass
  11.     public static void setUpBeforeClass() throws Exception {
  12.         try {
  13.             ApplicationContext cxt = new ClassPathXmlApplicationContext("beans.xml");
  14.             personService = (PersonService) cxt.getBean("personService");
  15.         } catch (RuntimeException e) {
  16.             e.printStackTrace();
  17.         }
  18.     }

  19.     @Test public void save(){
  20.         for(int i=0; i<5; i++)
  21.             personService.save(new Person("传智播客"+ i));
  22.     }
  23.     
  24.     @Test public void getPerson(){
  25.         Person person = personService.getPerson(1);
  26.         System.out.println(person.getName());
  27.     }
  28.     
  29.     @Test public void update(){
  30.         Person person = personService.getPerson(1);
  31.         person.setName("张xx");
  32.         personService.update(person);
  33.     }
  34.     
  35.     @Test public void delete(){
  36.         personService.delete(1);
  37.     }
  38.     
  39.     @Test public void getBeans(){
  40.         for(Person person : personService.getPersons()){
  41.             System.out.println(person.getName());
  42.         }
  43.     }
  44. }



 

 



 



 
 
 
 
阅读(503) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

nba76ers2012-03-12 23:44:55

先初始化容器
@BeforeClass

    public static void setUpBeforeClass() throws Exception {

        try {

            ApplicationContext cxt = new ClassPathXmlApplicationContext("beans.xml");

            personService = (PersonService) cxt.getBean("personService");

     &nb