2014/3/12 spring jdbcTemplate和事物

关于Spring 下jdbcTemplate的使用总结如下:

传统的jdbc对数据库操作很繁琐,需要创建连接,执行sql,释放连接等等的操作,并放在try catch快中,jdbcTemplate对以上这些操作进行了封装,笔者尝试使用了下:

1:第一步引入相关包:

pom包:

<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-jdbc</artifactId>
	<version>2.5.4</version>
</dependency>
<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-jdbc</artifactId>
	<version>2.5.4</version>
	<classifier>sources</classifier>
</dependency>


2.配置dataSource数据源,jdbcTemplate和DataSourceTransactionManager

<servlet-name>-servlet.xml:

<!--  配置dal数据源 -->
	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> 
 		<property name="driverClassName" value="com.ibm.db2.jcc.DB2Driver"/> 
 		<property name="url" value="jdbc:db2://192.11.12.223:60028/SSTDB"/> 
 		<property name="username" value="admin"/> 
 		<property name="password" value="admin"/> 
	</bean>
destroy-method="close"
BasicDataSource提供了close()方法关闭数据源,设定上述属性值可以使得Spring容器关闭时,数据源能正常关闭

驱动名,数据库地址,用户名,密码,缺一不可


<!-- jdbcTemplate配置 -->
	<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> 
		<property name="dataSource" ref="dataSource" /> 
	</bean>
以便后面再使用jdbcTemplate时候能够自动注入该Bean,类似setter ,getter的注入


<!-- jdbc事务配置 -->
	<bean name="transactionManager"
		class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSource"></property>
	</bean>
该事务管理配置不全,明天在研究Spring 3.X的事物配置,包括基于tx/aop命名空间的事物配置



3:为了简单,在controller控制层里就实现了数据库访问,也就是dao,service,controller放在了一起

package com.suning.sample.web;

import java.util.Map;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

/**
 * 
 *  jdbcTemplate测试类<br> 
 * 〈功能详细描述〉
 *
 * @author 13073386
 * @see [相关类/方法](可选)
 * @since [产品/模块版本] (可选)
 */
@Controller
@RequestMapping("/admin")
public class JdbcTemplateTest {

    @Autowired
    private JdbcTemplate jdbcTemplate;
    
    private static final Logger logger = Logger.getLogger(JdbcTemplateTest.class); 
    
    @RequestMapping("/jdbcTemplate.action")
    public ModelAndView test(){
        String sql = "UPDATE PMS_USER SET USER_NAME = ? WHERE USER_ID = ?";
        jdbcTemplate.update(sql,"测试A","sysadmin");
        return new ModelAndView("index");
    }
}

import org.springframework.jdbc.core.JdbcTemplate;
这个是使用JdbcTemplate会引入的包

String sql = "UPDATE PMS_USER SET USER_NAME = ? WHERE USER_ID = ?";
jdbcTemplate.update(sql,"测试A","sysadmin");

主要也就是这两句代码,实现对数据库的操作


4.实验结果

表之前的样子:



表之后的样子:



相关的console日志:

17:26:04.007 [http-bio-8080-exec-3] DEBUG o.s.jdbc.core.JdbcTemplate - Executing prepared SQL update
17:26:04.010 [http-bio-8080-exec-3] DEBUG o.s.jdbc.core.JdbcTemplate - Executing prepared SQL statement [UPDATE PMS_USER SET USER_NAME = ? WHERE USER_ID = ?]
17:26:04.051 [http-bio-8080-exec-3] DEBUG o.s.jdbc.datasource.DataSourceUtils - Fetching JDBC Connection from DataSource
17:26:10.368 [http-bio-8080-exec-3] DEBUG o.s.jdbc.core.JdbcTemplate - SQL update affected 1 rows
学会看日志是项很重要且容易忽略的能力


5:总结

心得ONE:jdbcTemplate对数据库操作进行了一些“薄”封装,可以提高开发效率,使得可以少关心例如数据库连接释放之类的操作,jdbcTemplate就是数据库访问模板


心得TWO:事物应该是针对业务service层存在的,比如说我一个接口EatApple和一个对应的EatAppleImp实现类,EatAppleImp中存在两条或多条调用DAO层的sql操作,通过事物配置建立一个事物和EatAppleImp的映射,从而把吃苹果包在一个事物中,则吃苹果中的sql相当于一个整体。一旦一个sql出错,可以实现整体sql回滚,以防止业务逻辑出现错误。具体的实现明天贴代码加以分析








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值