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