Java 数据库访问技术概述

前言

前面我们已经写了一个 SpringBoot 版本的 hello word 程序。这只是显示了 SpringBoot 强大功能的冰山一角,实际情况当然远比这个样例复杂。在我们的应用中,一个最常见的功能就是对关系数据库数据的存取。下面一些列文章主要讲述在 SpringBoot 中如何和数据库进行交互。在这之前,我们有必要聊一聊 Java 数据库访问相关的技术。

Java 数据库访问技术概述

JDBC

JDBC 的英文是 Java DataBase Connectivity 。它是 Java 原生的数据库访问技术。JDBC 是 Java 的发明者 SUN 提出的访问数据库的规范接口。它由一组 Java 访问数据的类和接口组成。每种数据库按照这个规范来实现该数据的数据库驱动程序。通过这种方式,无论存储数据的实际数据库是 Oracle、MySQL、MS SQLServer 还是其他的关系型数据库,我们都可以在一份代码里,通过配置的方式加载不同的数据库驱动程序,访问不同的数据库数据。配合标准的 SQL 语句,已经编写好的 Java 程序几乎可以在不修改任何代码的情况下无缝的切换后端的数据库类型。这个方式极大的提高了 Java 应用程序的应用范围。

JDBC 技术提供了访问数据库的基础能力。在实际使用的过程中,还是非常繁琐的。按照一般的过程,采用 JDBC 访问数据库要经过一下几个步骤

  1. 加载选择的数据库驱动程序类
  2. 通过数据库连接字符串和可选的用户名密码获取数据库连接
  3. 成功获取数据库连接后,在数据库连接上根据情况创建某种类型的 Statement
  4. 根据情况在 Statement 上执行 SQL语句。如果是查询,返回查询的 ResultSet 对象
  5. 如果是查询数据的操作,则遍历 ResultSet 对象,逐行取出里面每一列的数据。
  6. 如果是查询数据的操作,关闭 ResultSet 对象
  7. 关闭数据库连接对象

JDBC 是 Java 里面数据库访问的基础,其他的 ORM 、JPA 等 Java 的数据库访问技术都是以 JDBC 技术为基础的。

JDBC 技术存在的问题

从上面 JDBC 使用的过程描述中我们可以看出,原生的 JDBC 的数据库访问方式存在这下面几个问题

  1. 建立数据库连接是个系统开销很大的操作系统,每次使用都要建立、释放,这个效率非常低下
  2. 大量的操作都是在建立数据库连接,释放连接这种准备工作上。
  3. 使用的过程是以数据库的表为视图,按照记录集行和列的概念操作数据,但是 Java 是面向对象的语言,在程序中,一般都是对象的操作。这两种视图的转换要人工来完成,不符合程序员的思维,也比较低效。

对于这些存在的问题,Java 又发展出几种技术来解决。

数据库连接池

鉴于建立一次数据库连接的系统开销非常大,建立连接的速度较慢的问题,开发者自然就想到了是否可以将建立的连接长期保持,重复使用的方案。这就是数据库连接池的基本思想。

Java 用一个 javax.sql.DataSource 接口来定义数据库连接池的实现,它只有两个需要实现的方法。都是用来从连接池中获取数据库连接的。

Connection getConnection() throws SQLException;

Connection getConnection(String username, String password) throws SQLException;

Java 数据库连接池的实现有很多。例如 C3P0、DBCP、Tomcat Jdbc Pool、BoneCP、Druid 等。

一般来说,一个实现良好的数据库连接池产品应该具备下面的特性

  1. 多路连接复用。在连接池中保持多个数据库连接,一个或者多个线程需要使用连接的时候能够马上获得连接,并且尽量减少多线程竞争的冲突。
  2. 连接中断检测。如果连接池中的一个或者多个连接中断,在使用前应该有检测机制,避免让程序使用中断的连接导致程序故障
  3. 容量控制。要在连接池中动态的保持合理数量的数据库连接,减少临时建立连接的情况,也不能无限制的新建连接导致系统资源耗尽。

现在在开发 Java 数据库相关的程序的时候,基本上大家都在使用数据库连接池的方式来管理数据库连接。

ORM

有了 JDBC 后,Java 程序员已经可以容易的对数据库进行操作了。但是这个操作的方式让很多的 Java 程序员并不满意,因为 Java 是面向对象的开发语言,大家的思维都是面向对象的。而到了 JDBC 这里后,程序员需要将对象转换成为 SQL 语句来执行。这个过程对很多人来说是非常别扭不可接受的。他们希望用对象的方式来操作数据库。这就要求有一个方式能做自动的做 Java 的对象和数据库对象之间的映射。这个方式就是 ORM。

Object-Relation Mapping 用来把对象模型表示的对象映射到基于S Q L 的关系模型数据库结构中去。这样,我们在具体的操作实体对象的时候,就不需要再去和复杂的 SQ L 语句打交道,只需简单的操作实体对象的属性和方法。

Java 里面比较著名的 ORM 框架有 Hibernate、MyBatis 等。

JPA

JPA 就是 Java Persistence API,它 的主要目标之一就是提供更加简单的编程模型。因为各个 ORM 框架的流行,SUN 老大一看,各个 ORM 框架的使用都不一样,觉得有必要统一 ORM 技术,简化Java 开发,所以就推出了 JPA 规范。类似于 JDBC 统一了 Java 中访问数据库的底层 Api 一样,JPA 的目标就是让程序员用统一的方式来使用多个不同的 ORM 框架。

JPA 也有很多的实现,包括 Hibernate、Spring、OpenJPA。

后记

后面我将用三篇文章分别来说明在 SpringBoot 中使用 JDBC、MyBatis、Spring Data JPA 方式来访问数据库的样例。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,539评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,594评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,871评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,963评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,984评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,763评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,468评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,357评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,850评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,002评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,144评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,823评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,483评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,026评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,150评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,415评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,092评论 2 355

推荐阅读更多精彩内容

  • 主要内容 定义Spring的数据访问支持 配置数据库资源 使用Spring提供的JDBC模板 写在前面:经过上一篇...
    程序熊大阅读 8,767评论 1 31
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,645评论 18 399
  • 天渐渐亮了 梦的眼睛一片漆黑 裹在谎言的被子里 被幻想反复咀嚼 没有声音的呼喊 没有光亮的瞳孔 诱惑吐露着迷人的信...
    禾静一阅读 256评论 6 8
  • 确定了公司的战略后最重要的工作就是选人了,不论是初期的合伙人,中期的管理层,还是业务骨干,你总是需要人才来一起走向...
    大笑的篷蒿人阅读 481评论 0 3