日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

JDBC与ORM发展与联系 JDBC简介(九)

發(fā)布時(shí)間:2025/5/22 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JDBC与ORM发展与联系 JDBC简介(九) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

概念回顧

回顧下JDBC的概念: JDBC(Java Data Base Connectivity,java數(shù)據(jù)庫連接)是一種用于執(zhí)行SQL語句的Java API,可以為多種關(guān)系數(shù)據(jù)庫提供統(tǒng)一訪問,它由一組用Java語言編寫的類和接口組成。 JDBC提供了一種基準(zhǔn),據(jù)此可以構(gòu)建更高級(jí)的工具和接口,使數(shù)據(jù)庫開發(fā)人員能夠編寫數(shù)據(jù)庫應(yīng)用程序。 JDBC是Java數(shù)據(jù)庫連接技術(shù),所以,他必然根植于Java語言,使用JDBC離不開Java開發(fā)環(huán)境,是Java語言對(duì)于數(shù)據(jù)庫連接的技術(shù)實(shí)現(xiàn)。 JDBC作為一種協(xié)議的體現(xiàn),在Java代碼中就是一系列的接口與實(shí)現(xiàn)的約定。 數(shù)據(jù)庫驅(qū)動(dòng)廠商以及應(yīng)用程序開發(fā)者基于這一協(xié)議進(jìn)行對(duì)接,從而解耦,從而可以相互分離的獨(dú)立發(fā)展。 既然最終體現(xiàn)形式為一組API這組API到底做了什么? 想要了解JDBC到底做了什么,在windows平臺(tái)的話,可以直接打開命令窗口 根據(jù)用戶名密碼進(jìn)行連接,然后發(fā)送語句,然后查看結(jié)果 JDBC是Java數(shù)據(jù)庫連接,仍舊是在做”連接數(shù)據(jù)庫“這件事情本身,哪怕變出花來,他的根本仍舊是連接數(shù)據(jù)庫 數(shù)據(jù)庫就是那個(gè)數(shù)據(jù)庫,他一直在那里,數(shù)據(jù)庫有他們固有的操作流程步驟以及SQL執(zhí)行規(guī)范 當(dāng)你用命令窗口連接數(shù)據(jù)庫,發(fā)送SQL語句時(shí),你是在操作數(shù)據(jù)庫 使用JDBC只是換了一種方式,不再是手動(dòng)了,而是借助于Java代碼,然后依賴于底層的數(shù)據(jù)庫驅(qū)動(dòng),去操作數(shù)據(jù)庫 簡言之,你本來是在命令窗口里面,輸入一行SQL之后敲回車 現(xiàn)在變成了借助于Java代碼,通過幾個(gè)對(duì)象相互配合進(jìn)而發(fā)送SQL 做的所有事情都沒有任何變化,查詢還是那個(gè)查詢,更新還是那個(gè)更新,變得只是形式
你以為開個(gè)法拉利去車站接人和騎電動(dòng)車去接人有本質(zhì)區(qū)別么? 你要做的還是去車站接人,你要接的人還是那個(gè)人,但是形式變了,停車位置變了,時(shí)間變了,連旁邊的妹子看你得眼光可能也變了,但是,但是,你的事兒還是那個(gè)事兒,如果接不到人,一切還不是扯淡? 所以說一個(gè)數(shù)據(jù)庫客戶端一般可以提供給我們那些服務(wù),JDBC就能夠提供給我們那些服務(wù) 不過,對(duì)于客戶端來說,結(jié)果直接就可以呈現(xiàn)出來了,但是對(duì)于Java代碼---方法的調(diào)用,需要處理更多的細(xì)節(jié),哪些是輸出,哪些是輸入,參數(shù)的傳遞 所以JDBC沒有看起來這么簡單 JDBC作為數(shù)據(jù)庫連接的中間層,將應(yīng)用程序與數(shù)據(jù)庫連接進(jìn)行解耦,給開發(fā)者提供了極大地方便,從此以后,再也不需要面向數(shù)據(jù)庫驅(qū)動(dòng)進(jìn)行編程了 只需要面向JDBC進(jìn)行編程即可,所以JDBC的出現(xiàn),對(duì)于Java連接數(shù)據(jù)庫實(shí)現(xiàn)了大一統(tǒng)的局面,解放了生產(chǎn)力 但是,你既然作為中間層,將兩者進(jìn)行解耦,你就要負(fù)責(zé)對(duì)接,否則就真的徹底斷開了,就不叫做解耦了。。。 這其中最重要的一點(diǎn)就是結(jié)果集的返回 對(duì)于類似命令行或者Navicat的客戶端,是直觀的呈現(xiàn),眼睛來識(shí)別,而對(duì)于接口調(diào)用,則是API各個(gè)方法中的數(shù)據(jù)的對(duì)接,結(jié)果集的解析 JDBC是對(duì)數(shù)據(jù)庫操作的Java描述,所以對(duì)于比如查詢來說,結(jié)果集的邏輯呈現(xiàn)也是下圖類似式樣 JDBC對(duì)于結(jié)果集的處理核心就是將這樣子的數(shù)據(jù)返回給應(yīng)用程序,直觀看起來很簡單的行列,映射到字段中就涉及到很復(fù)雜的轉(zhuǎn)換了 總共有多少行記錄?又有多少列?有哪些字段是要處理的?字段順序是什么?字段類型是什么?SQL類型與Java類型又是如何映射?有些字段的精度又是什么? 某列的值應(yīng)該跟哪一個(gè)實(shí)體中的字段進(jìn)行對(duì)照?等等這些都是結(jié)果集要處理的,所以說JDBC的確又很復(fù)雜

不得不面對(duì)的問題

冗余代碼

借助于JDBC編程,有很多模塊化的代碼,在第一個(gè)JDBC示例中,所有的步驟都是需要按部就班完成的 而這些步驟很顯然,有些是結(jié)構(gòu)化的模式化的,比如連接數(shù)據(jù)庫,關(guān)閉連接,異常處理,這些其實(shí)對(duì)于應(yīng)用開發(fā)者其實(shí)并不想處理,但是卻不得不處理 簡言之,JDBC功能足夠,但是便捷性欠缺,結(jié)構(gòu)化本身沒錯(cuò),結(jié)構(gòu)化模式化流程化才能成為標(biāo)準(zhǔn),但是必然會(huì)產(chǎn)生冗余步驟,如何靈活是一個(gè)問題

對(duì)象映射

目前存儲(chǔ)數(shù)據(jù)最常用最流行的工具是關(guān)系型數(shù)據(jù)庫,我們通過JDBC借助于SQL語句操作數(shù)據(jù)庫,但是Java是面向?qū)ο蟮木幊陶Z言,所有的操作都是對(duì)象 在使用JDBC進(jìn)行操作時(shí),面向?qū)ο蟮母拍顓s被弱化了 比如下面的這一段代碼,對(duì)于參數(shù)的設(shè)置,是按照屬性字段的索引,你看不到對(duì)象的影子 你可能希望有這么一個(gè)學(xué)生Student類 這個(gè)類有幾個(gè)屬性:id、姓名、年齡、性別 當(dāng)需要執(zhí)行下面的插入行為時(shí),可以直接將Student的對(duì)象實(shí)例直接傳遞進(jìn)去即可,而不是這樣按照索引去設(shè)置。 結(jié)果集的取回也是類似的 當(dāng)你想要查詢一個(gè)列表時(shí),你不得不如下這般處理 你是不是會(huì)想,我有一個(gè)Student類了,為什么不能直接給我返回一個(gè)List<Student> ?那樣不是很方便么? 所以看得出來,Java作為純粹的面向?qū)ο缶幊陶Z言,一切皆是對(duì)象,但是目前常用的數(shù)據(jù)庫卻是關(guān)系型數(shù)據(jù)庫 關(guān)系模型就像一張二維表格,因而一個(gè)關(guān)系型數(shù)據(jù)庫就是由二維表及其之間的聯(lián)系組成的一個(gè)數(shù)據(jù)組織,這并不是對(duì)象型的 JDBC的操作方式是也不是面向?qū)ο蟮?#xff0c;整個(gè)過程面向?qū)ο缶幊痰乃季S觀念很大程度上被遏制了 所以,盡管JDBC將應(yīng)用程序與數(shù)據(jù)庫驅(qū)動(dòng)進(jìn)行解耦,應(yīng)用程序開發(fā)者面向JDBC進(jìn)行編程,而不需要面向數(shù)據(jù)庫進(jìn)行編程 但是誰也沒辦法否認(rèn)Java是純粹的面向?qū)ο?#xff0c;所以在對(duì)象與關(guān)系型數(shù)據(jù)庫的字段之間,又缺少了一層,這層用于將字段與對(duì)象進(jìn)行映射對(duì)照 沒有這層功能,只能是應(yīng)用程序開發(fā)者借助于JDBC自己手動(dòng)的將字段組裝成對(duì)象,很繁瑣,而且,不成規(guī)范,就如同沒有JDBC之前開發(fā)數(shù)據(jù)庫操作的程序那樣,需要自己實(shí)現(xiàn)。 簡言之,關(guān)系型數(shù)據(jù)庫不是面向?qū)ο蟮?#xff0c;而JAVA卻是純粹的面向?qū)ο蟮恼Z言,這勢(shì)必不能很流暢的合作,JDBC對(duì)象的映射全靠自己

ORM

鑒于以上提出來的問題,在使用Java開發(fā)時(shí),我們希望真正的建立一個(gè)對(duì)象型數(shù)據(jù)庫,或者說至少使用起來看起來像一個(gè)對(duì)象型數(shù)據(jù)庫 但是,目前常用的數(shù)據(jù)庫又的確是關(guān)系型數(shù)據(jù)庫,這一點(diǎn)短期內(nèi)又無法改變 所以出現(xiàn)了ORM,對(duì)象關(guān)系映射(Object Relational Mapping,簡稱ORM,或O/RM,或O/R mapping) 面向?qū)ο笫菑能浖こ袒驹瓌t(如耦合、聚合、封裝)的基礎(chǔ)上發(fā)展起來的,而關(guān)系數(shù)據(jù)庫則是從數(shù)學(xué)理論發(fā)展而來的,兩套理論存在顯著的區(qū)別。 而面向?qū)ο蟮木幊趟枷胧擒浖_發(fā)的一大趨勢(shì),而關(guān)系數(shù)據(jù)庫也是目前的必然存在,兩種理論的差別的不匹配,造就了ORM,亂世出英雄。

ORM到底做什么?

JDBC將應(yīng)用程序開發(fā)者與底層數(shù)據(jù)庫驅(qū)動(dòng)程序進(jìn)行解耦,作為中間層承上啟下 而ORM是插入在應(yīng)用程序與JDBCAPI之間的一個(gè)中間層,JDBC并不能很好地支持面向?qū)ο蟮某绦蛟O(shè)計(jì) ORM解決了這個(gè)問題,通過JDBC將字段高效的與對(duì)象進(jìn)行映射 應(yīng)用程序開發(fā)人員不再需要直接與JDBC API進(jìn)行打交道了,可以使用更加便利的ORM工具,提高開發(fā)效率 所以O(shè)RM是干什么的? ORM用于完成Java對(duì)象與關(guān)系型數(shù)據(jù)庫的映射,是JDBC的一層封裝,提高了易用性。 簡言之,ORM工具就是JDBC的封裝,簡化了JDBC的使用,完成關(guān)系型數(shù)據(jù)庫中數(shù)據(jù)與Java對(duì)象的映射。 ORM工具框架最大的核心就是封裝了JDBC的交互,你不在需要處理結(jié)果集中的字段或者行或者列 借助于ORM可以快速進(jìn)行開發(fā),而無需關(guān)注JDBC交互細(xì)節(jié) 但是既然是JDBC的封裝,多一層封裝,就勢(shì)必會(huì)帶來性能的開銷,這是無法回避的事實(shí),不過現(xiàn)在技術(shù)不斷發(fā)展,性能開銷越來越小。 從上面的解釋看,好似有些狹義,會(huì)認(rèn)為ORM框架僅僅完成對(duì)象的映射,其實(shí)并不然,ORM最原始的是一個(gè)概念,所有的ORM產(chǎn)品是基于ORM思想的實(shí)現(xiàn)實(shí)體 他們往往都附加了更多的功能,比如很多ORM框架也叫做持久化ORM框架 什么意思呢? 持久化簡單理解就是脫離內(nèi)存可以獨(dú)立保存,保存到數(shù)據(jù)庫,保存到文件等等形式,都是持久化 “持久化ORM框架”中的持久化一般是指保存到數(shù)據(jù)庫,所以說如果一個(gè)ORM提供了CRUD操作API,應(yīng)用程序可以借助于ORM完成數(shù)據(jù)持久化的操作,這就算是一個(gè)持久化ORM框架 就如同很多DataSource的實(shí)現(xiàn)中添加了很多功能,有些就直接被叫做數(shù)據(jù)庫連接池 所以說具體怎么講,都是字面的含義,真正需要做的是理解ORM思想的含義: 完成對(duì)象與關(guān)系型數(shù)據(jù)庫的映射,封裝底層與數(shù)據(jù)庫的交互,并且很多都提供了強(qiáng)大的附加功能,比如持久化 現(xiàn)在的ORM基本上都是包括對(duì)持久類對(duì)象進(jìn)行CRUD操作的API 對(duì)于Java來說,常用的有Hibernate和Mybatis(iBatis)還有Spring JDBC等,在ORM核心思想的基礎(chǔ)上周邊又做了很多事情 所以說基本上很少有人直接使用原生的JDBC,可能有的公司中不會(huì)使用這些框架,因?yàn)楫吘箍蚣艿囊霑?huì)犧牲性能 而且框架是作為JDBC的封裝,就好比一個(gè)工具類,而且是別人封裝的工具類,終歸有些地方可能有的人用的不順手,或者說不適合有些場(chǎng)景,大公司有些會(huì)自己研發(fā)一套自己需要的類ORM工具,自己使用 ORM框架各有千秋利弊,你可以不用各種已成的框架,但是,沒有任何人可以否定ORM背后的思想,ORM會(huì)一定程度上降低性能但是借助于代碼生成工具等可以極大地提高開發(fā)效率 而且,ORM工具有極強(qiáng)的可維護(hù)性,雖然會(huì)降低性能,但是更多的時(shí)候可能是代碼不夠完美,算法不夠高明,邏輯不夠清晰,所以負(fù)責(zé)任的說ORM在很多場(chǎng)景都是很好的一種選擇。 原文地址:JDBC與ORM發(fā)展與聯(lián)系 JDBC簡介(九)

轉(zhuǎn)載于:https://www.cnblogs.com/noteless/p/10319299.html

總結(jié)

以上是生活随笔為你收集整理的JDBC与ORM发展与联系 JDBC简介(九)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。