真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Mybatis查詢語(yǔ)句結(jié)果集的總結(jié)大全

簡(jiǎn)單查詢-resultType

我們提供的服務(wù)有:做網(wǎng)站、網(wǎng)站制作、微信公眾號(hào)開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、南開ssl等。為數(shù)千家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的南開網(wǎng)站制作公司

數(shù)據(jù)準(zhǔn)備

字段注釋
SNO學(xué)號(hào)
SNAME學(xué)生名字
SSEX性別
SBIRITHDAY生日
CLASS班級(jí)


create table TEST.STUDENT
(
 SNO varchar(3) not null,
 SNAME varchar(4) not null,
 SSEX varchar(2) not null,
 SBIRTHDAY datetime null,
 CLASS varchar(5) null
)

public class Student {
 private String SNO;
 private String SNAME;
 private String SSEX;
 private Date SBIRTHDAY;
 private String CLASS;
 
 
 ...
}

例子

按照返回?cái)?shù)據(jù)類型大致分為基礎(chǔ)數(shù)據(jù)類型,JavaBean 和 Map。其中雖然返回的結(jié)果行數(shù)有單條也有多條,對(duì)應(yīng)的接口返回類型是集合或者單個(gè)對(duì)象,但是在 xml 映射文件中,resultType 的值是相同的。

1、指定字段-基礎(chǔ)數(shù)據(jù)類型

接口類:


String querySingleStudent();

List queryAllStudent();

Mapper 文件:




2、Map,一般為 hashMap

接口類:


Map queryStudentMap();

List> queryAllStudentMap();
復(fù)制代碼Mapper 文件:



其中:

  • hashmap 為簡(jiǎn)寫,也可以使用 java.util.HashMap 全稱
  • 默認(rèn)情況下,結(jié)果集中值為 null 時(shí), 不會(huì)增加映射對(duì)象的 setter 方法, (map 對(duì)象時(shí)為 put)。該行為可以在 mybatis-config.xml 配置文件中設(shè)置
    覆蓋默認(rèn)設(shè)定。

3、JavaBean

接口類:


Student querySingleStudentBean();

List queryAllStudentBean();

Mapper 文件:




resultType="student" 為 Student.java 的別名,也可以是全限定名。別名在 mybatis-config.xml 配置文件中設(shè)置:


 
 ...

但是如果 JavaBean 文件很多,不想一個(gè)個(gè)指定,也可以使用 package 標(biāo)簽 設(shè)置mybatis自動(dòng)掃描,別名即為類名的小寫。


 

復(fù)雜查詢 resultMap

對(duì)于一般的查詢語(yǔ)句,resultType 足夠了。對(duì)于多表查詢等情況,就要請(qǐng)出 resultMap 了。

數(shù)據(jù)庫(kù)字段和 java 數(shù)據(jù)類型映射關(guān)系

數(shù)據(jù)庫(kù)字段類型 jdbcType 和 java 數(shù)據(jù)類型 并不是一一對(duì)應(yīng)的關(guān)系,而且不同數(shù)據(jù)庫(kù)類型也不盡相同。而 mybatis 將 TypeHandler 作為兩者之間的映射關(guān)系。大部分情況下都是沒有問題的,但是并非能覆蓋所有的情況,特殊情況下可以使用 resultMap 自定義這種映射關(guān)系。

舉個(gè)例子,數(shù)據(jù)庫(kù) LongVarchar 字段類型對(duì)應(yīng) java 中的 String 類型。但是在 DB2 數(shù)據(jù)庫(kù)中,查詢的 LongVarchar 類型的字段,在 mybatis 中被識(shí)別成 jdbcType 為 BLOB。有兩種解決方法,第一種是在 SQL 中對(duì)該字段使用 CAST 轉(zhuǎn)換為 VARCHAR(長(zhǎng)度)類型。另一種是使用 resultMap:


 


1、 select SNO,SNAME from test.STUDENT

在標(biāo)簽中

另外需要注意的是這種嵌套查詢對(duì)于大型結(jié)果集和列名并友好,存在 N+1 的問題,因?yàn)橄乱粭l SQL 會(huì)執(zhí)行 N 次去循環(huán)查詢,使用關(guān)聯(lián)查詢更合適。再者也可以開啟 mybatis 的懶查詢功能,嵌套的 SQL 不是一口氣順序執(zhí)行完,而是在使用的時(shí)候才會(huì)執(zhí)行下一條 SQL。例如執(zhí)行student.getScore().getSNO()才會(huì)執(zhí)行queryScore的 SQL。默認(rèn)情況下沒有開啟,需要在配置文件中設(shè)置

設(shè)置參數(shù)描述默認(rèn)值
lazyLoadingEnabled延遲加載的全局開關(guān),特定關(guān)聯(lián)關(guān)系中可通過設(shè)置 fetchType 屬性來(lái)覆蓋該項(xiàng)的開關(guān)狀態(tài)false
aggressiveLazyLoading當(dāng)開啟時(shí),任何方法的調(diào)用都會(huì)加載該對(duì)象的所有屬性。否則,每個(gè)屬性會(huì)按需加載false (true in ≤3.4.1)


也可以在標(biāo)簽中設(shè)置 fetchType = “l(fā)azy” 開啟懶加載,會(huì)覆蓋全局的參數(shù)設(shè)置。

嵌套結(jié)果集

對(duì)于多表關(guān)聯(lián)查詢,一般在 SQL 中使用別名來(lái)避免字段名的重復(fù)。mybatis 要做的是將別名正確的映射到 JavaBean 屬性上。



 
  
 


通過設(shè)置標(biāo)簽指定了表列名和屬性之間的映射關(guān)系。但這樣如果字段很多,會(huì)需要一一指定,標(biāo)簽提供了columnPrefix屬性,指定別名的前綴,這樣可以重用resultMap


 
 




一對(duì)多關(guān)系

除了一對(duì)一的關(guān)系,還有一對(duì)多的關(guān)系,比如這里一個(gè)學(xué)生Student 對(duì)應(yīng)多門課的成績(jī)。 一對(duì)多對(duì)應(yīng)的情況下要在 resultMap 中使用  標(biāo)簽。首先需要調(diào)整 JavaBean 文件中兩個(gè)表之間的關(guān)系。


private List score;
public List getScore() {
 return score;
}
public void setScore(List score) {
 this.score = score;
}

以嵌套結(jié)果集為例


 
 
  
 


注意到相比 association 多了一個(gè)屬性ofType,是用來(lái)表示 List 集合中的類型的。其他屬性的用法同 association 是一樣的。

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)創(chuàng)新互聯(lián)的支持。


網(wǎng)頁(yè)題目:Mybatis查詢語(yǔ)句結(jié)果集的總結(jié)大全
文章位置:http://weahome.cn/article/jppghg.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部