传统的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