SSM框架開發web項目系列(二) MyBatis真正的力量

来源:http://www.cnblogs.com/young-z/archive/2017/12/04/7942159.html
-Advertisement-
Play Games

前言 上篇SSM框架環境搭建篇,演示了我們進行web開發必不可少的一些配置和準備工作,如果這方面還有疑問的地方,可以先參考上一篇“SSM框架開發web項目系列(一) 環境搭建篇”。本文主要介紹MyBatis的基礎內容,包括基本概念、開發步驟、使用實例等。說起MyBatis,工作中做過SSH/SSM相 ...


  前言

  上篇SSM框架環境搭建篇,演示了我們進行web開發必不可少的一些配置和準備工作,如果這方面還有疑問的地方,可以先參考上一篇“SSM框架開發web項目系列(一) 環境搭建篇”。本文主要介紹MyBatis的基礎內容,包括基本概念、開發步驟、使用實例等。說起MyBatis,工作中做過SSH/SSM相關Web開發的或者正在學習MyBatis的人或多或少都會接觸到類似“MyBatisHibernate有什麼區別?”,“MyBatisHibernate哪個更好?”,“為什麼Mybatis用的人越來越多?”等等...記得面試問題,區別問的最多,有次被面試官問到更喜歡用哪一個?明明已經知道這個公司介紹用的是SSM了,我答了個Hibernate,並說先用的也是Hibernate,或許初戀的感覺過於深刻吧...誰好誰差這種主觀性問題,我們不爭論,但是不容質疑的是兩者都為企業級開發做出巨大貢獻。同時,帶著問題和求知欲去學習往往會讓學習效率大大提高,因為許多問題在困惑你的同時,也為你指引了方向。就正如你得會用它,理解它了,才知道它在某方面為什麼會不足。

  MyBatis介紹

  早些時候,Apache有一個開源項目iBatis,後來改名了叫Mybatis,所以我們在網上有時候會看到一些早期的文章有時候看到iBatis,其實是同一個東西。同時,大家可以看下MyBatis源碼工程結構,如下圖,也能發現這個問題。

 

  MyBatis是一個半自動-ORM-持久層框架,下麵分別介紹這三個概念,如果瞭解的的可以直接跳過以節省時間。

  首先持久層比較好理解,就是針對資料庫的各種操作持久化層面,我們用jdbc也可以對資料庫中表進行增刪可查;WEB開發分層結構中,類似的還有業務層、控制層,MyBatis所做用的層,主要是用於與資料庫打交道。

  其次ORMObject Relational Mapping,對象關係映射)是一種技術,也是思想,如果用過jdbc的原生方式操作數據的應該都知道,其中各種獲取和更新的操作都已有相關的API了,但是這個過程實在太繁瑣,獲取連接、構造語句、發送SQL和接收數據、最後是處理數據和關閉流等等...實際的工作開發中,顯然不太適用。也許是有人想到,最麻煩的地方在於獲取數據後的處理過程,為了簡化這一過程,以Java中面向對象的思維構造了這一個ORM關係模型,即每張數據表對應一個Java類,數據表中每一條記錄分別對應Java類的一個實體對象,數據表中每個欄位對應Java類中的一個屬性,這樣一來Java中一切皆對象,資料庫里的東西既然已經對應映射到Java概念中來,我們再用面向對象的思維去操作資料庫,就大大簡化了開發流程。

  最後,解釋半自動,既然有半自動,應該就有全自動,例如Hibernate就是一個全自動的ORM持久層框架,它在建立資料庫和bean對象關係映射模型的同時,提供的api還會幫助我們自動生成和發送SQL語句去操作資料庫,而MyBatis略有不同,它也建立了對象關係映射模型,但是並不會幫助我們生成SQL語句,需要我們自己寫SQL語句,不少人可能會覺得別人都可以幫你自動生成了這還要自己寫,不是沒事找事嗎?但是恰恰相反,很多人因為這點喜歡上了MyBatis,靈活且透明,自己動手不解釋。

  MyBatis重要對象

  關於MyBatis的學習使用過程中,依次要註意的四個對象有SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession、Mapper實例。

  1.SqlSessionFactoryBuilder

  SqlSessionFactoryBuilder是一個類,裡面定義許多重載的build方法,通過build方法可以獲取SqlSessionFactory對象,即SqlSession工廠實例

  2.SqlSessionFactory

  SqlSessionFactory是一個介面,看名字應該能明白是SqlSession工廠,裡面定義了許多重載的openSession方法,用於獲取SqlSession對象

  3.SqlSession

  SqlSession是一個很關鍵的介面,通過它我們可以執行發送SQL語句、獲得Mapper實例等等。以它的第一個方法為例, <T> T selectOne(String statement); 方法名很容易理解,獲取數據表的一條記錄(在Java中對應返回一個實體類對象),前面的泛型對應的就是實體類的類型,關於String類型的參數statement,用過原生的JDBC操作資料庫的應該不會陌生,在使用JDBC過程中,有個Statement對象,通過該對象的類似 ResultSet executeQuery(String sql) throws SQLException; 等方法可以發送SQL語句,方法里的字元串類型參數 sql 就是我們要發送的sql語句,而前面的String statement 同樣也是代表我們的sql語句總的來說,selectOne中的statement代表sql語句,JDBC中的statement是能發送sql語句的對象實例,不可混淆。

  4.Mapper實例

  Mapper實例就是我們在dao層定義的定義的介面實例,我們在service層中註入dao對象時關聯的是該介面名,而實際上我們拿到了該介面實例也就是Mapper實例。而我們在web開發過程中,持久層的相關方法都定義在Mapper介面中,所以四個對象里我們在前面環境搭建篇比較容易發現的也就是這個Mapper實例所屬介面,即PersonMappr介面。Mapper實例可以通過SqlSession的getMapper方法獲得。

  MyBatis配置文件

  

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 對象調用某個函數,並將所得結果做為參數,傳遞給另一個函數。而接受參數的函數本身也能夠調用前一個函數。 讓參數接受者去除該項參數,並直接調用前一個函數。 ...
  • 一、視圖函數: 請求對象 request: 1、HttpRequest.body: 請求原數據 2、HttpRequest.path: 一個字元串,表示請求的路徑組件(不含功能變數名稱) 3、HttpRequest.method 4、HttpRequest.GET 5、HttpRequest.POST 6、 ...
  • 實現分頁的效果 1> 分頁的實現的業務邏輯 1->每個頁面顯示N條數據,總的數據記錄數M,則分頁的個數為M%N==0?M/N:M/N+1; 2->頁面渲染分頁的html部分 3>切換頁數,以及輸入參數,後臺處理,重新獲取新的滿足條件的數據 4>分頁的方法,js分頁,以及後臺分頁(下麵的分頁就是實現後 ...
  • 在PHP中,變數是$+變數名,變數名遵循標識符的命名規則,可以以字母、下劃線開頭,可以由數字、下劃線、字母組成合法的變數名。 變數聲明 ======== 所有變數在使用之前應該進行聲明,而且最好帶上註釋,雖然在PHP中可以不顯示聲明變數。聲明變數之後,可以為變數進行賦值;變數的賦值有兩種類型值賦值和 ...
  • 2017最後一個月,當全世界都是各種年度總結,獎勵的時候,IT博客圈似乎已經被人遺忘。而,那些還在半夜,加班寫博客,分享自己經驗的熱心程式猿們,依然,吭哧吭哧的寫著,為了幾個贊,為了一個留言就開心一笑,瞬間滿足。 隔壁的辦公樓里的新手百度了一下,發現了這些原創博客,順利的解決了他的問題,然後,就開心 ...
  • MVC-VC 1> 新建一個user.go控制器,其代碼如下: 2> 在路由器文件router.go中添加路由配置,其代碼如下: 3> 在views文件夾下添加2html頁面,分別為home.html,edit.html 4> Home.html頁面的代碼如下: 5>edit.html頁面如下: 6 ...
  • 慕課網實戰教程後端:1、java c++演算法與數據結構2、java Spring Boot帶前後端 漸進式開發企業級博客系統3、java Spring Boot企業微信點餐系統4、java Spring Security開發安全的REST服務5、Java Spring帶前後端開發完整電商平臺6、Ja ...
  • 在python進行像b = a這樣的賦值時,只會創建一個對a的新引用,使a的引用計數加1,而不會創建新的對象: 這樣,當引用的對象是可變對象的時候(列表,字典,可變集合等),會產生意料之外的行為: 因為a和b引用的是同一對象,改變其中一個,另外一個也會隨之改變。當我們想建立一個副本而不是引用時,可以 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...