Spring 之jdbc模板(JdbcTemplate与NamedParameterJdbcTemplate)

传统的jdbc访问数据库显得太繁琐,开发者开发了许多的框架与模板,让对数据库的增删改查变得尤为简单与标准化,在这里介绍的是spring出品的jdbc模板,亮点在:开发者不需要去书写建立连接和关闭资源等和核心业务(驱动选择和sql语句)耦合的代码块了,让开发者的注意点重新回到sql语句的设计和执行上。这便是封装的目的,让代码复用,让程序看起来很简洁。

本案例还是结合book数据库,关于book数据表的增删改查。使用到前面学到的IOC思想,如果不懂,请先返回到关于IOC的学习页面。

1.何为JdbcTemplate

JdbcTemplate是jdbc模板中我们用到的一个类,所有关于数据库的操作都可以由这个类中的方法完成,当然,你得给它正确的参数。

2.如何创建一个JdbcTemplate

直接new,或者交给spring管理,不管是二者中的哪一种,如果实际能用,需要注入一个正确的成员变量DataSource。

2.1何为DataSource

DataSource又叫数据源,实例对象包括连接的数据库的url、驱动的权限命名、用户名和密码。如在xml配置如下:

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
 <property name="driverClassName" value="${jdbc.driverClassName}"></property>
 <property name="url" value="${jdbc.url}"></property>
 <property name="username" value="${jdbc.username}"></property>
 <property name="password" value="${jdbc.password}"></property>
</bean>

${jdbc.url}引用了属性文件中的属性值,属性文件在源代码中可以找到,就不列举了。

3.如何使用

3.1update(sql,Object[]{})方法

此方法可以执行insert、delete、update等方法,sql指本次发送到数据库的sql语句,Object[]{}表示参数的对象数组,或者也可以按顺序直接排列参数的值。

以按编号删除图书为例:

String sql = "delete from bookta where isbn=?";
return jdbcTemplate.update(sql, isbn);

3.2查询

3.2.1不带参数的sql语句查询

query(String sql,RowMapper<T> rowMapper)

3.2.2带参数的sql语句查询

query(String sql,RowMapper<T> rowMapper,Object[] args)

RowMapper<T> rowMapper 是一个接口,此处的参数值应该为该字段的实现类的一个实例,且该实例满足数据库记录到对象的映射关系

public class BookMapper implements RowMapper<Book> {
    
    @Override
    public Book mapRow(ResultSet resultSet, int i) throws SQLException {
        Book book = new Book();
        book.setIsbn(resultSet.getString("isbn"));
        book.setTitle(resultSet.getString("title"));
        book.setType(resultSet.getString("type"));
        book.setPrice(resultSet.getDouble("price"));
        return book;
    }
}

此处以book对象为例,该代码展示了从数据库取来的结果集与对象的映射关系,即数据库记录和对象的映射关系,ORM框架Hibernate和Mybatis用的就是这种映射关系,后面的博客会有介绍。

3.2.3只返回某一个字段值或者某一条记录

queryForObject(String sql,Class<T> requiredType,Object[] args)

Class<T> requiredType为想得到的值的类,比如Integer.class指取一个int类型的记录数,在统计记录条数可能会用到。

4.其他用法,可用于执行各种sql语句

jdbcTemplate.execute(sql);

缺点:一般用于执行DDL语句(常见的有创建数据库或表,或者修改表结构);没有返回值;执行不带参数的SQL语句.

所以一般不常见,了解一下即可。

5.另一大对象NamedParameterJdbcTemplate

(1) 与JdbcTemplate唯一不同的地方是,在给问号赋值的时候,是按照名字对应的。 (2) sql语句中不使用?来作为参数替代符。而是使用:加变量名的方式作为参数替代符。 然后在通过Map将变量名与实际值绑定起来,传递给update方法。

增加xml配置:

<bean id="namedParameterJdbcTemplate" class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate">
    <constructor-arg name="dataSource" ref="dataSource"></constructor-arg>
</bean>

使用举例:

 

此对象不要求设置参数值按顺序,可以乱序,只要保证名字对应即可。较前者,使用较为灵活,但代码变多。

关于jdbc模板的两大对象介绍到此了,如果喜欢本博文请点个赞。

源码下载地址:github

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值