JdbcTemplate 的实现方式

 下面通过实例来了解 JdbcTemplate是如何使用的。

实现思路是:首先编写配置文档,然后通过在程序中使用 JdbcTemplate

并和事务处理结合在一起,具体编写步骤如下:

1Spring配置文档的示例代码如下:

 

<?xml version="1.0" encoding="UTF-8"?>  

<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"

 "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>

       <!—设定dataSource -->

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">

               <!—使用sqlserver数据库 --> 

  <property name="driverClassName">

           <value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value> 

       </property>

     <!—设定Url -->

       <property name="url">

           <value>jdbc:microsoft:sqlserver://localhost:1433/stdb</value> 

       </property>

               <!—设定用户名-->

       <property name="name">

                       <value>admin</value>  

       </property>

     <!—设定密码-->

       <property name="msg">

                       <value>admin</value>  

       </property>

</bean>

<!—设定transactionManager -->

 

   <bean id="transactionManager"

                                       class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

       <property name="dataSource">

           <ref bean="dataSource"/>

       </property>    

   </bean>

     <!—示例中的一个DAO -->                                                                                                                                                          

   <bean id="helloDAO" class="com.gc.action.HelloDAO">

       <property name="dataSource">

           <ref bean="dataSource"/>

       </property>

       <property name="transactionManager">

           <ref bean="transactionManager"/>

       </property>

   </bean>

</beans>

2)在类 HelloDAO 中使用 JdbcTemplate,并和事务处理结合在一起,HelloDAO.java的示

例代码如下:

 

//******* HelloDAO.java**************

package com.gc.action; 

 

import javax.sql.DataSource; 

import org.springframework.jdbc.core.*; 

import org.springframework.transaction.*; 

import org.springframework.transaction.support.*; 

import org.springframework.dao.*; 

 

public class HelloDAO { 

   private DataSource dataSource; 

   private PlatformTransactionManager transactionManager; 

 

   public void setDataSource(DataSource dataSource) { 

       this.dataSource = dataSource; 

       }  

 

   public void setTransactionManager(PlatformTransactionManager transactionManager) { 

       this.transactionManager = transactionManager; 

       }  

//使用JdbcTemplate

   public int create(String msg) { 

       DefaultTransactionDefinition def = new DefaultTransactionDefinition(); 

TransactionStatus status = transactionManager.getTransaction(def); 

                try {  

           JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource); 

           jdbcTemplate.update("INSERT INTO hello VALUES(1, 'gf', 'HelloWord')"); 

       } catch (DataAccessException ex) { 

     //  也可以執行status.setRollbackOnly();

           transactionManager.rollback(status); 

                       throw ex;  

               } final y {

           transactionManager.commit(status);

     }

       }  

}

 

代码说明:

首先把配置文档中定义的 dataSource,通过 JdbcTemplate 的构造方法进行注入,然

后直接执行 JdbcTemplate update()方法即可实现对数据库的操作,是不是比传

统的 Jdbc方式简单多了,只用了 2行代码就实现了执行数据库的操作。

3)开发人员还可以把配置文档中定义的 dataSource,通过 JdbcTemplate的构造方法进行

注入也省掉,直接把 JdbcTemplate在配置文档中配置,并使 JdbcTemplate依赖于 dataSource

配置文档的示例代码如下:

 

<?xml version="1.0" encoding="UTF-8"?>  

 

<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"

 "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>

       <!—设定dataSource -->

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">

             <!—使用sqlserver数据库 --> 

  <property name="driverClassName">

           <value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value> 

       </property>

     <!—设定Url -->

       <property name="url">

           <value>jdbc:microsoft:sqlserver://localhost:1433/stdb</value> 

       </property>

               <!—设定用户名-->

       <property name="name">

                       <value>admin</value>  

       </property>

     <!—设定密码-->

       <property name="msg">

                       <value>admin</value>  

       </property>

</bean>

<!—设定transactionManager -->


 

   <bean id="transactionManager"

                                      class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

       <property name="dataSource">

           <ref bean="dataSource"/>

       </property>    

</bean>

<!—设定jdbcTemplate -->

<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">

       <property name="dataSource">

           <ref bean="dataSource"/>

       </property>

</bean>

     <!—示例中的一个DAO -->                                                                                                                                                          

   <bean id="helloDAO" class="com.gc.action.HelloDAO">

       <property name=" jdbcTemplate ">

           <ref bean=" jdbcTemplate "/>

       </property>

       <property name="transactionManager">

           <ref bean="transactionManager"/>

       </property>

   </bean>

</beans>

 

代码说明:

这里把 jdbcTemplate通过配置文档定义,把 dataSource注入到 jdbcTemplate中。

jdbcTemplate通过配置注入到 HelloDAO中。

4)在类HelloDAO  中使用 JdbcTemplate ,但是不用编写代码把                 dataSource     注入到

jdbcTemplate中,并和事务处理结合在一起,HelloDAO.java的示例代码如下:

 

//******* HelloDAO.java**************


 package com.gc.action; 

 

import javax.sql.DataSource; 

import org.springframework.jdbc.core.*; 

import org.springframework.transaction.*; 

import org.springframework.transaction.support.*; 

import org.springframework.dao.*; 

import org.springframework.jdbc.core.JdbcTemplate;

 

public class HelloDAO { 

   private JdbcTemplate jdbcTemplate;

   private PlatformTransactionManager transactionManager; 

 

   public void setJdbcTemplate(JdbcTemplate jdbcTemplate) { 

       this.jdbcTemplate = jdbcTemplate; 

       }

 

   public void setTransactionManager(PlatformTransactionManager transactionManager) { 

       this.transactionManager = transactionManager; 

       }  

//这里把jdbcTemplate通过依赖注入来实现

   public int create(String msg) { 

       DefaultTransactionDefinition def = new DefaultTransactionDefinition(); 

TransactionStatus status = transactionManager.getTransaction(def); 

                try {  

           jdbcTemplate.update("INSERT INTO hello VALUES(1, 'gf', 'HelloWord')"); 

       } catch (DataAccessException ex) { 

     //  也可以執行status.setRollbackOnly();

           transactionManager.rollback(status); 

                       throw ex;  

               } final y {

           transactionManager.commit(status);

     }

       }  

}

 

这里只有 1行代码就实现了对数据库的操作,由此可以看出 Spring IoC功能的强大,通过依赖注入,大大简化了开发人员的编码工作量,而且在         Spring   的配置文档中配置也是非常容

易的。

5)开发人员甚至还可以 sql 语句也通过配置文档来进行配置,这样当需要更改 sql语句时,就不需要改变代码了,而只需要修改配置文档。通过配置文档进行 sql 语句注入的示例代码如下:

 

<?xml version="1.0" encoding="UTF-8"?>  

<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"

 "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>

       <!—设定dataSource -->

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">

             <!—使用sqlserver数据库 --> 

  <property name="driverClassName">

           <value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value> 

 

        </property>

     <!—设定Url -->

       <property name="url">

           <value>jdbc:microsoft:sqlserver://localhost:1433/stdb</value> 

       </property>

               <!—设定用户名-->

       <property name="name">

                       <value>admin</value>  

       </property>

     <!—设定密码-->

       <property name="msg">

                       <value>admin</value>  

       </property>

</bean>

<!—设定transactionManager -->


 

   <bean id="transactionManager"

                                      class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

       <property name="dataSource">

           <ref bean="dataSource"/>

       </property>    

</bean>

<!—设定jdbcTemplate -->

<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">

       <property name="dataSource">

           <ref bean="dataSource"/>

       </property>

</bean>                                                                                                                                            

   <bean id="helloDAO" class="com.gc.action.HelloDAO">

       <property name=" jdbcTemplate ">

           <ref bean=" jdbcTemplate "/>

       </property>

       <property name="transactionManager">

           <ref bean="transactionManager"/>

       </property>

   <property name="sql">

           <value> INSERT INTO hello VALUES(1, 'gf', 'HelloWord')</value>

       </property>

   </bean>

</beans>

 

代码说明:

sql语句通过 IoC注入到 HelloDAO中。

6HelloDAO.java的示例代码如下:

 

//******* HelloDAO.java**************

package com.gc.action; 

 

import javax.sql.DataSource; 

import org.springframework.jdbc.core.*; 

import org.springframework.transaction.*; 

import org.springframework.transaction.support.*; 

import org.springframework.dao.*; 

 

import org.springframework.jdbc.core.JdbcTemplate;

 

public class HelloDAO { 

   private JdbcTemplate jdbcTemplate;

private PlatformTransactionManager transactionManager; 

private String sql;

 

   public void setJdbcTemplate(JdbcTemplate jdbcTemplate) { 

       this.jdbcTemplate = jdbcTemplate; 

       }

 

   public void setTransactionManager(PlatformTransactionManager transactionManager) { 

       this.transactionManager = transactionManager; 

 

public void setSql(String sql) { 

               this.sql = sql;  

 }

//sql语句也通过依赖注入的方式来实现

   public int create(String msg) { 

       DefaultTransactionDefinition def = new DefaultTransactionDefinition(); 

TransactionStatus status = transactionManager.getTransaction(def); 

                try {  

           jdbcTemplate.update(this.sql); 

       } catch (DataAccessException ex) { 

           transactionManager.rollback(status); //  也可以執行status.setRollbackOnly(); 

                       throw ex;  

               } final y {

           transactionManager.commit(status);

     }

       }  

}

 

上述 3种方式都实现了同样的功能,当业务逻辑调用类 HelloDAO中的 create()方法时,都会向数据库增加一笔数据,而且代码量逐渐的减少,因为在          Spring   的配置文档中都通过

依赖注入来进行设值。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值