2014/3/12 spring jdbcTemplate和事物

来源:互联网 发布:sql储存过程如何使用 编辑:程序博客网 时间:2024/06/07 22:27

关于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 update17: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 DataSource17: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回滚,以防止业务逻辑出现错误。具体的实现明天贴代码加以分析








0 0
原创粉丝点击