`
lgzbj2006
  • 浏览: 27666 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论
阅读更多
作者:niumd,转载请注明出处,谢谢  
发表时间:2010 年 03 月 17 日 
原文链接:http://ari.iteye.com/admin/blogs/618449

一、Spring JDBC 概述
     Spring 提供了一个强有力的模板类JdbcTemplate简化JDBC操作,DataSource,JdbcTemplate都可以以Bean的方式定义在想xml配置文件,JdbcTemplate创建只需注入一个DataSource,应用程序Dao层只需要继承JdbcDaoSupport, 或者注入JdbcTemplate,便可以获取JdbcTemplate,JdbcTemplate是一个线程安全的类,多个Dao可以注入一个JdbcTemplate;


<!--         Oracle数据源           -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@oracle.devcake.co.uk:1521:INTL"/>
<property name="username" value="sa"/>
<property name="password" value=""/>
</bean>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"/>
</bean>
<!--  set注入方式获取jdbcTemplate -->
<bean id="customerDao" class="JdbcCustomerDao" >
<property name="jdbcTemplate" ref="jdbcTemplate"/>
</bean>
<!-- 注入dataSource,customerDao通过继承JdbcDaoSupport ,使用this.getJdbcTemplate()获取JdbcTemplate   -->
<bean id="customerDao" class="JdbcCustomerDao" >
<property name="dataSource" ref="dataSource"/>
</bean>

然后将jdbcTemplate对象注入自定义的Dao、或者继承JdbcDaoSupport,例如:
public class JdbcCustomerDao extends JdbcDaoSupport implements CustomerDao {
}
public class JdbcCustomerDao implements CustomerDao {
private JdbcTemplate jdbcTemplate
public void setJdbcTemplate()JdbcTemplate jdbcTemplate{
this.jdbcTemplate=jdbcTemplate
}
}

二、 JdbcTemplate 提供以下主要方法简化JDBC操作:
2.1、List query(String sql,Ojbect[] args,RowMapper rowMapper)
     说明:常用的查询,sql待执行的sql语句,args是sql语句的参数,rowMapper负责将每一行记录转化为java对象存放在list,并最终返回,例如:
public List<Book> queryByAuthor(String author) {
String sql = "select * from book where author=?";
Collection c = getJdoTemplate().find(sql,
new Object[] { author },new BookRowMapper());
List<Book> books = new ArrayList<Book>();
books.addAll(c);
return books;
}
class BookRowMapper implements RowMapper{
public Object mapRow(ResultSet res, int index) throws SQLException {
Book book = new Book();
book.setId(rs.getInt("id"));
//省略set
return book;
}
}

   更新、删除、其他查询操作类似,举例如下,详细细节请参考spring api:

//返回值为一个长整形
public long getAverageAge() {
return getJdbcTemplate().queryForLong("SELECT AVG(age) FROM employee");
}
//返回一个整数
public int getTotalNumberOfEmployees() {
return getJdbcTemplate().queryForInt("SELECT COUNT(0) FROM employees");
}
//更新操作
this.jdbcTemplate.update(
"insert into t_actor (first_name, surname) values (?, ?)",
new Object[] {"Leonor", "Watling"});


2.2、spring 2.5新功能,另类的jdbc ORM:BeanPropertyRowMapper

      上面我们检索时必须实现RowMapper,将结果集转化为java对象。Spring2.5 简化了这一操作,使得我们不必再实现RowMapper,实现此功能的俩个神奇东东便是:ParameterizedRowMapper,ParameterizedBeanPropertyRowMapper,貌似通过java反射机制实现了将resultset字段映射到java对象,但是数据表的列必须和java对象的属性对应,没有研究源码,有点类似于apache 的BeanUtil,不知为何这部分在spring开发参考手册没有,难道不是经典。


//使用ParameterizedBeanPropertyRowMapper
@SuppressWarnings({"unchecked"})
public List<Customer> getAll() {
return getJdbcTemplate().query("select * from t_customer", ParameterizedBeanPropertyRowMapper.newInstance(Customer.class));
}
//使用BeanPropertyRowMapper
@SuppressWarnings({"unchecked"})
public List<Customer> getAll() {
return getJdbcTemplate().query("select * from t_customer", new BeanPropertyRowMapper(Customer.class));
}


注意:ParameterizedBeanPropertyRowMapper是BeanPropertyRowMapper子类。另外表的字段名称必须和实体类的成员变量名称一致;

2.3、spring之JDBC批量操作
      jdbcTemplate.batchUpdate(final String[] sql) ,API解释:Issue multiple SQL updates on a single JDBC Statement using batching,翻译过来大致为:解决多个sql的插入、更新、删除操作在一个Statement中。性能一般。
   jdbcTemplate.batchUpdate(String sql, final BatchPreparedStatementSetter pss),类似于JDBC的PreparedStatement,性能较上着有所提高。
   我们举例说明如何使用,示例如下:
final int count = 2000;
final List<String> firstNames = new ArrayList<String>(count);
final List<String> lastNames = new ArrayList<String>(count);
for (int i = 0; i < count; i++) {
firstNames.add("First Name " + i);
lastNames.add("Last Name " + i);
}
jdbcTemplate.batchUpdate(
"insert into customer (id, first_name, last_name, last_login, comments) values (?, ?, ?, ?, ?)",
new BatchPreparedStatementSetter() {
//为prepared statement设置参数。这个方法将在整个过程中被调用的次数
public void setValues(PreparedStatement ps, int i) throws SQLException {
ps.setLong(1, i + 10);
ps.setString(2, firstNames.get(i));
ps.setString(3, lastNames.get(i));
ps.setNull(4, Types.TIMESTAMP);
ps.setNull(5, Types.CLOB);
}
//返回更新的结果集条数
public int getBatchSize() {
return count;
}
});
}


  BatchSqlUpdate类是SqlUpdate 的子类,适用于插入、删除、更新批量操作,内部使用PreparedStatement,所以效率很高,批量语句达到设定的batchSize,或者手动调用flush才会执行批量操作。注意:此类是非线程安全的,必须为每个使用者创建一个实例,或者在同一个线程中使用前调用reset。
   下面我们举例说明如何使用BatchSqlUpdate,来执行批量操作。示例如下:
class BatchInsert extends BatchSqlUpdate {
private static final String SQL = "insert into t_customer (id, first_name, last_name, last_login, "
+ "comments) values (?, ?, ?, ?, null)";
BatchInsert(DataSource dataSource) {
super(dataSource, SQL);
declareParameter(new SqlParameter(Types.INTEGER));
declareParameter(new SqlParameter(Types.VARCHAR));
declareParameter(new SqlParameter(Types.VARCHAR));
declareParameter(new SqlParameter(Types.TIMESTAMP));
setBatchSize(10);
}
}

int count = 5000;
for (int i = 0; i < count; i++) {
batchInsert.update(new Object[] { i + 100L, "a" + i, "b" + i, null });
}

至此,spring JDBC主要的应用基本上都简单罗列一番,所有代码均为文章举例,不是很严谨,仅为演示每一种用法,抛砖引玉,希望有独特见解的拍砖,有问题的请指明问题所在,谢谢
分享到:
评论

相关推荐

    Spring JdbcTemplate整合使用方法及原理详解

    Spring JdbcTemplate 整合使用方法及原理详解 Spring JdbcTemplate 是 Spring 框架中的一部分,提供了一个简单的方式来与数据库进行交互。它可以帮助开发者快速地执行数据库操作,无需关心底层的 JDBC 详细实现。...

    spring-jdbcTemplate实例工程

    《深入解析Spring JdbcTemplate》 Spring JDBC Template是Spring框架中用于简化JDBC操作的一个核心组件,它是Spring对JDBC API的封装,旨在提供一个更加简洁、健壮且可测试的数据库访问层。在这个实例工程中,我们...

    SSH笔记-Spring JdbcTemplate

    4. **事务管理**:Spring的JdbcTemplate也整合了事务管理功能,通过`JdbcTemplate.execute()`方法的回调函数,可以在一个操作中包裹多个数据库操作,确保原子性和一致性。如果发生异常,事务会自动回滚,否则在所有...

    Maven整合Spring+SpringMVC+Hibernate+SpringDataJPA+JdbcTemplate

    在"Maven整合Spring+SpringMVC+Hibernate+SpringDataJPA+JdbcTemplate"的DEMO中,开发者通常会创建一个Maven工程,配置相关依赖,然后分别设置Spring的配置文件(如`applicationContext.xml`)、SpringMVC的配置文件...

    Spring笔记之整合JdbcTemplate.doc

    ### Spring与JdbcTemplate整合详解 #### 一、JdbcTemplate简介及使用 **1.1 JdbcTemplate概述** JdbcTemplate是Spring框架中的一个重要组成部分,它提供了一种简单而强大的方式来访问数据库,通过封装JDBC API,...

    spring-springMvc-jdbctemplate.rar

    在本项目中,"spring-springMvc-jdbctemplate.rar" 是一个包含了使用Spring框架、Spring MVC和JdbcTemplate实现的Web应用示例。这个压缩包可能包含了一系列的配置文件、源代码和数据库脚本,旨在展示如何整合这些...

    struts2.3.4+spring3.1.1+jdbctemplate

    Struts2.3.4+Spring3.1.1+JdbcTemplate 整合示例 在Web开发领域,Struts2、Spring和JDBC Template是常见的技术栈,它们各自承担着不同的职责。Struts2是一个强大的MVC框架,用于处理用户请求并控制应用流程;Spring...

    Spring使用Druid整合JdbcTemplate与FreeMarker实例 下载

    使用Spring JdbcTemplate+Druid数据源+FreeMarker 开发的代码生成器。 您可以根据自己的实际,修改一下FreeMarker的模版文件,直接按目录生成Java代码。 生成了就能用,节省大量重复工作的时间。 您也可以用来学习...

    springmvc JdbcTemplate demo

    在“WebJdbc”这个文件夹中,可能包含了一些示例代码或配置文件,用于演示SpringMVC和JdbcTemplate的整合。通过这些文件,初学者可以更好地理解这两个组件如何协同工作,以及如何在实际项目中进行数据库操作。学习这...

    spring mvc注解jdbctemplate

    本文将深入探讨如何在Spring MVC中通过注解的方式整合JdbcTemplate。 首先,要使用JdbcTemplate,我们需要在Spring配置文件中声明一个JdbcTemplate bean。以下是一个简单的配置示例: ```xml &lt;bean id="...

    SpringMVC整合jdbcTemplate实例

    2. **jdbcTemplate**:jdbcTemplate是Spring框架中的一个核心组件,用于简化数据库操作。它提供了一组模板方法,使得开发者能够以一种声明式的方式执行SQL查询、更新和事务管理,减少了对JDBC代码的编写。 3. **...

    Spring + Hibernate + JdbcTemplate

    **Spring + JdbcTemplate整合**: 虽然Hibernate提供了强大的ORM功能,但在某些场景下,比如简单的数据操作或者与已有的非ORM库集成时,JdbcTemplate可能更为合适。Spring可以方便地与JdbcTemplate集成,通过@...

    Spring mvc、 Spring、 Spring jdbc 整合 demo

    本示例"Spring mvc、Spring、Spring jdbc 整合 demo"着重展示了Spring框架的三大关键模块:Spring MVC(模型-视图-控制器)、Spring Core以及Spring JDBC的集成与应用。 1. **Spring MVC** Spring MVC是Spring框架...

    Spring--JdbcTemplate.pdf

    JdbcTemplate是Spring中常用的持久层技术之一,它支持Spring的声明式事务管理,能够与Spring的其他框架组件无缝整合。 描述中提到的"一图详解(脑图)"意味着文档中可能包含了一个清晰的图示,这个图示将详细展示...

    Spring+hibernate整合源代码

    Spring 可以通过工厂方法或 JdbcTemplate、HibernateTemplate 提供的模板方法来获取 Session。 6. **Service 层设计**:Service 层是业务逻辑的核心,通常会注入 DAO 实例并调用其方法来完成业务处理。Service 层...

    Spring mvc + Spring + Spring jdbc 整合 demo

    在本项目中,我们主要探讨的是如何将Spring MVC、Spring框架和Spring JDBC这三大核心组件进行整合,构建一个完整的Java Web应用程序。这个整合Demo旨在帮助开发者理解这些技术的协同工作方式,以及如何在实际开发中...

    spring框架 jdbcTemplate

    2. **Spring MVC与JdbcTemplate的整合**: 在Spring MVC中,JdbcTemplate通常作为一个bean配置在Spring的ApplicationContext中,然后在需要操作数据库的服务层类中注入这个bean。这样可以将数据库操作与业务逻辑...

    spring内置jdbctemplate使用demo

    以上就是 Spring 中 `JdbcTemplate` 与 c3p0 整合的基本流程。通过这种方式,我们可以轻松地实现数据库操作,同时享受 Spring 提供的事务管理和错误处理机制。在实际开发中,还可以根据需求进一步配置连接池参数,...

    Spring与JDBC整合

    本文将深入探讨如何将Spring框架与JDBC进行整合,以便更高效、更简洁地处理数据库操作。 首先,我们来看Spring中的JDBC支持。Spring提供了JdbcTemplate和NamedParameterJdbcTemplate两个核心类,它们是对JDBC的抽象...

    Spring+SpringMVC+JDBCTemplate简单用户管理功能

    在本项目中,我们主要探讨的是如何利用Spring框架、SpringMVC和JDBCTemplate来构建一个简单的用户管理系统。这是一个基础级别的应用,旨在展示这些技术的整合与基本操作,而不是追求高级的用户界面设计。接下来,...

Global site tag (gtag.js) - Google Analytics