Spring 中的jdbc模板介绍

Spring JDBC简介

  Spring所提供的JDBC抽象框架由四个不同的包组成:

  · 核心包包含JdbcTemplate。这个类是一个基础类之一-由Spring框架的JDBC支持提供并使用。

  · 数据源包是实现单元测试数据库存取代码的重要的一部分。它的DriverManagerDataSource能够以一种类似于你已经习惯于JDBC中的用法:只要创建一个新的DriverManagerDataSource并且调用setter方法来设置DriverClassName,Url,Username和Password。

  · 对象包中包含类,用于描述RDBMS查询、更改和存储过程为线程安全的、可重用的对象。

  · 支持包-你可以从这里找到SQLException翻译功能和一些工具类。

  1) 模板设计模式

  Spring JDBC实现模板设计模式,这意味着,代码中的重复的复杂的任务部分是在模板类中实现的。这种方式简化了JDBC的使用,因为由它来处理资源的创建和释放。这有助于避免普通错误,例如忘记关闭连接等。它执行核心JDBC工作流任务,如语句创建和执行,而让应用程序代码来提供SQL并且提取结果。

  2) Spring JDBC异常处理

  Spring框架特别强调在传统型JDBC编程中所面临的与下列方案有关的问题:

  · Spring提供一个抽象异常层,把冗长并且易出错误的异常处理从应用程序代码移到由框架来实现。框架负责所有的异常处理;应用程序代码则能够专注于使用适当的SQL提取结果。

  · Spring提供了一个重要的异常类层次,以便于你的应用程序代码中可以使用恰当的SQLException子类。

  借助于一个抽象异常层,我们成功地实现了数据库独立性而不必改变异常处理。例如,如果你把你的数据库从PostgreSQL改变为Oracle,那么你不必把异常处理从OracleDataException改变到PostgresDataException。Spring能够捕获应用程序服务器特定的异常并抛出一个Spring数据异常。

  当处理异常时,Spring检查来自一个数据库连接的元数据可用性以决定数据库产品。它使用这种知识来把SQLException映射到其自己异常层次中的具体的异常上。因此,我们不需要担心专门性的SQL状态或错误代码问题;Spring的数据存取异常不是JDBC特定的,因此你的DAO不必绑定到JDBC(由于其可能抛出的异常)。

  四. Spring JDBC示例

  在下面两个列表中,我们将使用前面用传统型JDBC实现的业务逻辑为例并且展示使用Spring JDBC版本是多么容易。首先,我们从一个简单的接口开始。

 

接口:

import java.util.List;

public interface TasksDAO {
 
 
 public List getTasksNames();

 
}

接口实现类:

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Iterator;
import java.util.List;

import javax.sql.DataSource;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.support.JdbcDaoSupport;
/**
 * wangzy spring jdbcTemplate
 * @author Administrator
 *
 */

public class TasksJdbcDAO extends JdbcDaoSupport implements TasksDAO
{

 public List getTasksNames() {
  
  JdbcTemplate jt = getJdbcTemplate();//获取sping 的模板
  
  
  return jt.query("select USERNAME,PASSWORD from userinfo",new TasksRowMapper());
 }
 // 继承了sping,封装好的接口RowMapper
 class TasksRowMapper implements RowMapper {
   public Object mapRow(ResultSet rs,int index)throws SQLException {
   return rs.getString(1);}//获取列数
   }
 public static void main(String[] args)throws Exception {
  ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");//获取sping配置文件地址
  DataSource ds =(DataSource) ctx.getBean("dataSourceDBDirect");//获取数据源
  TasksJdbcDAO taskDao = new TasksJdbcDAO();

  taskDao.setDataSource(ds);
    Iterator tskIter = taskDao.getTasksNames().iterator(); //提取数据,循环遍历
  while (tskIter.hasNext()) {
    System.out.println(tskIter.next().toString());
  }

 }
 
}


appliactiong:(src下)

<bean id="dataSourceDBDirect" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
 <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
 <property name="url" value="jdbc:mysql://localhost:3306/userinfo"></property>
 <property name="username" value="root"></property>
 <property name="password" value="root"></property>

 </bean>
 数据库:mysql

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值