1. 程式人生 > >Mybatis初探——物件關係

Mybatis初探——物件關係

緊接著上一章 Mybatis初探——流程走一遍,得出了文末的結論。
其實我覺得,對於一個框架,最重要的研究透,其中的物件關係。
這個物件關係體現在:這個物件封裝了什麼,和其他物件的關係是什麼?一對一?一對多?……

這一章節開始研究mybatis框架中,各個物件之間的關係。

2. 相關物件

接上文,我們對剛剛過程中StaticSqlSource一波斷點操作,我們發現,和sql語句相關的一切資訊,都在MappedStatement物件裡。

2.1 MappedStatement

這個資料結構維護了單句sql語句的屬性。

2.2 Configuration

1.2.1executeForMany方法

中 ,有個方法,有這麼一句話

MappedStatement ms = configuration.getMappedStatement(statement);

這句話揭示了兩者之間的關係,我們可以點入configuration的getMappedStatement看一看,發現維護了一個map[String, MappedStatement] 其中 key是mapper中的方法名,xml中的方法的id。

這個configuration物件是和SqlSession有關的,應該是一個sqlSession對應一個configuration物件,我除錯發現,所有方法的id都在這個map[String, MappedStatement]裡,但又不僅僅是這樣。

稍微探究一下這個Map

但是我發現比較奇怪的一點,就是他會把同一個方法存多遍,至於具體原因我尚未明白。這裡我可以說一下我發現的事實。

假設我有2個mapperInterface,userInterface, fileInterface,裡面同樣都有一個insert方法。
在這個map的裡會出現下面3個鍵值對
userInteface.insert -> MappedStatement物件
fileInterface.insert -> MappedStatement物件
insert -> Configuration$StrictMap$Ambiguity

如果看到這個map的定義,會發現,他的型別是StrictMap,而且他定義了一堆其他的StrictMap,這個StrictMap原始碼非常好懂,就是在map的基礎上,增加了一個名稱衝突的情況。大致邏輯就是,預設情況下的key是 包名+方法名,但也會存個簡略版,即方法名,如果兩個方法名衝突了,這個物件就會成為一個Ambiguity物件,如果直接訪問到這種物件,這個map是會拋異常的,提示使用者用全名訪問這個map。

這樣的可能原因是:省時空複雜度?但可能提升也不是很大吧。。。這個原因還有待發掘

未完待續……

相關推薦

Mybatis初探——物件關係

緊接著上一章 Mybatis初探——流程走一遍,得出了文末的結論。 其實我覺得,對於一個框架,最重要的研究透,其中的物件關係。 這個物件關係體現在:這個物件封裝了什麼,和其他物件的關係是什麼?一對一?一對多?…… 這一章節開始研究mybatis框架中,各個

MyBatis 對映物件關係舉例(1)

單向many2one 單向many2one是最簡單的物件關係。但是在Mybatis中設計物件對映,需要摒棄在hibernate中的一些既有思路,更多的需要從SQL和效能角度考慮對映關係。先來看看物件的關係,在這裡使用Customer和Orders物件來完成單向的many2one。物件設計如下: //客戶物件

帶你手寫一個簡單的ORM框架領悟mybatis,hibernate,jpa物件關係對映的祕密

1、ORM介紹     物件關係對映     解決了一個問題: 物件模型和關係模型之間阻抗。     物件模型                     關係模型     物件名稱 Student             表           t_student     物件

mybatis實現物件之間的關係(一對一、一對多、多對多)以及mybatis的快取機制

一、業務需求中物件之間的關係在實際的開發當中,不僅要對錶與表之間的關係進行的詳細分析,也要針對在業務意義上物件之間的關係,通常的關係為:一對一、一對多、多對多;二、針對使用mybatis處理這三種關係1、業務模型說明這裡用用使用者表、訂單表、訂單詳情表、商品表著四張表之間,說

Spring IOC 應用 (2)維護物件關係

一,採用注入方式建立物件關係,Dependency Injection (DI)依賴注入 1,依賴注入:set方法的注入  在Java project Package1包內,新建Computer類,獲取get ,set方法 package Package1; public clas

$Django-setting.py配置 ,GET、POST深入理解,三件套,orm物件關係對映簡介

1 django中app的概念:  大學:----------------- 專案   資訊學院 ----------app01   物理學院-----------app02   ****強調***:建立的每一個app,都要在配置檔案中

MyBatis關聯對映關係,一對一,一對多,多對多

“縱許悠揚度朱戶,終愁人影隔窗紗” 前言 客觀世界中的物件很少有孤立存在的,例如班級,往往與班級的學生存在關聯關係,如果得到某個班級的例項,那麼應該可以直接獲取班級對應的全部學生。反過來,如果已經得到個學生的例項,那麼也應該可以訪問該學生對應的班級。這種例項之間的互相訪問就是關聯關係

使用物件-關係對映 ORM 系統中介軟體提升軟體開發效率及質量

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Hibernate第二篇之瞭解物件關係對映

        今天寫部落格的時候還是想對自己說幾句話,堅持真的是一件很難的事情,你看轉眼幾天過去了,渾渾噩噩的過去了,什麼都沒有幹,突然間就像是斷了線的風箏沒有了方向。我想要自己每個星期都要抽出一點時間來總結這周的學習進度,每天

ORM物件關係對映

ORM ORM 全拼Object-Relation Mapping.物件-關係對映. 主要實現模型物件到關係資料庫資料的對映. 比如:把資料庫表中每條記錄對映為一個模型物件 ORM圖解 // TODO 優點 :

mysql物件關係對映-----ORM

ORM(物件關係對映Object Relation Mapping)簡介 物件關係對映(Object Relational Mapping,簡稱ORM)模式是一種為了解決面向物件與關係資料庫存在的互不匹配的現象的技術。簡言之,ORM是通過使用描述物件和資料庫之間對映 的元資料,把物件模型

MySQL中Date和DateTime欄位與mybatis的對應關係

MySQL中Date和DateTime欄位與mybatis的對應關係 在MySQL欄位中有Date和DateTime型別,但是java中沒有DateTime型別。 解決辦法: (1)在mybatis插入資料時只要將實體的屬性設定成Timestamp就會對應mysql的DateTime型別

hibernate物件關係對映-註解

1.OneToOne關係對映 OneToOne即一對一對映,簡單來說就是一個主表student和一個從表stucreditcard,B表中存在一個外來鍵關聯到student表,這種關聯關係既可以以外來鍵的方式建立也可以是人工維護的關聯關係。 單向一對一關聯(不包括主鍵關聯

java面向物件,類與物件關係

1.java面向物件 面向物件是一種開發模式,但最早使用的開發模式是面向過程 面向過程:指的是針對某一個問題單獨提出解決方案以及程式碼開發 即是:面向過程的方法寫出來的程式是一份蛋炒飯 恰巧你不愛吃雞蛋,只愛吃青菜的話,那麼唯一的辦法就是全部倒掉,重新做一份青菜

Django核心:元類與orm物件關係對映

元類 python中所有東西都是物件,包括類也是物件,建立類的類就叫做元類,參考文章深刻理解元類 一個例項 def upper_attr(class_name,class_parents,class_attr): new_attr={} for name,valu

Hibernate二之物件關係

hibernate的關係配置中有兩個重要的配置項 reverse 和 cascade inverse:在雙向關聯的情況下面使用,單向關聯的時候不需要使用reverse配置。 cascade:用來設定相互關聯的物件之間的級聯操作。 一對一關係 ... 一對多的關係 一對多的關係

物件關係對映檔案(*.hbm.xml)詳解

物件關係對映檔案,即POJO 類和資料庫的對映檔案*.hbm.xml(對映檔案的副檔名為 .hbm.xml)。 POJO 類和關係資料庫之間的對映可以用一個XML文件來定義。 通過 POJO 類的資料庫對映檔案,Hibernate可以理解持久化類和資料表之間的對

mybatis請求物件包含List

<if test="mcomIdList != null and mcomIdList.size() > 0">                    AND tp.MCOM_ID IN                  <foreach item

Django中ORM物件關係的對映

ORM 面向物件的的方式去操作資料庫的建立表以及增刪改查等操作 優點:ORM使得通用的資料庫變得更加的簡單,不用去考慮所謂的SQL語句。 通過在Django中建立表來進一步解釋(這裡用到的資料庫是MySQL) 因為我們用到的是MySQL所以必須連線的是MySQL的

java 面向物件關係is-a has-a like-a區別

java 面向物件關係is-a has-a like-a 轉載自:https://blog.csdn.net/qq_23835497/article/details/75333350 1.is-a is-a,顧名思義,是一個,代表繼承關係。 如果A is-a B