`

spring JdbcTemplate

阅读更多
Spring 的JDBC模板方法
Spring 通过模板方法模式,帮助程序员完成资源创建,资源管理等固定的的工作。程序员可专注于编写sql语句,处理结果集 。



JDBCTemplate 有一个DataSource 类型的成员变量为其创建所需要的连接资源 。



JdbcTemplate t = new JdbcTemplate( DataSource ) ;
t.update( …. ) ;
t.query( …. ) ;


DataSource的使用 :
Spring 提供几种选择来获得DataSource对象 :



1,通过 JNDI
         <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
              <property name="jndiName">
                          <value>java:comp/env/jdbc/myDataSource</value>
                     </property>
         </bean>

2,创建DataSource连接池(应用没有运行在AppServer中)


         <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
                     <property name="driverClassName">
                        <value></value>
                     </property>
                     <property name="url">
                        <value></value>
                     </property>
                     <property name="username">
                        <value></value>
                     </property>
                     <property name="password">
                        <value></value>
                     </property>
         </bean>








3,测试时使用的DataSource
Spring提供了一个简易的DataSource,由于在单元测试时使用 。

DriverManagerDataSource ds = new DriverManagerDataSource();
ds.setDrverClassName( xxx ) ;
ds.setUrl( url ) ;
ds.setUserName( username ) ;
ds.setPassword( password ) ;




在DAO中使用JdbcTemplate :
基本步骤 :

1)      声明dataSource

2)      声明JdbcTemplate,向JdbcTemplate中注入dataSource

3)      声明Dao对象,并向dao对象中注入JdbcTemplate,JdbcTemplate是线程安全的,所以对同一个DataSource对象,使用一个JdbcTemplate就可以了。

4)      在Dao对象中使用JdbcTemplate进行JDBC编程 。



声明DataSource 对象 。

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
                     <property name="driverClassName">
                        <value></value>
                     </property>
                     <property name="url">
                        <value></value>
                     </property>
                     <property name="username">
                        <value></value>
                     </property>
                     <property name="password">
                        <value></value>
                     </property>
         </bean>
声明JdbcTemplate,向JdbcTemplate中注入dataSource



<bean id=”jdbcTemplate” class=”org.springframework.jdbc.core.JdbcTemplate”>
       <property name=”dataSource”>
              <ref bean=”dataSource”/>
       </property>
</bean>








声明Dao对象,并向dao对象中注入JdbcTemplate,JdbcTemplate

<bean id=”dao” class=”xxxxx.StudentDao>
       <property name=”jdbcTemplate”>
              <ref bean=”jdbcTemplate”/>
       </property>
</bean>


在Dao对象中使用JdbcTemplate进行JDBC编程



public class StudentDao{
       private JdbcTemplate jdbcTemplate ;
       public void setJdbcTemplate( JdbcTemplate jdbcTemplate ){
              this.jdbcTempldate = jdbcTemplate ;
       }
       Public JdbctTemplate getJdbcTemplate(){ return jdbcTemplate ; }


       public void insert( Persion person ){
              String sql = “insert into Person(….) values ( ? , ? , ? ) ;
              Object args[] = { person.getId() , person.getName() , person.getGender() } ;
              jdbcTemplate.update( sql , args ) ;
       }
}


jdbcTempldate.update()方法还有一种重载,多一个int[] 由于指定每一个参数的数据类型,

当参数中有null的时候,这个重载会提供更好的支持 。



       String sql = “insert into …. “ ;
       Object args[] = {  ……. } ;
int types[] = { Types.INTEGER , TYPE.VARCHAR , TYPE.VARCHAR } ;
jdbcTemplate.update( sql , args , types ) ;


使用Batch提高性能
JdbcTemplate中提供了batchUpdate方法来利用Batch提高性能 。

jdbcTemplate.batchUpdate( sql , setter ) ;
该函数需要一个BatchPreparedStatementSetter 类型的一个参数,每次添加一个Batch之后,jdbcTempldate都会调用setter的setValue方法,为当前SQL设置SQL 参数。如果我们要使用Batch特性的话,需要自己实现该接口 。



BatchPreparedStatementSetter接口的声明是 :



public interface BachPreparedStatementSetter{
       int getBatchSize()
     /**
       *@index 用来指定当前是第几次调用setValues方法,或者也可以
       *       理解为是在为第几个Bath设置参数 。
       */
     void setValues( PreparedStatement pstm  , int index ) ;
}


我们自己实现的BatchPreparedStatementSetter :

Public class MyBatchPreparedStatementSetter(
       private List persons ;
       // getPersons and setPersons ;
       Public int getBatchSize(){ return person.size() ; }
       Public void setValue( PreparedStatement pstm , int idx ){
              Person p = (Person)persons.get( idx ) ;
              Pstm.setInt( 1, p.getId() ) ;
              Pstm.setString( 2 , p.getName ) ;
              ………
}
}




JdbcTemplate中使用到的回调接口 :


在JdbcTemplate工作的过程中,要使用到很多回调接口,对于这些接口,Spring都提供了相应得实现。



1,PreparedStatementCreator .

   public interface PreparedStatementCreator( Connection conn ){
     PreparedStatement createPreparedStatement( Connection conn ) throws SQLException
   }


   该接口用于创建PreparedStatement对象。JdbcTemplate 在执行sql所需要用到的statement就是通过这个接口创建的。





2, SqlProvider :

      在实现PreparedStatementCreator的同时,通常都会实现SqlProvider接口 , 该接口的getSql()方法可以向JdbcTemplate类提供SQL语句的字符串。



     

public interface SqlProvider(){
       String getSql();
}


3, PreparedStatementSetter 是PreparedStatementCreator的补充,实现这个接口的类将

  接受到一个PreparedStatement ,然后负责为他设置参数

   public interface PreparedStatementSetter{
       void setValues( PreparedStatement pstm ) throws SQLException ;
   }


   我们传递个JdbcTemplate的sql参数就是通过这个接口设置到PreparedStatement中去的。



  public class MySetter implements PreparedStatementSetter{
         private Student student = null ;
         public void setStudent( Student student ){ this.student = student ; }
         public Student getStudent(){ return this.student ; }
         public void setValues( PreparedStatement pstm ) throws ....{
                     pstm.setInt( 1 , student.getId() ) ;
                     pstm.setString( 2  student.getName() ) ;
       ......
         }
  }


数据查询.
任何查询都需要通过ResultSet获得查询结果,我没只需通过一个回调接口

来告诉Spring如何处理结果集就可以了 。



public interface RowCallBackHandler{
   void processRow( ResultSet rs ) ;
}



当我们的查询需要返回多个结果的时候, 我们可以利用Spring提供的RowMappResultReader 他负责将结果集中的数据封装到一个List中,但是在使用RowMapResultReader时我们需要提供一个RowMapper接口的实现, RowMapper接口是RowMapResultReader要使用的一个工具负责把一条记录封装到一个对象中 ,



public interface RowMapper{
    public Object mapRow( ResultSet rs  ,int idx );
}


在RowMappResultReader中会循环调用RowMapper的mapRow方法,

从而获得一个List



Public List getAllPerson(){
       String sql = “select ……..  “ ;
       Object args = null ;
       List ret = null ;
ret =JdbcTemplate.query( sql , args , new RowMappResultReader( new myRowMapper ) ) ;
return ret ;
}


public class MyRowMapper implements RowMapper{
       public Object mapRow( ResultSet rs  ,int idx ){
              Person p = new Person();
              p.setName( rs.getString(1) );
              p.setAge( rs.getInt(2) );     
              return  p ;           
       }
}


Spring中的数据访问异常体系
Spring 提供了一套分级的异常体系 。

Spring的DAO没有抛出任何与特定技术细节相关的异常。 所抛出的都是

org.springframework.dao.DataAccessException 及其子类 ,DataAccessException

是RuntimeException的子类,所以可以不被处理 , 由于这些异常通常都是不可恢复的

所以不强制我们去处理他们 。
分享到:
评论

相关推荐

    基于注解的Spring JdbcTemplate

    **基于注解的Spring JdbcTemplate** 在Java世界中,Spring框架是企业级应用开发的首选。Spring JDBC模絫提供了一种简洁的方式来处理数据库操作,而`Spring JdbcTemplate`是这个模絫的核心组件。本教程将深入探讨...

    Spring JdbcTemplate

    **Spring JdbcTemplate**是Spring框架中的一个核心组件,主要用于简化Java数据库访问。它提供了一种模板化的方式来执行SQL语句,使得开发人员可以避免编写大量的重复代码,专注于业务逻辑,而不是底层的数据库交互...

    Spring JdbcTemplate调用Oracle存储过程实现CRUD

    使用 Spring JdbcTemplate 调用 Oracle 存储过程实现 CRUD 在本文中,我们将讨论如何使用 Spring JdbcTemplate 调用 Oracle 存储过程来实现 CRUD(Create、Read、Update、Delete)操作。我们将首先编写 Oracle 存储...

    Spring JdbcTemplate 常用方法整理

    Spring的JdbcTemplate是Spring框架中用于简化数据库操作的工具类,它是基于JDBC但又抽象出了一层,避免了直接与数据库驱动API交互,从而提高了代码的可读性和可维护性。本文将深入探讨Spring JdbcTemplate的常用方法...

    Spring JDBCTemplate连接池jar包

    首先,我们要理解Spring JDBCTemplate的工作原理。它作为一个模板类,提供了执行SQL语句的方法,如`update()`, `query()`, `insert()`, `delete()`等。开发者只需要提供SQL语句和参数绑定,JDBCTemplate会自动处理...

    SpringJdbcTemplate封装工具类

    SpringJdbcTemplate是Spring框架中用于简化Java数据库访问的工具,它是Spring JDBC模块的核心。这个封装工具类的出现是为了提供一种更简洁、易于使用的接口来执行SQL操作,减轻开发者处理数据库连接、事务管理以及...

    spring-jdbcTemplate实例工程

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

    Druid数据库连接池的SpringJDBCTemplate所需的jar包

    Druid数据库连接池的SpringJDBCTemplate所需的jar包,Druid数据库连接池的SpringJDBCTemplate所需的jar包,Druid数据库连接池的SpringJDBCTemplate所需的jar包,Druid数据库连接池的SpringJDBCTemplate所需的jar包,...

    使用Spring JDBCTemplate进行增删改查curd操作

    在Spring框架中,JdbcTemplate是用于简化数据库操作的重要工具,它是Spring JDBC模块的一部分。通过使用JdbcTemplate,开发者可以避免编写大量的重复代码,如手动管理连接、处理结果集等,从而专注于业务逻辑。本文...

    模仿spring jdbcTemplate的实现

    模仿spring jdbcTemplate的粗略实现,只有很小的参考价值,如果是java初学者可以使用这个封装好的工具进行数据库操作,只需要在db.properties里配置好driver,url等信息

    Spring JdbcTemplate.batchUpdate 例子

    在Spring框架中,`JdbcTemplate`是用于简化Java数据库连接(JDBC)操作的一个核心组件。这个类提供了很多方法来执行SQL查询、更新语句,包括批处理操作。本篇文章将详细探讨`batchUpdate`方法及其在实际开发中的应用...

    strut2+spring+springjdbctemplate做的简易登录系统

    Struts2、Spring和Spring JDBC Template是Java Web开发中常用的三个框架,它们分别负责不同的职责。Struts2作为MVC(Model-View-Controller)框架,主要处理前端请求和业务逻辑;Spring则是一个全面的后端框架,提供...

    Spring JdbcTemplate查询实例

    Spring JdbcTemplate是Spring框架中用于简化数据库操作的一个重要组件,它是Spring对JDBC的轻量级封装,旨在提供一种结构良好、易于使用的SQL执行机制,同时保持了JDBC的灵活性。在本实例中,我们将深入探讨Spring ...

    Spring JdbcTemplate例子

    Spring JdbcTemplate是Spring框架中的一个核心组件,主要用来简化数据库操作。它提供了一种模板方法设计模式,将SQL语句的执行与结果处理进行了抽象,使得开发者可以更加专注于业务逻辑,而无需关心底层数据访问的...

    Spring JdbcTemplate api

    根据给定的文件信息,以下是对“Spring JdbcTemplate API”的详细知识点解析: ### Spring JdbcTemplate API:数据库操作的模板模式 #### 概述 在Spring框架中,`JdbcTemplate`是一个用于简化JDBC编程的工具类,...

    spring jdbcTemplate

    《Spring JdbcTemplate 深入解析与实战应用》 在Java世界中,Spring框架以其强大的功能和灵活性,深受广大开发者的喜爱。其中,Spring JDBC Template是Spring提供的一个用于简化数据库操作的工具,它抽象了JDBC API...

    spring jdbcTemplate 注入到servlet

    在Java Web开发中,Spring框架提供了丰富的工具来简化数据库操作,其中之一就是`Spring JdbcTemplate`。`JdbcTemplate`是Spring对JDBC(Java Database Connectivity)的一层轻量级封装,它使得开发者能够更加方便地...

    SSH笔记-Spring JdbcTemplate

    SSH笔记-Spring JdbcTemplate是关于如何在Spring框架中利用JdbcTemplate进行数据库操作的教程。Spring是一个广泛应用的Java企业级应用框架,它提供了多种数据访问工具,而JdbcTemplate就是其中之一,用于简化JDBC...

    Spring jdbcTemplate pom.xml

    1.Spring4前 spring-jdbc包是独立的,4以后spring-jdbc 就已经没有了

Global site tag (gtag.js) - Google Analytics