Spring JDBC模板类—org.springframework.jdbc.core.JdbcTemplate .

关于JDBC的"薄"封装,Spring 用一个Spring JDBC模板类来封装了繁琐的JDBC操作。下面仔细讲解一下Spring JDBC框架。

一、首先看一下为什么要对JDBC进行封装?

   传统的JDBC API实现比较底层,不管用户执行一个复杂的数据库操作还是一个简单的数据库查询操作,都有一个模板可以使用:捕获或抛出异常—获取连接—创建Statement或PreparedStatement—执行数据库操作—获取结果(ResultSet)—其他操作—处理异常—关闭ResultSet—关闭Statement或PreparedStatement—关闭连接。这样的重复操作会让人比较有结构感的同时也消耗了大量的时间。既然所有的数据库操作都可以引用这一模板。那Spring就对JDBC API进行了一层"薄"封装,让程序员脱离繁琐的结构而只编写各个数据库操作程序中的核心部分:CRUD。通过在配置文件中配置数据源来获取连接。这样就减少了那些在传统JDBC编程中的重复编程,让这部分重复交由Spring JDBC容器来处理。

二、Spring JDBC封装是怎样的?

Spring JDBC是提供了一个数据库操作的模板类JdbcTemplate来进行封装的。org.springframework.jdbc.core.JdbcTemplate extends JdbcAccessor implements JdbcOperations 。下面我们来具体看一下这个封装类:

1、JdbcAccessor 是一个抽象类,实现了InitializingBean接口。InitializingBean接口实现了对BeanFactory中的所有属性设置后的响应。JdbcAccessor实现InitializingBean的唯一方法afterPropertiesSet来对设置数据源和其他的日志信息和异常信息和是否是LazyInit(懒加载)。

2、JdbcOperations是一个接口。这个接口定义了一个JDBC操作的集合,多数用回调来对操作进行定义。下面就是其中的方法定义,基本上也可以作为SpringJDBC的文档进行阅读。

操作JdbcOperations 方法定义
处理简单连接ConnectionObject execute(ConnectionCallback action)
处理静态查询Statement

Object execute(StatementCallback action)

void execute(String sql)

Object query(String sql, ResultSetExtractor rse)

void query(String sql, RowCallbackHandler rch)

List query(String sql, RowMapper rowMapper)

Object queryForObject(String sql, RowMapper rowMapper)

Object queryForObject(String sql, Class requiredType)

Map queryForMap(String sql)

long queryForLong(String sql)

int queryForInt(String sql)

List queryForList(String sql, Class elementType)

List queryForList(String sql)

SqlRowSet queryForRowSet(String sql)

int update(String sql)

int[] batchUpdate(String[] sql)

处理PreparedStatement

Object execute(PreparedStatementCreator psc, PreparedStatementCallback action)

Object execute(String sql, PreparedStatementCallback action)

Object query(PreparedStatementCreator psc, ResultSetExtractor rse)

Object query(String sql, PreparedStatementSetter pss, ResultSetExtractor rse)

Object query(String sql, Object[] args, int[] argTypes, ResultSetExtractor rse)

Object query(String sql, Object[] args, ResultSetExtractor rse)

void query(PreparedStatementCreator psc, RowCallbackHandler rch)

void query(String sql, PreparedStatementSetter pss, RowCallbackHandler rch)

void query(String sql, Object[] args, int[] argTypes, RowCallbackHandler rch)

void query(String sql, Object[] args, RowCallbackHandler rch)

List query(PreparedStatementCreator psc, RowMapper rowMapper)

List query(String sql, PreparedStatementSetter pss, RowMapper rowMapper)

List query(String sql, Object[] args, int[] argTypes, RowMapper rowMapper)

List query(String sql, Object[] args, RowMapper rowMapper)

Object queryForObject(String sql, Object[] args, int[] argTypes, RowMapper rowMapper)

Object queryForObject(String sql, Object[] args, RowMapper rowMapper)

Object queryForObject(String sql, Object[] args, int[] argTypes, Class requiredType)

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

Map queryForMap(String sql, Object[] args, int[] argTypes)

Map queryForMap(String sql, Object[] args)

long queryForLong(String sql, Object[] args, int[] argTypes)

long queryForLong(String sql, Object[] args)

int queryForInt(String sql, Object[] args, int[] argTypes)

int queryForInt(String sql, Object[] args)

List queryForList(String sql, Object[] args, int[] argTypes, Class elementType)

List queryForList(String sql, Object[] args, Class elementType)

List queryForList(String sql, Object[] args, int[] argTypes)

List queryForList(String sql, Object[] args)

SqlRowSet queryForRowSet(String sql, Object[] args, int[] argTypes)

SqlRowSet queryForRowSet(String sql, Object[] args)

int update(PreparedStatementCreator psc, KeyHolder generatedKeyHolder)

int update(String sql, PreparedStatementSetter pss)

int update(String sql, Object[] args, int[] argTypes)

int update(String sql, Object[] args)

int[] batchUpdate(String sql, BatchPreparedStatementSetter pss)

处理callable Statement

Object execute(CallableStatementCreator csc, CallableStatementCallback action)

Object execute(String callString, CallableStatementCallback action)

Map call(CallableStatementCreator csc, List declaredParameters)

上面的所有方法均throws DataAccessException;

3、DataAccessException继承NestedRuntimeException,NestedRuntimeException继承RuntimeException,主要输出异常信息。异常类都不会自己实现太多的方法而是一般调用父类方法来进行实现,只是更细化相应信息的输出和传入相应参数到父类方法进行执行。

4、大家可以看到上述方法很多是用回调来作为参数,而具体在JdbcTemplate中方法的实现还是利用传统的JDBC API中的Connection、Statement、PreparedStatement、ResultSet等类和相应的方法来进行实现回调。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: org.springframework.jdbc.core.JdbcTemplateSpring框架中的一个核心类,它提供了一种简单的方式来执行SQL语句并处理结果集。它封装了JDBC API,使得开发人员可以更加方便地使用JDBC来访问数据库。JdbcTemplate提供了许多便捷的方法,如查询、更新、批量更新等,可以大大简化开发人员的工作。 ### 回答2: org.springframework.jdbc.core.JdbcTemplateSpring框架中提供的一个用于简化JDBC操作的工具类。它是SpringJDBC API的一个封装,提供了一系列方法来完成JDBC操作,例如执行SQL语句、查询数据、处理结果集等。它可以让开发人员更方便、更高效地访问数据库,降低开发难度和重复工作。 JdbcTemplate的主要特点如下: 1. 简化JDBC编码:JdbcTemplate封装了JDBC API,使用JdbcTemplate可以在不编写复杂的JDBC代码的情况下访问数据库。 2. 抽象出通用的DAO方法:JdbcTemplate提供了一些通用的数据库操作方法,例如更新、删除、插入数据等,这些方法可以被用作DAO对象的通用方法。 3. 参数绑定:JdbcTemplate支持参数绑定,使用SQL语句预编译,从而避免了SQL注入等安全问题。 4. 结果集处理:JdbcTemplate提供了ResultSetExtractor和RowMapper接口,用于将结果集转换为Java对象,使数据访问更加方便。 JdbcTemplate的使用步骤如下: 1. 配置数据源:在Spring配置文件中配置数据源,例如使用DriverManagerDataSource、JNDIDataSource等。 2. 创建JdbcTemplate:在业务类中创建JdbcTemplate对象,并注入数据源。 3. 编写SQL语句:根据业务需求编写SQL语句。 4. 执行SQL语句:使用JdbcTemplate执行SQL语句,并处理结果集。 5. 处理结果集:根据业务需求对结果集进行处理,例如将结果集转换为Java对象。 总的来说,JdbcTemplateSpring框架中的一个重要组件,它的简单使用和强大功能为数据访问层开发者提供了方便和支持。它可以降低JDBC编码难度和重复性,提高开发效率,使我们更专注于业务实现。 ### 回答3: org.springframework.jdbc.core.JdbcTemplateSpring Framework的核心模块中包含的一个DAO(数据访问对象)框架中的JDBC模块的重要类。这个类提供了一种容易使用的方式来处理JDBC的工作。jdbc.core.JdbcTemplate丰富了JDBC API并简化了JDBC代码的编写,它提供了一个可以执行SQL操作的简单环境。 org.springframework.jdbc.core.JdbcTemplate 提供了一些方法,具体如下: 1. update(String sql,Object... args):更新操作 2. queryForObject(String sql,Class<T> requiredType,Object... args):执行查询返回单个结果对象。 3. queryForList(String sql,Object... args): 执行查询返回一个集合。 4. batchUpdate(String sql,List<Object[]> batchArgs):执行批量更新操作。 5. query(String sql, RowMapper<T> rowMapper, Object... args): 执行查询操作并将返回结果映射到Java对象。 6. query(String sql, ResultSetExtractor<T> rse, Object... args):执行查询并使用应用程序指定的ResultSetExtractor处理结果。 7. execute(String sql):执行给定的SQL操作,无需返回结果。 8. call(CallableStatementCreator csc, List<SqlParameter> declaredParameters):执行从CallableStatementCreator传递的Call方法。 org.springframework.jdbc.core.JdbcTemplate优势如下: 1.不需要抽象模型层的用户必须实现持久层接口,这就更加简介。 2.用不同技术可以确保某些结构。例如,使用jdbcTemplate.getDataSource().getConnection()进行getConnection()操作可以确保代码可以使用任何连接池来创建数据源连接。 3.它完全面向面向对象编程,并提供了特殊的函数来处理大量对象。 totalElements来自jdbcTemplate对padded set的数目的快速计算。 4.可以使用PreparedStatement对象。 综上所述,org.springframework.jdbc.core.JdbcTemplate是一种重要的JDBC工具,它优化了手动处理错误和异常,还提供了令人愉快的映射选项。对于想要使用JDBC可靠性和灵活性的开发人员来说,org.springframework.jdbc.core.JdbcTemplate是一个非常强大的工具。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值