JdbcTemplate 、NamedParameterJdbcTemplate、SimpleJdbcTemplate

JdbcTemplate 、NamedParameterJdbcTemplate、SimpleJdbcTemplate的区别

一、JdbcTemplate 首先在配置文件中设置数据源 c.driver.OracleDriver">然后用我在另一篇博客中提到的配置JdbcTemplate的集中方式,任选一种进行JdbcTemplate的配置,下面我选其中的一种 方式配置如下信息: 为了能够使用该模板,需要将该类型作为DAO实现类的属性,定义如下形式:

public class UserDAOImpl implements UserDAO{

    private JdbcTemplate jdbcTemplate

    public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {

       this.jdbcTemplate = jdbcTemplate;

    }

}

该DAO实现类配置如下:做好如上配置后,就可以在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> 从定义中可看出,与不使用支持类是有相同的定义方式。但是如果我们的DAO实现类继承了JdbcDaoSupport 父类。则其配 置可以省略掉jdbcTemplate内容的定义,直接做如下配置: 省略的jdbcTemplate定义和声明过程!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值