Spring原理之JDBC

Posted demystify

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring原理之JDBC相关的知识,希望对你有一定的参考价值。

一、JDBC原理

    JDBC(Java Data Base Connectivity, java数据库连接)是一种用于执行SQL语句的JavaAPI,可为多种关系数据库提供统一的访问方式,它由一组用Java语言编写的类和接口组成。

参看:https://blog.csdn.net/xing_kong_xia_xiang/article/details/7

1、JDBC查询数据库数据,一般需要以下七个步骤:

(1)  加载JDBC驱动

(2)  建立并获取数据库连接

(3)  创建 JDBC Statements 对象

(4)  设置SQL语句的传入参数

(5)  执行SQL语句并获得查询结果

(6)  对查询结果进行转换处理并将处理结果返回

(7)  释放相关资源(关闭Connection,关闭Statement,关闭ResultSet)

2、 Driver接口及驱动类加载

Class.forName("oracle.jdbc.driver.OracleDriver");

   这条语句的含义是:装载Oracle的驱动类,驱动了会通过static块实现在DriverManager中的“自动注册”。

3、Connection接口

    Connection接口负责应用程序对数据库的连接,在加载驱动之后,使用url、username、password三个参数,创建到具体数据库的连接。Connectin只是接口,真正的实现是由数据库厂商提供的驱动包完成的。例如:

Connection connection = DriverManager.getConnection(url, user, password);

4、Statement接口

    Statement接口用来处理发送到数据库的SQL语句对象,通过Connection对象创建。三个常用的方法:execute、executeQuery、executeUpdate。例如:

Statement stmt=conn.createStatement();
//1.execute方法,如果执行的sql是查询语句且有结果集则返回true,如果是非查询语句或者没有结果集,返回false
boolean flag = stmt.execute(sql);
//2.执行查询语句,返回结果集
ResultSetrs = stmt.executeQuery(sql);
//3.执行DML语句,返回影响的记录数
int flag = stmt.executeUpdate(sql);

5、ResultSet接口

     执行查询SQL语句后返回的结果集,由ResultSet接口接收。常用处理处理方式:遍历/判断是否有结果(登录)。

参看:https://blog.csdn.net/qq_27853161/article/details/53608880

二、Spring Jdbc实现

1、JdbcTemplate

     JdbcTemplate是操作数据库的类,它提供了许多便利的数据库操作方法。类图如下:

JdbcTemplate的execute执行时序如下:

JdbcTemplate中的query、update等方法,大多都依赖于前面提到的execute方法。时序图如下:

2、Spring JDBC中的RDBMS操作对象的实现

      Spring  Jdbc不仅通过JdbcTemplate提供了许多简单的查询和更新功能,而且提供了更高层次的、更面向对象的访问方式。Spring JDBC中的RDBMS对象的类图如下:

通过MappingSqlQuery可以将数据库表的数据记录直接映射到一个对象集合,实现一个简单的O/R映射。

具体的调用时序如下:

通过使用Spring JDBC提供的SqlQuery基本特性,免去了手工处理ResultSet数据,对其中每一条数据记录进行逐个迭代,手工 转化为Java对象的繁琐过程。

      同样,SqlUpdate的使用也很简单,只需要提供具体的参数对象的值,并调用update方法就可以完成整个数据的更新过程。设计时序如下:

SqlFunction

SqlFunction类中封装了一个SQL函数包装器,使用这个包装器可以查询并返回一个单行结果集。默认返回对象是一个int值,其他返回类型可以仿照JdbcTemplate中的queryForXXX的实现。使用SqlFunction的优势是用户不必手动创建JdbcTemplate。

用法实例:

// 创建并初始化IoC容器
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("config.xml");
		
DataSource dataSource = (DataSource)applicationContext.getBean("dataSource");
SqlFunction sf = new SqlFunction(dataSource, "select count(*) from USER_TABLES");
sf.compile();

System.out.println("USER_TABLES Records Count : " + sf.run());

SqlFunction的设计时序:

三、Spring ORM的设计与实现

       Java作为面向对象的语言,与从数学理论发展起来的关系数据库技术在基础上存在很大的不同,Java在与关系数据库打交道的过程中就出现了一些不匹配的地方,为了解决这些不匹配问题,出现了ORM技术。

       已经存在成熟的ORM产品,比如Hibernate、MyBatis等。

       Spring不提供具体的ORM实现,只为应用提供对ORM产品的集成环境和使用平台,更像是对第三方ORM产品提供驱动支持。

 

以上是关于Spring原理之JDBC的主要内容,如果未能解决你的问题,请参考以下文章

从jdbc到spring-boot-starter-jdbc

SpringBoot系列之starter原理

JDBC与Spring事务及事务传播性原理解析-上篇

JDBC与Spring事务及事务传播性原理解析-上篇

SpringSpring系列4之Spring支持JDBC

JDBC与Spring事务及事务传播性原理解析-下篇