《MyBatis用戶指南》----Part 1

     由於工作關係,用到iBatis2,發現它用起來非常方便,節省了很多bean的setter,getter和參數設置、preparedStatement的操作,不用在程序中拼接大量的sql語句,而且內置支持緩存,支持動態sql,怎麼個動態法呢?有點像jsp裏的if標籤那樣,功能極爲強悍,是jdbc的絕佳的替代品。3今年也出了,不過正式更名爲MyBatis了,其自帶的幫助文檔寫得很齊全了,但中文版的只有一個,看了一下,有的地方翻得很彆扭,有機器翻譯之嫌,所以有了自己翻譯一下的衝動,結合自己的使用經驗,相信會使讀者一看就懂。原文60來頁的篇幅,我有時間就會更新,爭取每次2、3頁,最少一頁。P number代表原文第幾頁。04年的時候,第一接觸iBatis,但當時英語太差,基本沒看懂怎麼用,覺得很複雜,所以知道英語不好的人學起來的痛苦,這也是我想翻譯的初衷,因爲它確實是個好東西,用過之後,你會發現,用jdbc是件多麼麻煩的事情。

 

  MyBatis下載地址: http://mybatis.org/java.html ,這裏有最新版的文檔和jar。

  學習MyBatis最好的辦法就是把自帶的例子做一遍,上手很快,單看文檔沒有什麼意義,這個文檔只是一個參考手冊,當你不知道某個方法怎麼用的時候看一下。需要說明的是,我有些地方我採取的是意譯的方法,不是直譯,因爲老外的思維習慣和語言習慣和中國人不太一樣,直接翻會很生硬,影響理解。

 

 

P5

MyBatis是什麼?

   MyBatis是支持定製sql語句、存儲過程、高級映射的一級類持久化框架。MyBatis消除了幾乎所有jdbc代碼和對參數及結果檢索的手工設置。MyBatis可以使用簡潔的xml或註解來映射原始類型、Map接口和Java POJO到數據庫記錄。

 

讓咱們開始吧
  每個MyBatis應用程序主要都是使用SqlSessionFactory實例的,一個SqlSessionFactory實例可以通過SqlSessionFactoryBuilder獲得。SqlSessionFactoryBuilder可以從一個xml配置文件或者一個預定義的配置類的實例獲得。

 

從xml構建SqlSessionFactory
  用xml文件構建SqlSessionFactory實例是非常簡單的事情。推薦在這個配置中使用類路徑資源(classpath resource),但你可以使用任何Reader實例,包括用文件路徑或file://開頭的url創建的實例。MyBatis有一個實用類----Resources,它有很多方法,可以方便地從類路徑及其它位置加載資源。如下:

  
  下面這個xml配置文件包含了若干MyBatis系統的核心的設置,包括獲得數據庫連接實例的數據源、定義事務邊界及控制事務的事務管理器。全部配置細節文件稍後在文檔中可以看到,這是一個簡單的例子:
 

 

  P6
  當然在xml配置文件中有很多其它的細節,但上面給出的是最重要的部分。注意用來校驗xml文檔的xml頭。environment元素的元素體包含了對事務管理器和連接池的環境配置。mappers元素包括了一個映射者的列表---包含sql源代碼和映射定義的xml文件。

 

不用xml的情況下創建SqlSessionFactory
    如果你更喜歡在Java中直接創建配置而不是xml,或者創建你自己定義的配置創建器,MyBatis有一個完善的配置類,用來提供和xml文件相同的配置。


   注意此時配置中添加了一個映射者類(Mapper)。映射者是包含了sql映射註解,不使用xml的類。但由於Java註解和MyBatis映射複雜性的一些限制,xml映射仍然在一些最高級的映射中使用(如:嵌套join映射)。因此,MyBatis會自動查找相應的xml,如果它存在的話,會自動加載(在這種情況下,會根據類路徑和BlogMapper.class的名字加載BlogMapper.xml)。後面有更多相應的介紹。

從SqlSessionFactory獲得一個SqlSession
  現在你有了SqlSessionFactory,正如名字隱含的喻義,你可以獲得一個SqlSession實例。SqlSession幾乎包含了所有在數據庫中執行sql命令的方法。你可以直接通過SqlSession實例執行映射的sql語句。如下例:

   雖然這個方法是可以的,並且和前面版本的MyBatis使用有些相似,但其實有一個更乾淨的辦法。使用正確描述給定語句的參數和返回值的接口(如BlogMapper.class),你可以執行更乾淨,類型更安全的代碼,而不會有字符串語義和轉換的錯誤發生。

 

P7
如:
 
 
  現在讓我們來探索一下這裏執行了什麼吧。
 
探索映射sql語句
  現在你可能會好奇什麼東西被SqlSession和映射者類執行了。映射sql語句是一個很大的話題,它可能會佔據這個文檔的大部分篇幅。但爲了讓你知道正在運行的是什麼東西,請看幾個例子。
 
  在前兩個例子中,語句可以通過xml或註解來定義。讓我們首先看一下xml。完整的功能點可以通過基於xml的映射語言來體會到,這也是MyBatis風靡多年的一個原因。如果你以前用過MyBatis,此概念對你來說很熟悉,現在有了很多xml映射文檔的改進,後面會有更明晰的介紹。下面是一個基於xml的映射語句,用於供SqlSession調用。
 
 
   對於一個簡單的例子,這看起來有點暈,其實不是。你可以按自己的意願,在一個映射者xml文件中定義很多映射語句,這是定義了xml頭和doctype聲明的好處。文件的其它部分一目瞭然,見名知意。它定義了映射語句的名字叫“selectBlog”,位於org.mybatis.example.BlogMapper的命名空間,它要求你使用映射語句的時候,要定義全限定的名字---org.mybatis.example.BlogMapper.selectBlog,正如下例中我們爲了前例所做的事情:
   Blog blog = (Blog) session.selectOne(
    "org.mybatis.example.BlogMapper.selectBlog", 101);
   
   注意看,這和調用一個全限定Java類很相似,並且這麼做是有理由的,這個名字可以通過和映射select語句匹配的名字、參數及返回類型,直接映射到一個和命名空間同名的映射者類。這讓你可以非常簡單地通過映射者接口調用,下面再次提一個這個例子:
   Blog blog = (Blog) session.selectOne(
    "org.mybatis.example.BlogMapper.selectBlog", 101);
    第二個方法有很多好處。首先,它不依賴於字符串語義,所以更安全,其次,如果你的IDE支持代碼完成,當IDE導航並發現這些sql語句的時候,它可以被用到。第三,你不必轉換返回類型,因爲BlogMapper有乾淨、類型安全的返回類型(還有一個類型安全的參數)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章