继夫的玩弄H辣文的小说|女人与拘性猛交视频|精品欧美高清不卡高清|一起做亏亏的事情的视频|啦啦啦在线视频观看|望月直播下载ios版本|国产日韩欧美一区二区三区

10年開(kāi)發(fā)經(jīng)驗(yàn)程序員一文帶你把5種數(shù)據(jù)庫(kù)操作框架給直接理解透徹

數(shù)據(jù)庫(kù)操作框架
數(shù)據(jù)庫(kù)操作框架指的是第三方軟件操作數(shù)據(jù)庫(kù)的組件工具 。雖然數(shù)據(jù)庫(kù)操作框架根據(jù)不同的開(kāi)發(fā)語(yǔ)言而有所不同 , 但是它們所要解決的問(wèn)題是相同的 , 即建立連接、斷開(kāi)連接、發(fā)送操作指令(一般是SQL語(yǔ)句)和轉(zhuǎn)換返回結(jié)果 。
對(duì)于使用Java編寫(xiě)的后端應(yīng)用程序而言,比較流行的數(shù)據(jù)庫(kù)框架有JDBC、JDBC 、、JPA和 。
下面將對(duì)這5種數(shù)據(jù)庫(kù)操作框架進(jìn)行介紹和對(duì)比 。
1.JDBC
JDBC(Java)是Java操作數(shù)據(jù)庫(kù)的基本工具,它為多種數(shù)據(jù)庫(kù)提供統(tǒng)一的規(guī)范和接口 。通過(guò)使用JDBC,Java應(yīng)用程序可以通過(guò)使用相同的接口操作不同的數(shù)據(jù)庫(kù)(如MySQL、等) 。但實(shí)際上,JDBC不直接與數(shù)據(jù)庫(kù)通信,它只是作為Java程序與數(shù)據(jù)庫(kù)驅(qū)動(dòng)器之間的橋梁,如圖4.72所示 。
圖4.72 JDBC的工作原理
說(shuō)明:數(shù)據(jù)庫(kù)驅(qū)動(dòng)器是使用Java編寫(xiě)的組件 , 負(fù)責(zé)與其對(duì)應(yīng)的數(shù)據(jù)庫(kù)通信 。數(shù)據(jù)庫(kù)驅(qū)動(dòng)器本身是可以直接使用的,JDBC只是統(tǒng)一了多種驅(qū)動(dòng)器的使用方法 。使用JDBC操作數(shù)據(jù)庫(kù)之前,需要手動(dòng)指定數(shù)據(jù)庫(kù)驅(qū)動(dòng)器 。
JDBC可以在任意Java程序中使用,使用JDBC操作數(shù)據(jù)庫(kù)如代碼4.44所示 。
但是 , 不推薦在后端應(yīng)用程序中使用JDBC,因?yàn)镴DBC相當(dāng)原始,使用者需要編寫(xiě)大量代碼以完善對(duì)數(shù)據(jù)庫(kù)的操作 , 而在后端應(yīng)用程序當(dāng)中,使用其他數(shù)據(jù)庫(kù)框架的話,則能省去很多代碼(如建立連接、斷開(kāi)連接等) 。
代碼4.操作數(shù)據(jù)庫(kù)的代碼
#更新數(shù)據(jù)
set = where id=id_1

//指定MySQL數(shù)據(jù)庫(kù)驅(qū)動(dòng)
Class.(“com.mysql.jdbc.”);
//建立連接
= .(
//數(shù)據(jù)庫(kù)連接地址,xxx為具體的數(shù)據(jù)庫(kù)名
“jdbc:mysql://ip:port/xxx”,
“”, //用戶名
“”); //密碼
//編寫(xiě)查詢SQL語(yǔ)句,?為占位符 , 后續(xù)通過(guò)參數(shù)替換
= ” * fromwhere key = ?”;
= .();
//替換中的?占位符,1標(biāo)識(shí)第一個(gè)占位符
.(1, “王五”);
//執(zhí)行SQL語(yǔ)句
= .();
//處理查詢集合
while(.next()){
//對(duì)每條查詢結(jié)果的處理,根據(jù)字段獲取值的方法為.(“id”)
}
2.JDBC
JDBC 是針對(duì)相關(guān)框架(如 Boot、 MVC等)設(shè)計(jì)的數(shù)據(jù)庫(kù)操作框架,是JDBC的上層封裝 。通過(guò)使用JDBC,開(kāi)發(fā)者不需要關(guān)心數(shù)據(jù)庫(kù)連接過(guò)程(不需要寫(xiě)連接和斷開(kāi)數(shù)據(jù)庫(kù)的代碼),只需要在后端應(yīng)用程序的配置文件中配置數(shù)據(jù)庫(kù)連接信息即可實(shí)現(xiàn)自動(dòng)連接數(shù)據(jù)庫(kù) 。
JDBC只能在使用相關(guān)框架的后端應(yīng)用程序中使用 。JDBC 實(shí)現(xiàn)了自動(dòng)連接和斷開(kāi)數(shù)據(jù)庫(kù) , 省去了JDBC中手動(dòng)連接和斷開(kāi)數(shù)據(jù)庫(kù)的麻煩 。
與數(shù)據(jù)庫(kù)通信方面 , JDBC 保持了SQL語(yǔ)句的方式,但簡(jiǎn)化了JDBC的調(diào)用方式,如代碼4.45所示 。
代碼4. 操作數(shù)據(jù)庫(kù)的代碼
//編寫(xiě)查詢SQL語(yǔ)句,?為占位符,后續(xù)通過(guò)參數(shù)替換
=” * fromwhere key_1 = ? and key_2 = ?”;
//執(zhí)行SQL語(yǔ)句
List list = .(, “王五” , “50”);
//處理查詢集合
for (int i = 0; i < list.size(); i++) {
//轉(zhuǎn)換每條結(jié)果的數(shù)據(jù)類型
Map= (Map) list.get(i);
… //處理每條結(jié)果
}
3.
是一個(gè)高度自動(dòng)化的數(shù)據(jù)庫(kù)操作框架 , 是JDBC的上層封裝 。通過(guò)使用 , 數(shù)據(jù)庫(kù)中的表可以映射成Java的類,如代碼4.46所示 。開(kāi)發(fā)者只需要使用這些映射的類就可以操作數(shù)據(jù)庫(kù)(自動(dòng)生成SQL語(yǔ)句),如代碼4.47所示 。
說(shuō)明:根據(jù)數(shù)據(jù)庫(kù)的表映射成的Java類被稱為(實(shí)體)模型,使用的話,需要為每個(gè)需要操作的表都建立對(duì)應(yīng)的模型 。
模型可以使用相關(guān)工具自動(dòng)生成,不需要手動(dòng)填寫(xiě) 。
代碼4.46數(shù)據(jù)庫(kù)映射的Java類
//映射數(shù)據(jù)庫(kù)的user表,表中有id和info兩個(gè)字段
@
@Table(name=”user”)
class User {
@Id
@(=.)
@(name=”id”, =true, =false) Long id;
@(name=”info”)
info;
Long getId() {
id;
}
void setId(Long id) {
this.id = id;
}
() {
info;
}
void ( info) {
= info;
}
}
代碼4.操作數(shù)據(jù)庫(kù)的代碼
//獲取數(shù)據(jù)庫(kù)連接的,此處的有別于4.3.4小節(jié)中的
= .();
//編寫(xiě)查詢HQL語(yǔ)句,?為占位符,后續(xù)通過(guò)參數(shù)替換
= “fromwhere key_1 = ?”;
Query query= .(hql);
query.(0, “王五”);
//獲取結(jié)果
List= query.list();
//處理查詢結(jié)果
for (int i = 0; i < list.size(); i++) {
//把每條結(jié)果轉(zhuǎn)換成對(duì)應(yīng)的Java對(duì)象,其中User為代碼4.45中定義的數(shù)據(jù)庫(kù)映射成的
Java類
User user = (User) list.get(i);
… //處理每條結(jié)果
}
可以在任意Java程序中使用 。可以自動(dòng)連接和斷開(kāi)數(shù)據(jù)庫(kù)(通過(guò)XML配置文件設(shè)置) 。在與數(shù)據(jù)庫(kù)通信方面,可以根據(jù)映射關(guān)系自動(dòng)生成SQL語(yǔ)句 。為了增加自動(dòng)生成的SQL語(yǔ)句的靈活性,提供了HQL( Query )語(yǔ)句 。HQL語(yǔ)法與SQL類似,但功能上沒(méi)有SQL健全 。這種“自動(dòng)生成SQL語(yǔ)句”的做法其實(shí)是為了節(jié)省學(xué)習(xí)SQL的時(shí)間oracle數(shù)據(jù)庫(kù)安裝說(shuō)明oracle數(shù)據(jù)庫(kù)安裝說(shuō)明,并且希望以面向?qū)ο蟮木幊趟枷胧褂脭?shù)據(jù)庫(kù) 。但是在實(shí)際編程當(dāng)中,部分操作只能通過(guò)SQL語(yǔ)句實(shí)現(xiàn)(不能完全脫離SQL語(yǔ)句),而且當(dāng)需要操作的數(shù)據(jù)表較多時(shí),映射關(guān)系也會(huì)很復(fù)雜 。因此,目前的熱度正在慢慢減退 。
說(shuō)明:類似于這種把關(guān)系型數(shù)據(jù)庫(kù)中的表映射成Java類的數(shù)據(jù)庫(kù)操作框架,被稱為ORM框架(,對(duì)象-關(guān)系映射) 。比較流行的ORM框架有、等 。
4.JPA
JPA(JavaAPI,Java持久層API)是ORM框架的統(tǒng)一規(guī)范,為多個(gè)ORM框架提供統(tǒng)一的使用接口 。使用JPA的好處是,可以自由切換ORM框架而不影響代碼 。JPA與ORM框架的關(guān)系如圖4.73所示 。需要注意的是 , 在使用JPA之前,需要指定具體ORM框架和數(shù)據(jù)庫(kù)驅(qū)動(dòng) 。
圖4.73 JPA內(nèi)部結(jié)構(gòu)

10年開(kāi)發(fā)經(jīng)驗(yàn)程序員一文帶你把5種數(shù)據(jù)庫(kù)操作框架給直接理解透徹

文章插圖
10年開(kāi)發(fā)經(jīng)驗(yàn)程序員一文帶你把5種數(shù)據(jù)庫(kù)操作框架給直接理解透徹

文章插圖
5.
是一個(gè)不完全的ORM框架,是JDBC的上層封裝 。也需要把數(shù)據(jù)庫(kù)中的表映射成Java類,但是它不會(huì)根據(jù)Java對(duì)象自動(dòng)生成SQL語(yǔ)句 。使用作為數(shù)據(jù)庫(kù)操作框架的話,開(kāi)發(fā)者需要編寫(xiě)SQL語(yǔ)句模板,會(huì)根據(jù)指定的SQL語(yǔ)句模板和Java對(duì)象生成對(duì)應(yīng)的SQL語(yǔ)句,如代碼4.48所示 。
代碼4.操作數(shù)據(jù)庫(kù)的代碼
@
{
//定義SQL模板 , 其中#{}為待替換的參數(shù)@(” * fromwhere key_1 = #{} and key_2 =
#{}”)
//定義操作函數(shù),函數(shù)被調(diào)用后,會(huì)自動(dòng)把參數(shù)填充到SQL模板并執(zhí)行SQL語(yǔ)句,然后返回
結(jié)果 , 返回類型User為代碼4.46中定義的數(shù)據(jù)庫(kù)映射成的Java類
List (@Param(“”), @Param(“”)
);
}
//下面是調(diào)用上述查詢操作的示例
List= .(“王五”, “0”);
//處理查詢結(jié)果
for (int i = 0; i < list.size(); i++) {
//把每條結(jié)果轉(zhuǎn)換成對(duì)應(yīng)的Java對(duì)象 , 其中User為代碼4.46中定義的數(shù)據(jù)庫(kù)映射成的
Java類
User user = list.get(i);
… //處理每條結(jié)果
}
可以在任意Java程序中使用 。的出現(xiàn) , 保持了ORM框架“以面向?qū)ο缶幊趟枷胧褂脭?shù)據(jù)庫(kù)”的同時(shí),也避免了由于全自動(dòng)生成SQL語(yǔ)句造成的局限 。
6.數(shù)據(jù)庫(kù)操作框架的選擇
對(duì)于使用Java編寫(xiě)的后端應(yīng)用程序而言,數(shù)據(jù)庫(kù)框架一般是在、JPA(或等ORM框架)和中做出選擇 。而這三類數(shù)據(jù)庫(kù)操作框架的主要區(qū)別在于SQL構(gòu)造和返回結(jié)果轉(zhuǎn)換的方式上,而這些方式本身是很難辨出孰優(yōu)孰劣的,因此 , 只需要根據(jù)團(tuán)隊(duì)的使用習(xí)慣或偏好來(lái)選擇數(shù)據(jù)庫(kù)操作框架就可以了 。
7. Boot中使用數(shù)據(jù)庫(kù)框架的具體方法
這里以JDBC 為例,介紹在 Boot中使用數(shù)據(jù)庫(kù)框架的具體方法 。在 Boot中使用JDBC 需要三步,即引入JDBC 的依賴包、配置數(shù)據(jù)庫(kù)信息和在代碼中使用JDBC 操作數(shù)據(jù)庫(kù) 。
(1)引入JDBC 的依賴包 。需要在工程配置文件(build.)中添加JDBC 的依賴包,如代碼4.49所示 。
代碼4.49在build.中添加JDBC 依賴包…
{

//在中添加JDBC 的依賴包
'org..boot:-boot–jdbc'
'com.:druid:1.0.26' //數(shù)據(jù)庫(kù)連接池依賴
'mysql:mysql–java' //MySQL驅(qū)動(dòng)依賴

}

添加完依賴包之后,需要同步工程配置 。JDBC 的依賴包在同步工程配置后才會(huì)被下載和引入 。在 IDEA中 , 只需要單擊“同步”按鈕即可同步工程配置,如圖4.74所示 。
圖4.74 在 IDEA中同步build.配置
(2)配置數(shù)據(jù)庫(kù)信息 。配置數(shù)據(jù)庫(kù)連接信息需要在后端應(yīng)用程序的配置文件(默認(rèn)是.)中設(shè)置,如代碼4.50所示 , 其中,連接池的具體設(shè)置需要根據(jù)實(shí)際情況而定 。
說(shuō)明:頻繁地建立和斷開(kāi)數(shù)據(jù)庫(kù)連接是很耗資源的,連接池的作用是避免頻繁創(chuàng)建和釋放連接引起的大量性能開(kāi)銷 。
代碼4.50在配置文件中添加數(shù)據(jù)庫(kù)連接信息…
#設(shè)置數(shù)據(jù)庫(kù)連接地址 , xxx為具體的數(shù)據(jù)庫(kù)名
..jdbc-url=jdbc:mysql://ip:port/xxx
#設(shè)置用戶名
..=root
#設(shè)置密碼
..=
#指定MySQL數(shù)據(jù)庫(kù)驅(qū)動(dòng)
..-class-name=com.mysql.cj.jdbc.
#設(shè)置數(shù)據(jù)庫(kù)連接池,type為指定連接池的包,max-為最大激活連接數(shù),max-idle為
最大等待連接的數(shù)量,-size為初始狀態(tài)下建立的連接數(shù)
..type=com..druid.pool.
..max-=20
..max-idle=8
..-size=10

(3)使用JDBC 操作數(shù)據(jù)庫(kù)的代碼一般在Dao層中 , 具體代碼如代碼4.51所示 。
代碼4.51通過(guò)JDBC 操作數(shù)據(jù)庫(kù)
com..demo.dao;
//引用的類
org..jdbc.core.;
… //省略其他引用的類
@(“”)
class{
//獲取對(duì)象,此對(duì)象會(huì)被自動(dòng)注入
@
;
( ,){
try{
//SQL語(yǔ)句 , ?為占位符,后續(xù)通過(guò)參數(shù)替換
= ” INTO(?, ?)”;
//執(zhí)行SQL語(yǔ)句
int= .(, , );
if( > 0){
“”;
}else {
“fail”;
}
}catch( e){
“fail”;}
}
List get( key){
List= new List();
try{
//SQL語(yǔ)句,?為占位符,后續(xù)通過(guò)參數(shù)替換
=” * FROMWHERE key_1 = ? and key_2
= ?”;
//執(zhí)行SQL語(yǔ)句
= .(, “王五” , “50”);
}catch( e){
//失敗
}
;
}
}
本文給大家講解的內(nèi)容是大型網(wǎng)站架構(gòu)的技術(shù)細(xì)節(jié):后端架構(gòu)數(shù)據(jù)庫(kù)–數(shù)據(jù)庫(kù)操作框架下篇文章給大家講解的內(nèi)容是大型網(wǎng)站架構(gòu)的技術(shù)細(xì)節(jié):后端架構(gòu)數(shù)據(jù)庫(kù)-數(shù)據(jù)庫(kù)事務(wù)感謝大家的支持!
【10年開(kāi)發(fā)經(jīng)驗(yàn)程序員一文帶你把5種數(shù)據(jù)庫(kù)操作框架給直接理解透徹】本文到此結(jié)束,希望對(duì)大家有所幫助 。