1. 程式人生 > >【Mybatis進階】-- mybatis架構

【Mybatis進階】-- mybatis架構

1.什麼是mybatis

  MyBatis是一個優秀的持久層框架,它對jdbc的操作資料庫的過程進行封裝,使開發者只需要關注 SQL 本身,而

不需要花費精力去處理例如註冊驅動、建立connection、建立statement、手動設定引數、結果集檢索等jdbc繁雜的

過程程式碼,通過mybatis提供的對映方式,自由靈活的生成滿足需要的sql語句。

  Mybatis通過xml或註解的方式將要執行的各種statement(statement、preparedStatemnt、CallableStatement)

配置起來,並通過java物件和statement中的sql進行對映生成最終執行的sql語句,最後由mybatis框架執行sql並將

結果對映成java物件並返回。

2.mybatis架構圖

3.架構解析

1、SqlMapConfig.xml

  mybatis的全域性配置檔案,名稱不固定,開發者可自定義。SqlMapConfig.xml中配置了資料來源、事務等mybatis執行

環境、配置對映檔案(配置sql語句)。

  mapper.xml檔案即sql對映檔案,檔案中配置了操作資料庫的sql語句。此檔案需要在SqlMapConfig.xml中載入。

2、SqlSessionFactory

  會話工廠,根據SqlMapConfig.xml配置檔案建立。跟spring整合後,通過單例模式管理,即會話工廠一旦建立,

只使用一個例項。 作用即建立SqlSession

3、SqlSession

  會話,是一個面向開發者的介面。在sqlsession內部提供了很多操作資料庫的方法,如返回單個物件的selectOne

返回多個物件的selectList。

  需要注意的是sqlsession不是執行緒安全的,不能共享使用。最佳應用場合為方法體內,定義成區域性變數使用。

每個執行緒應該有它自己的sqlsession例項,開啟一個會話使用完畢後立即關閉。

4、Executor

  執行器,也是一個介面,包含兩個實現,一個是基本執行器、一個是快取執行器

  作用:SqlSession內部通過執行器操作資料庫

5、mapped statement

  底層封裝物件,它包裝了mybatis配置資訊及sql對映資訊等。mapper.xml檔案中一個sql對應一個Mapped

Statement物件,mapper.xml中sql的id即是Mapped statement的id。

  作用:對操作資料庫儲存封裝,包括 sql語句,輸入引數、輸出結果型別

6、輸入引數對映

  輸入引數對映就是jdbc程式設計中對preparedStatement設定引數。Mapped Statement對sql執行輸入引數進行定義,

包括HashMap、基本型別、pojo。Executor通過Mapped Statement在執行sql前將輸入的java物件對映至sql中。

7、輸出結果對映

  輸出結果對映過程相當於jdbc程式設計中對結果的解析處理過程。Mapped Statement對sql執行輸出結果進行定義,包

括HashMap、基本型別、pojo。Executor通過Mapped Statement在執行sql後將輸出結果對映至java物件中。

4.與hibernate的異同

1)hibernate

  hibernate是一個標準ORM框架,入門門檻高,sql語句自動生成,不需要程式設計師自己手動編寫。也正是由於

hibernate對sql語句的封裝,使得對sql語句的優化和修改比較困難。

適用場景:需求變化小的中小型專案。例如後臺管理系統OA、ERP、ORM。。。

2)mybatis

  支援原生sql,程式設計師只需專注編寫sql語句,對sql修改和優化比較方便。mybatis是一個半自動化的ORM框架,程

序員可自己寫sql,也可利用mybatis對映機制自動生成。

適用場景:需求變化較多的專案。例如網際網路專案。

  本篇博文對mybatis的框架和內部實現機制做了詳細介紹,接下來會通過一個入門程式對本篇內容做一個簡單

實踐,歡迎繼續關注。


相關推薦

Mybatis-- mybatis架構

1.什麼是mybatis   MyBatis是一個優秀的持久層框架,它對jdbc的操作資料庫的過程進行封裝,使開發者只需要關注 SQL 本身,而 不需要花費精力去處理例如註冊驅動、建立connect

Android(3)Android圖像處理

progress chang etc geo xtend static ogr arch 取出 1. 概念 色調/色相:物體傳遞的顏色 飽和度:顏色的純度,從0(灰)到100%(飽和)來進行描寫敘述 亮度/明度:顏色的相對明暗程度 2. 調整圖像小Demo 創建一個

AndroidJunit單元測試環境搭建以及簡單有用

rar theme 選擇 http 技術分享 才幹 ack package family 單元測試的目的 首先。Junit單元測試要實現的功能,就是用來測試寫好的方法是否可以正確的運行,一般多用於對業務方法的測試。 單元測試的環境配置 1.在Andro

Android 圖片載入框架之Glide

生活 cannot 簡單介紹 style codes 詳細 npr 濾鏡 ive 簡單介紹 在泰國舉行的谷歌開發人員論壇上,谷歌為我們介紹了一個名叫 Glid

MySQLKeepalived1.4.0結合MySQL 5.7.19實現主備高可用

port 腳本 amp ado roo ins log openss net 1、基本環境 數據庫安裝及主備同步接上一篇文章:http://blog.51cto.com/13946719/2309514JDK 1.8_171MySQL 5.7.19CentOS 7.4Kee

JavaScript深入理解JavaScript中ES6的Promise的作用並實現一個自己的Promise

  1.Promise的基本使用 1 // 需求分析: 封裝一個方法用於讀取檔案路徑,返回檔案內容 2 3 const fs = require('fs'); 4 const path = require('path'); 5 6 7 /** 8 * 把一個回

Android 仿抖音系列之翻頁上下滑切換視訊(四)

大家好,我們又見面了。這是這個系列的第四篇,在這篇文章之前,建議可以先看下之前系列的文章,為了節省篇幅,之前詳細說過的地方,這裡就不再詳細描述了,下面是目錄: 【Android 進階】仿抖音系列之翻頁上下滑切換視訊(一) 【Android 進階】仿抖音系列之列表播放視訊

Android 仿抖音系列之列表播放視訊(三)

在上一篇【Android 進階】仿抖音系列之列表播放視訊(二)中,我們實現列表播放視訊,這一篇我們來對其做些優化。 【Android 進階】仿抖音系列之翻頁上下滑切換視訊(一) 【Android 進階】仿抖音系列之列表播放視訊(二) 【Android 進階】仿抖音

Android 仿抖音系列之列表播放視訊(二)

上一篇中,我們實現了仿抖音上下翻頁切換視訊的效果,詳見【Android 進階】仿抖音系列之翻頁上下滑切換視訊(一),這一篇,我們來實現抖音列表播放視訊。 【Android 進階】仿抖音系列之翻頁上下滑切換視訊(一) 【Android 進階】仿抖音系列之列表播放視訊(二)

Android 仿抖音系列之翻頁上下滑切換視訊(一)

最近公司在做個短視訊的專案,其中借鑑了很多抖音的設計,其中就有抖音的上下滑切換視訊。 【Android 進階】仿抖音系列之翻頁上下滑切換視訊(一) 【Android 進階】仿抖音系列之列表播放視訊(二) 【Android 進階】仿抖音系列之列表播放視訊(三)

Android 仿抖音系列之視訊預覽和錄製(五)

大家好,又見面了。在前幾篇中,我們通過2種方式實現了仿抖音的翻頁切換視訊,仿抖音列表播放視訊功能,這一篇,我們來說說視訊的錄製。 【Android 進階】仿抖音系列之翻頁上下滑切換視訊(一) 【Android 進階】仿抖音系列之列表播放視訊(二) 【Android

面試React元件設計模式(一)

完整程式碼可檢視github,這裡擷取的程式碼不影響理解就行。 頁面效果可檢視gitPage 首先編寫一下我們的公共元件 單個商品元件(商品元件:展示價格、購買數量) goodsItem.js // 單個商品 import React from 'react'; const GoodsItem =

CSSbox-shadow 與 filter:drop-shadow 詳解及奇技淫巧

box-shadow 在前端的 CSS 編寫工作想必十分常見。但是 box-shadow 除去它的常規用法,其實還存在許多不為人知的奇技淫巧。 box-shadow 常規用法 說到 box-shadow ,首先想到的必然是它能夠生成陰影,所以稱之為 shaodow ,簡單看看它的語法:

RedisRedis哨兵機制

1、哨兵機制的簡介        有了主從複製的實現以後,如果想對主伺服器進行監控,那麼在redis2.6以後提供了一個"哨兵"的機制。顧名思義,哨兵的含義就是監控redis系統的執行狀態。可

Android 一鍵清理

一鍵清理流程圖 系統快取分析 Android 已安裝 app /data/data/packagename/cache 資料夾和 /sdcard/Android/data/packagename/cache 資料夾組成 原生設定(Settings

Android實現各種各樣的Tab切換效果

一、View  + ViewPager 使用ViewPager和View實現切換效果,效果如下: 主佈局介面: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

python自定義庫函式

在python使用過程中,在不同的專案裡,常常會出現頻繁地自定義同一個函式的情況。為了解決這個問題,我們可以選擇建立一個自定義的庫,並將其新增到系統路徑中 具體操作如下: 在任意位置新建一個專案my_libs,並在其中新建python檔案my_lib1和m

Android Android自定義系列:邊緣凹凸的卡劵效果

所謂前人栽樹,後人乘涼,在此感謝博主的貢獻。 原文:邊緣凹凸的卡劵效果 先上效果圖: 我實現的效果和原博主實現的效果是不一樣的,我是左右邊緣凹凸,而博主是上下邊緣凹凸。其實理解了原理,哪個邊緣實現這個效果都是可以的。 實現原理: 直接

pythonmap, filter, reduce用法

map map會將一個函式對映到一個輸入列表的所有元素上面。 map(function_to_apply, list_of_inputs) map可以讓我們用一種簡單而漂亮得多的方式來實現。 items = [1,2,3,4,5] squared = lis

pythonlambda表示式

參考連結:https://github.com/eastlakeside/interpy-zh/blob/master/Lambdas/README.md lambda表示式是一行函式 lambda函式原型: lambda 引數:操作 例子: add = lam