Spring 之jdbc模板(JdbcTemplate与NamedParameterJdbcTemplate)

传统的jdbc访问数据库显得太繁琐,开发者开发了许多的框架与模板,让对数据库的增删改查变得尤为简单与标准化,在这里介绍的是spring出品的jdbc模板,

亮点在:开发者不需要去书写建立连接和关闭资源等核心业务(驱动选择和sql语句)耦合的代码块了,让开发者的注意点重新回到sql语句的设计和执行上。

这便是封装的目的,让代码复用,让程序看起来很简洁

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>

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

使用实例

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

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

以按编号删除图书为例:

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

2、

1不带参数的sql语句查询

query(String sql,RowMapper<T> rowMapper)

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只返回某一个字段值或者某一条记录

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>

如何在配置文件中不加上面的语句的话,也可以用下面的方式来设置

 注意:这里一定要注意@postconstruct的作用

使用举例:

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

原文地址:https://www.cnblogs.com/jiazhutao/p/12676648.html