一、JdbcTemplate
首先在配置文件中设置数据源
    <bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource"
destroy-method="close">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"></property>
<property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl"></property>
<property name="username" value="scott"></property>
<property name="password" value="123"></property>
</bean>
然后用我在另一篇博客中提到的配置JdbcTemplate的集中方式,任选一种进行JdbcTemplate的配置,下面我选其中的一种方式
配置如下信息:
    <bean id=”jdbcTemplate” class=”org.springframework.jdbc.core.JdbcTemplate”>
<property name=”dataSource” ref=”dataSource” />
</bean>
为了能够使用该模板,需要将该类型作为DAO实现类的属性,定义如下形式:
    public class UserDAOImpl implements UserDAO{
private JdbcTemplate jdbcTemplate
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
}
该DAO实现类配置如下:
<bean id="userDAO" class="com.spring.jdbcDAOImpl.UserDAOImpl">
<property name="jdbcTemplate" ref="jdbcTemplate"></property>
</bean>
做好如上配置后,就可以在DAO实现类中使用模板

二、NamedParameterJdbcTemplate使用
与JdbcTemplate唯一不同的地方是,在给问号赋值的时候,是按照名字对应的。
对NamedParameterJdbcTemplate的配置与上述JdbcTemplate的配置类似 最大的变化在于,sql语句中不使用?来最为参数替代符。而是使用:加变量名的方式作为参数替代符。
然后在通过Map将变量名与实际值绑定起来,传递给update方法。使用这种方式最大的好处就是,如果参数比较多,并且参数位 置或顺序可能变化的情况下,
使用NamedParameterJdbcTemplate是非常方便的! 下面是我从网上找的例子:
  private static final String MOTORIST_INSERT =
”insert into motorist (id, email, password, ” +
“firstName, lastName) values
(null, :email, :password, :firstName, :lastName)”; public void saveMotorist(Motorist motorist) {   Map parameters = new HashMap();
   parameters.put(”email”, motorist.getEmail());
  parameters.put(”password”, motorist.getPassword());
   parameters.put(”firstName”, motorist.getFirstName());
  parameters.put(”lastName”, motorist.getLastName());
   jdbcTemplate.update(MOTORIST_INSERT, parameters);
}
三、SimpleJdbcTemplate使用
SimpleJdbcTemplate加入了Java5的特性支持,例如可变参数、自动拆包封包、泛型等支持。
下面是用SimpleJdbcTemplate实现的findUserByIdSimple(int id)
public User findUserByIdSimple(int id) {
String sql="select id,user_name,password from td where id=?";
ParameterizedRowMapper mapper=new ParameterizedRowMapper(){
@Override
public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
User u=new User();
u.setId(rs.getInt("id"));
u.setPassword(rs.getString("password"));
u.setUser_name(rs.getString("user_name"));
return u;
}
};
     //这里的第三个参数   arguments to bind to the query
return this.simpleJdbcTemplate.queryForObject(sql,mapper, id);
}
 
这里的ParameterizedRowMapper和RowMapper的最大区别是ParameterizedRowMapper支持泛型
这里的query的方法使用与JdbcTemplate中的query方法使用是有区别的。 第一:JdbcTemplate中的query方法使用Object数组来传递参数,而SimpleJdbcTemplate中的query方法使用的是可变参数,
因为是可变参数,所以需要将可变参数放在参数列表的最后部分。 第二:使用了自动封包机制传递id数据。 第三:进行结果集与对象映射时,使用了ParameterizedRowMapper类型而不是RowMapper类型,其主要区别就是Parameteri -zedRowMapper类型支持泛型。 同样是调用update方法,但是该update方法使用了可变参数,这样就不需要Object数组来进行数据封装,
所有需要赋值问号的参数将直接作为update参数传递。同样是按照index顺序的! 四、使用Spring中的JDBC支持类
这一类型我还没有动手实现,下面是别人写的
通过以上的实现,可以使用各种不同的JDBC模板类进行JDBC访问,但是,如果有很多DAO实现类的定义,我们需要定义很多 重复的代码部分,
如,我们需要在DAO实现类中定义 JdbcTemplate属性,并且定义其get、set方法。另外,需要将其声明在配置文件中。等 等。这些部分是重复的。 spring提供了一种简化的实现方式,它定义了JdbcDaoSupport父类(针对于JdbcTemplate方式的实现),在该类中完成了 重复的代码,我们定义的DAO实现类只需要继承它既可,关系如下图:
通过这种实现,DAO实现类的定义可以简化如下:
public class JdbcRantDao extends JdbcDaoSupport implements RantDao {  

        public void saveMotorist(Motorist motorist) {  

        getJdbcTemplate().update(MOTORIST_INSERT,  

        new Object[] { motorist.getEmail(), motorist.getPassword(),  

        motorist.getFirstName(), motorist.getLastName() });  

   }  
中间没有任何JdbcTemplate属性的相关定义。而通过调用getJdbcTemplate()方法获得JdbcTemplate属性。
另外,在配置文件中需要定义如下内容:
 <bean id=”rantDao” class=”com.roadrantz.dao.jdbc.JdbcRantDao”>
<property name=”jdbcTemplate” ref=”jdbcTemplate” />
</bean>
从定义中可看出,与不使用支持类是有相同的定义方式。但是如果我们的DAO实现类继承了JdbcDaoSupport 父类。则其配置可以省略掉jdbcTemplate内容的定义,直接做如下配置:
 <bean id=”rantDao” class=”com.roadrantz.dao.jdbc.JdbcRantDao”>
<property name=”dataSource” ref=”dataSource” />
</bean>
省略的jdbcTemplate定义和声明过程!

在上面的介绍中,Spring提供了三种不同的模板类,如果我们想使用NamedParameterJdbcTemplate或SimpleJdbcTemplate,则需要继承不同的模板支持类型,分别是:
NamedParameterJdbcDaoSupport与SimpleJdbcDaoSupport

JdbcTemplate 、NamedParameterJdbcTemplate、SimpleJdbcTemplate的区别的更多相关文章

  1. Spring提供JdbcTemplate&NamedParameterJdbcTemplate

    JdbcTemplate主要提供以下五类方法: execute方法:可以用于执行任何SQL语句,一般用于执行DDL语句: update方法及batchUpdate方法:update方法用于执行新增.修 ...

  2. Spring jdbcTemplate RowMapper绑定任意对象

    RowMapper可以将数据中的每一行封装成用户定义的类,在数据库查询中,如果返回的类型是用户自定义的类型则需要包装,如果是Java自定义的类型,如:String则不需要,Spring最新的类Simp ...

  3. 使用Spring配置数据源JdbcTemplate

    c3p0作为演示 1.编写资源文件(db.properties) jdbc.user=root jdbc.password=root jdbc.jdbcUrl=jdbc:mysql://localho ...

  4. [原创]java WEB学习笔记109:Spring学习---spring对JDBC的支持:使用 JdbcTemplate 查询数据库,简化 JDBC 模板查询,在 JDBC 模板中使用具名参数两种实现

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  5. Spring SimpleJdbcTemplate Querying examples

    Here are few examples to show how to use SimpleJdbcTemplate query() methods to query or extract data ...

  6. Spring SimpleJdbcTemplate查询示例

    这里有几个例子来说明如何使用SimpleJdbcTemplate query()方法来查询或从数据库中提取数据.在 JdbcTemplate query() 方法,需要手动转换返回的结果转换为一个目标 ...

  7. spring思想分析

    摘要: EveryBody in the world should learn how to program a computer...because it teaches you how to th ...

  8. Spring Boot学习随记

    由于早年在管理领域耕耘了一段时间,完美错过了Spring的活跃期, 多少对这个经典的技术带有一种遗憾的心态在里面的, 从下面的我的生涯手绘图中大概可以看出来我的经历. 最近由于新介入到了工业数字化领域 ...

  9. 一个spring jdbc实例

    一.使用示例 (1)springJdbcContext.xml <?xml version="1.0" encoding="UTF-8"?> < ...

随机推荐

  1. Map排序——按key排序,按value排序

    注:转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/5959279.html 上一篇博文谈到了集合类的自定义排序方式,那么进一步扩展开来,与集合同等重要的Map有 ...

  2. ASP.NET读取配置文件发送邮件

    之前写过一篇文章C#使用SMTP发送邮件 后来做了改进,改成读取独立的配置文件,本文只记录读取配置文件的部分,发送部分见上面的链接. 读取配置文件C#代码: using System; using S ...

  3. MVVM解决方案的一般结构

    解决方案的结构一般是三个解决方案文件夹,分别是: Models ViewModels Views 当然需要的话可以扩充,如Services.UnitTest等等. 然后每个解决方案文件夹里面包含各自的 ...

  4. 从零开始学C++之虚函数与多态(一):虚函数表指针、虚析构函数、object slicing与虚函数

    一.多态 多态性是面向对象程序设计的重要特征之一. 多态性是指发出同样的消息被不同类型的对象接收时有可能导致完全不同的行为. 多态的实现: 函数重载 运算符重载 模板 虚函数 (1).静态绑定与动态绑 ...

  5. 双网卡绑定-bond0

    网卡绑定就是多张网卡逻辑上作为一张网卡用.可分为,负载均衡绑定和冗余绑定两种. 1.编辑虚拟网络接口配置文件 [root@test~]# more /etc/sysconfig/network-scr ...

  6. 【M17】考虑使用缓式评估

    1.缓式评估其实就是拖延战术,直到逼不得已的时候才去计算.缓式评估的使用场景有: 2.引用计数,考虑String,String是一个内含char指针(char指针以'\0'结束)的资源管理类,正常情况 ...

  7. org.apache.catalina.mbeans.ServerLifecycleListener

    Tomcat 启动报错: java.lang.ClassNotFoundException: org.apache.catalina.mbeans.ServerLifecycleListener at ...

  8. SQL注入原理解说,非常不错!

    原文地址:http://www.cnblogs.com/rush/archive/2011/12/31/2309203.html 1.1.1 摘要 日前,国内最大的程序猿社区CSDN站点的用户数据库被 ...

  9. Codeforces #250 (Div. 2) C.The Child and Toy

    之前一直想着建图...遍历 可是推例子都不正确 后来看数据好像看出了点规律 就抱着试一试的心态水了一下 就....过了..... 后来想想我的思路还是对的 先抽象当前仅仅有两个点相连 想要拆分耗费最小 ...

  10. Memcached概述

    Memcached Memcached是一套分布式的内存对象缓存系统,使用C语言编写,作为数据库的前端cache,缓存数据库查询结果能够减轻数据库负载. 类似一张巨大的hash表,缓存的对象以key- ...