MyBatis--優秀的持久層框架

爪哇島的流浪漢發表於2018-07-16


1.MyBatis
    什麼是MyBatis,MyBatis最早源自Apache基金會的一個開源專案
    iBatis,2010年專案由Apache software foundation遷移Google
    Code,改名為MyBatis

    MyBatis是支援普通SQL查詢,儲存過程和高階對映的優秀持久層
    框架,其使用簡單的XML配置定義對映關係,將實體類物件對映成
    資料庫中記錄

    MyBatis工作原理
    1)載入配置
        MyBatis將SQL的對映資訊載入為一個個的MappedStatement
        物件(包括傳入的引數對映配置,執行的sql語句,結果對映配
        置),將其儲存在記憶體中    
    
    2)SQL解析
        當API介面層收到呼叫請求時,會接收到傳入SQL的ID和傳入的
        引數物件(可以是Map,實體類或者基本資料型別),MyBatis
        會根據SQL的ID找到相對應的MappedStatement,然後根據傳
        入的引數物件對MappedStatement進行解析,解析後可以得到
        最終要執行的sql語句和引數

    3)SQL執行
        將最終得到的sql語句和引數拿到資料庫進行執行,得到運算元據
        庫的結果

    4)結果對映
        將運算元據庫的結果按照對映配置進行轉換,可以轉換成Map,
        實體類或者基本資料型別,將轉換結果返回

    MyBatis框架API

    SqlSessionFactoryBuilder
    此物件負責根據MyBatis主配置檔案SqlMapConfig.xml構建
    SqlSessionFactory物件    

    SqlSessionFactory
    每一個MyBatis的應用程式都以一個SqlSessionFactory物件為核心    
    此物件負責建立SqlSession物件
    
    SqlSession    
    此物件包含所有執行sql語句操作的方法,用於執行已對映的sql語句

    MyBatis配置檔案
    1)SqlMapConfig.xml(1個)
        主配置檔案,用於指定資料庫連線引數
    2)SqlMapper.xml(N個)
        對映檔案,用於定義SQL語句對映資訊
        
2.MyBatis基本應用
    1)搭建MyBatis技術環境
        為工程新增MyBatis開發包和資料庫驅動包
        在src下新增MyBatis的主配置檔案SqlMapConfig.xml
        配置SqlMapConfig.xml,指定資料庫連線引數
        利用MyBatis提供API,獲取SqlSession物件

    2)獲取SqlSession物件
        String path = "主配置檔案URL";
        Reader reader = 
            Resources.getResourceAsReader(path);
            
        //構建SqlSessionFactory物件
        SqlSessionFactoryBuilder ssfb = 
            new SqlSessionFactoryBuilder();
            
        SqlSessionFactory ssf = ssfb.build(reader);
        
        //建立SqlSession物件
        SqlSession ss = ssf.openSession();

    3)利用SqlSession實現CRUD操作
        根據資料庫表編寫實體類
        編寫SqlMapper.xml對映檔案,定義SQL操作和對映資訊
        獲取SqlSession物件,執行增刪改查操作
        提交事務(DML)
        釋放SqlSession物件資源

    返回Map型別查詢結果
    
    select e.*,d.* from emp e inner join dept d
        on e.deptno = d.deptno where e.empno = 1001
        
    select e.*,d.* from emp e inner join dept d
        on e.deptno = d.deptno and e.empno = 1001    
        
    resultMap對映定義
    在對映檔案定義<select>操作時,如果查詢結果集欄位名和實體類
    的屬性名不一致,則需要使用<resultMap>標籤顯示指定對映關係

    注意:不一致的問題,如果結果集的欄位名和實體類的屬性名全部
    不一致,且在結果對映時定義為resultType,則不會建立實體物件
    但是如果只是部分不一致,則會建立實體物件,並且自動關聯名字
    一致的屬性
    
    Mapper對映器
    Mapper對映器是開發者建立繫結對映語句的介面,對映器介面的
    例項物件可以從SqlSession中獲得

    注意:
    Mapper介面名稱必須和對應的對映檔案中的namespace一致
    Mapper介面中方法名必須和對映檔案中SQL的ID一致

        

        

    


    
        


    

相關文章