Spring技术内幕(5)数据库操作组件的实现

本章内容

Spring JDBC的设计与实现、Spring JDBC中模板类的设计与实现、Spring JDBC中RDBMS操作对象的实现、Spring ORM的设计与实现

5.1 Spring JDBC的设计与实现

5.1.1 应用场景

Spring建立的JDBC的框架中,还设计了一种更面向对象的方法,相对于JDBC模板,这种实现更像是一个简单的ORM工具,为应用提供了另外一种选择。

5.1.2 设计概要

Spring JDBC提供了一系列的模板类作为应用提供便利,在这其中运用到了GOF设计模式中的模板模式,如下图:

在Spring设计的模板中,大部分封装了对JDBC和Hibernate处理的通用过程,比如数据库资源管理、Hibernate的session管理等,在使用时,只需要设计自己定制化的或者和应用相关的部分就可以了。

5.2 Spring JDBC中模板类的设计与实现

5.2.1 设计原理

在Spring JDBC中,JdbcTemplate是一个主要的模板类,继承关系如图:

从类继承关系上来看,JdbcTemplate继承了基类JdbcAccessor的和接口类JdbcAperation。在基类JdbcAccessor的设计中,对DataSource数据源进行管理和配置。在JdbcOperation接口中,定义了通过JDBC操作数据库的基本操作方法,而Jdbctemplate提供这些接口方法的实现,比如execute方法、query方法和update方法等。

5.2.2 JdbcTemplate的基本使用

在模板的回调方法doInStatement中嵌入的是用户对数据库进行操作的代码,可以由Spring来完成,或者由客户应用直接来完成,然后通过JdbcTemplate的execute方法就可以完成相应的数据库操作。

5.2.3 JdbcTemplate的execute实现

5.2.4 JdbcTemplate的query实现

 

 query方法是通过使用PreparedStatementCallback的回调方法doInPreparedStatement来实现的。在回调函数中,可以看到PreparedStatement的执行,以及查询结果的返回处理结果。

5.2.5 使用数据库Connection

在以上这些对数据库的操作中,使用了辅助类DataSourceUtils。对于DataSource缓冲池的实现,用户可以通过定义Apache Jakarta Commons DBCP或者C3P0提供的DataSource来完成,然后在IOC容器中配置好后交给JdbcTemplate就可以使用了。

5.3 Spring JDBC中RDBMS操作对象的实现

Spring提供了org.springframework.jdbc.object包,其中包含了SqlQuery、SqlMappingQuery、SqlUpdate和StoredProcedure等类,这些类都是Spring JDBC应用程序可以使用的。

RDBMS对象的基本继承关系

5.3.1 SqlQuery的实现 

在使用MappingSqlQuery完成这个数据转换功能的时候,需要用户扩展一个MappingSqlQuery实现,并在用户扩展类的初始化函数中对SQL查询语句和查询参数进行设置,然后调用compile来完成这些设置。这部分数据转换代码会在对数据库的查询结束执行,从而完成数据查询记录到Java数据对象的转换。

5.3.2 SqlUpdate的实现

主要提供数据的更新功能。

SqlUpdate的使用非常简洁,对应用来说,只需要提供具体的参数对象的值,并调用update方法就可以完成整个数据的更新过程,至于数据库Connection的管理、事务处理场景的处理等在数据库操作中都会涉及的基本过程,由作为应用平台的Spring来处理。SqlUpdate的设计时序

SqlUpdate里的updateByNameParam方法完成的,使用JdbcTemplate来完成的。

5.3.3 SqlFunction

 SqlFunction类是MappingSqlQuery的子类。SqlFunction基本功能:SqlFunction RDBMS操作类中封装了一个SQL“函数”包装器(wrapper),使用这个包装器可以查询并返回一个单行结果集,对于这个单行结果集,SqlFunction默认的返回对象是一个int值。

为了使用SqlFunction,首先要创建一个SqlFunction对象,创建时需要为它指定数据源和执行的Sql语句。创建完以后,执行compile,然后可以调用SqlFunction的run方法来完成指定的SQL语句的执行,从而得到查询数据记录行数的返回结果。

SqlFunction的设计时序

5.4 Spring ORM的设计与实现

5.4.1 应用场景

Spring的ORM包提供了对许多ORM产品的支持。 

5.4.2 设计概要

应用通过Spring使用这些ORM工具时,通常使用Spring提供的Template类(模板类)。在这些模板类里,封装了主要的数据操作方法,比如query、update等,并且在Template封装中,已经包含了前面所说的通用过程,这些通用过程包括Hibernate中的Session的处理、Connection的处理、事务的处理等。

以Template为核心的类设计

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值