人很少使用Spring而不使用Spring事务管理器的应用,因此常常有人会问:是否用了Spring,就一定要用Spring事务管理器,否则就无法进行数据的持久化操作呢?事务管理器和DAO是什么关系呢? 也许是DAO和事务管理如影随行的缘故吧,这个看似简单的问题实实在在地存在着,从初学者心中涌出,萦绕在老手的脑际。答案当然是否定的!我们都知道:事务管理是保证数据操作的事务性(即原子性、一致性、隔离性、持久性,即所谓的ACID),脱离了事务性,DAO照样可以顺利地进行数据的操作。
JDBC访问数据库
下面,我们来看一段使用Spring JDBC进行数据访问的代码:
01 package com.baobaotao.withouttx.jdbc;
02
03 import org.springframework.beans.factory.annotation.Autowired;
04 import org.springframework.jdbc.core.JdbcTemplate;
05 import org.springframework.stereotype.Service;
06 import org.springframework.context.ApplicationContext;
07 import org.springframework.context.support.ClassPathXmlApplicationContext;
08 import org.apache.commons.dbcp.BasicDataSource;
09
10 @Service("userService")
11 public class UserJdbcWithoutTransManagerService {
12 @Autowired
13 private JdbcTemplate jdbcTemplate;
14
15 public void addScore(String userName,int toAdd){
16 String sql = "UPDATE t_user u SET u.score = u.score + WHERE user_name = ";
17 jdbcTemplate.update(sql,toAdd,userName);
18 }
19
20 public static void main(String[] args) {
21 ApplicationContext ctx = new
22 ClassPathXmlApplicationContext("com/baobaotao/withouttx/jdbc/jdbcWithoutTx.xml");
23 UserJdbcWithoutTransManagerService service =
24 (UserJdbcWithoutTransManagerService)ctx.getBean("userService");
25 JdbcTemplate jdbcTemplate = (JdbcTemplate)ctx.getBean("jdbcTemplate");
26 BasicDataSource basicDataSource = (BasicDataSource)jdbcTemplate.getDataSource();
27
28 //①检查数据源autoCommit的设置
29 System.out.println("autoCommit:"+ basicDataSource.getDefaultAutoCommit());
30
31 //②插入一条记录,初始分数为10
32 jdbcTemplate.execute("INSERT INTO t_user(user_name,password,score,last_logon_time)
33 VALUES('tom','123456',10,"+System.currentTimeMillis()+")");
34
35 //③调用工作在无事务环境下的服务类方法,将分数添加20分
36 service.addScore("tom",20);
37
38 //④查看此时用户的分数
39 int score = jdbcTemplate.queryForInt(
40 "SELECT score FROM t_user WHERE user_name ='tom'");
41 System.out.println("score:"+score);
42 jdbcTemplate.execute("DELETE FROM t_user WHERE user_name='tom'");
43 }
44 }
45
其中,jdbcWithoutTx.xml的配置文件如下所示:
01 < xml version="1.0" encoding="UTF-8" >
02
03 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
04 xmlns:context="http://www.springframework.org/schema/context"
05 xmlns:p="http://www.springframework.org/schema/p"
06 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
07 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
08
09
10
11 12 destroy-method="close" 13 p:driverClassName="${jdbc.driverClassName}" 14 p:url="${jdbc.url}" 15 p:username="${jdbc.username}" 16 p:password="${jdbc.password}"/> 17 18 19 p:dataSource-