mybatis连接oracle_Mybatis 系列 0:初恋Mybatis
學(xué)習(xí) Mybatis 之前,我們可以通過(guò)比較之前使用 JDBC 操作持久層的代碼,再次重溫一下 JDBC 的噩夢(mèng)。
首先回憶一下操作 JDBC 的步驟:
口訣:「賈璉欲執(zhí)事」
賈:加載注冊(cè)驅(qū)動(dòng)
璉:獲取連接對(duì)象
欲:創(chuàng)建語(yǔ)句對(duì)象
執(zhí):執(zhí)行SQL語(yǔ)句
事:釋放資源
測(cè)試用例:
測(cè)試用例1測(cè)試用例2好了,回顧了以上兩個(gè)例子,使用 JDBC 來(lái)操作數(shù)據(jù)的代碼是不是很噩夢(mèng)?
代碼不僅又臭又長(zhǎng),而且不易維護(hù),又有 SQL 注入的風(fēng)險(xiǎn),每次操作都新創(chuàng)建一個(gè) Connection 對(duì)象,用完就關(guān)閉,而且創(chuàng)建 Connection 的成本非常大(解決方案:使用數(shù)據(jù)庫(kù)連接池 DataSource),加上針對(duì)不同的表查詢還要寫不一樣的結(jié)果集處理器,等等各種問(wèn)題。。。
如果每次的 CURD 都要這樣寫,那簡(jiǎn)直就是 CRUD copy_boy 了。
那既然使用 JDBC 這么難受,能不能不要它了?
哈哈,不能。原因是,在 Java 中,數(shù)據(jù)庫(kù)存取技術(shù)只能通過(guò)使用 JDBC 訪問(wèn)數(shù)據(jù)庫(kù)。
如果沒(méi)有 JDBC,會(huì)帶來(lái)什么問(wèn)題呢?
0:我們?cè)L問(wèn)數(shù)據(jù)庫(kù)操作就沒(méi)有規(guī)范;
1:因?yàn)閿?shù)據(jù)庫(kù)廠商是不一樣的,不同的數(shù)據(jù)庫(kù)廠商就會(huì)執(zhí)行不同的訪問(wèn) DataBase 規(guī)則;
2:比如我今天在 A 公司苦逼地寫著代碼,咱們大 A 公司使用的是 MySQL,好不容易學(xué)完了如何使用 MySQL 去訪問(wèn)數(shù)據(jù)庫(kù),卻遇上了今年的裁員潮。。。歷經(jīng)千辛萬(wàn)苦,關(guān)燈吃面過(guò)后,我來(lái)到了 B 公司,B 公司財(cái)大氣粗,使用的是 Oracle,作為小白的我,又得重新學(xué)習(xí)訪問(wèn)數(shù)據(jù)庫(kù)的方法,這回是 Oracle 的,下回去到 2B 公司,如果 2B 公司使用的是 IBM 的 DB2,那簡(jiǎn)直得吐血。。
造成上述問(wèn)題的根本原因就是各大數(shù)據(jù)廠商沒(méi)有統(tǒng)一的訪問(wèn)數(shù)據(jù)庫(kù)規(guī)則。
這時(shí),SUN 公司站出來(lái),說(shuō):我來(lái)統(tǒng)一指定所有數(shù)據(jù)庫(kù)的訪問(wèn)規(guī)則,你們各大數(shù)據(jù)庫(kù)廠商必須 follow,否則不支持你們的數(shù)據(jù)庫(kù)服務(wù)器。
有了規(guī)范之后,針對(duì)不同的數(shù)據(jù)庫(kù)服務(wù)器,就只需要一套技術(shù)即可。
這個(gè)規(guī)范稱之為 JDBC。
JDBC(Java DataBase Connectivity)是一種用于執(zhí)行 SQL 語(yǔ)句的 Java API,可以為多種關(guān)系數(shù)據(jù)庫(kù)提供統(tǒng)一訪問(wèn),它由一組用 Java 語(yǔ)言編寫的類和接口組成。JDBC 提供了一種基準(zhǔn),據(jù)此可以構(gòu)建更高級(jí)的工具和接口,使數(shù)據(jù)庫(kù)開(kāi)發(fā)人員能夠編寫數(shù)據(jù)庫(kù)應(yīng)用程序。(百度百科)
既然我們不能拋棄 JDBC,那有什么方法優(yōu)化其缺點(diǎn),成為 CEO,迎娶白富美,走上人生巔峰呢?
盒盒盒。。。盒盒。。想多了。。
還真有,那就是站在巨人的肩膀上,使用他們已經(jīng)寫好的框架,如:Hibernate、iBatis 和 Mybatis 等(底層都為 JDBC)。
Mybatis 就是我們要重點(diǎn)學(xué)習(xí)的持久層框架了。
那,Mybatis 是什么呢?
Mybatis 是支持普通 SQL 查詢,存儲(chǔ)過(guò)程和高級(jí)映射的持久層框架,嚴(yán)格上說(shuō)應(yīng)該是一個(gè) SQL 映射框架。
幾乎所有的 JDBC 代碼和參數(shù)的手工設(shè)置以及結(jié)果集的處理器都可以交給 Mybatis 完成,而這只需要簡(jiǎn)單的 XML 或者注解就可以完成,其前身是 iBatis。
Mybatis 核心為動(dòng)態(tài)代理 MapperProxy。
核心組件有:
SqlSessionFactoryBuilder(構(gòu)建器):根據(jù)配置信息或 Java 代碼來(lái)構(gòu)建 SqlSessionFactory 對(duì)象,作用:創(chuàng)建SqlSessionFactory對(duì)象。
SqlSessionFactory(會(huì)話工廠):好比是 DataSource,線程安全的,在應(yīng)用運(yùn)行期間不用重復(fù)創(chuàng)建多次,建議使用單例模式,作用:創(chuàng)建 SqlSession 對(duì)象。
SqlSession(會(huì)話):好比是 Connection,線程不安全的,每次使用開(kāi)啟新的 SqlSession 對(duì)象,使用完正常關(guān)閉,默認(rèn)使用 DefaultSqlSession。提供操作數(shù)據(jù)庫(kù)的增刪改查方法,可以調(diào)用操作方法,也可以操作 Mapper 組件。
Executor(執(zhí)行器):SqlSession 本身不能直接操作數(shù)據(jù)庫(kù),需要 Executor 來(lái)完成,該接口有兩個(gè)實(shí)現(xiàn):緩存執(zhí)行器(缺省)、基本執(zhí)行器。
MapperStatement:映射語(yǔ)句封裝執(zhí)行語(yǔ)句時(shí)的信息如 SQL、輸入?yún)?shù)、輸出結(jié)果。
原理圖那,什么是框架呢?
軟件框架(software framework),通常指的是為了實(shí)現(xiàn)某個(gè)業(yè)界標(biāo)準(zhǔn)或完成特定基本任務(wù)的軟件組件規(guī)范,也指為了實(shí)現(xiàn)某個(gè)軟件組件規(guī)范時(shí),提供規(guī)范所要求之基礎(chǔ)功能的軟件產(chǎn)品。
簡(jiǎn)而言之,框架就是制定一套規(guī)范或者規(guī)則(思想),大家(程序員)在該規(guī)范或者規(guī)則下工作。或者說(shuō)使用別人搭好的舞臺(tái)來(lái)做編劇和表演。
其實(shí)說(shuō)白了,框架就是一系列 jar 包,就是抄大神的作業(yè),直接拿他們已經(jīng)封裝好的類和接口過(guò)來(lái)用就好了。
在 Java 中,我們使用框架或者是別人已經(jīng)寫好的類的話,一般是直接引入 jar 包,就相當(dāng)于是我寫好了 Java 源文件,經(jīng)過(guò)編譯之后生成的一系列 class 字節(jié)碼文件,這樣也解決了到處 copy,有時(shí)還 copy 不全的問(wèn)題。
java運(yùn)行tips:查看官方文檔是學(xué)習(xí)一門新語(yǔ)言最有效的方法。
系列預(yù)告:Mybatis 系列 1:ORM 框架思想以及開(kāi)發(fā)前準(zhǔn)備
關(guān)注「阿澤學(xué)長(zhǎng)」總結(jié)
以上是生活随笔為你收集整理的mybatis连接oracle_Mybatis 系列 0:初恋Mybatis的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: access游戏库不显示 ea_英伟达上
- 下一篇: Linux-lrzsz命令[通俗易懂](