1. 程式人生 > >Mybatis框架簡介、搭建及核心元素講解

Mybatis框架簡介、搭建及核心元素講解

大家都知道當前比較流行的框架,如Spring、SpringMVC、Hibernate、Mybatis等框架,那今天咱們來講講當前比較流行的企業框架Mybatis。
首先先來介紹一下Mybatis這個框架:Mybatis是一個開源的資料持久化層框架,它內部封裝了通過JDBC訪問資料庫的操作,支援普通的SQL查詢,儲存過程和高階對映,幾乎消除了所有的JDBC程式碼和引數設定及結果集的檢索。
接下來說說Mybatis的優缺點:
優點:與JDBC相比,減少了50%以上的程式碼量,最簡單的持久化框架,小巧簡單易學,SQL程式碼從程式中徹底分離,可重用。提供了XML標籤,支援編寫動態SQL,提供對映標籤,支援物件與資料庫的ORM欄位對映。那麼什麼是ORM呢?

ORM(Object RelationMapping)即物件關係對映,是一種資料持久化技術,它在物件模型和關係型資料庫之間建立對應關係。
接下來說說Mybatis的缺點:
SQL語句編寫量大,對於開發人員有一定的要求,資料庫移植性差

Mybatis的環境搭建

首先我們的去Mybatis的官方網站(http://mybatis.org)下載最新Release版本的Mybatis
壓縮包解壓後可以看到一下的目錄結構

  • lib
  • LICENSE
  • mybatis-3.2.2.jar
  • mybatis-3.2.2.pdf
  • NOTICE

在根目錄下存放著mybatis-3.2.2.jar,為Mybatis的jar檔案,Mybatis-3.2.2.pdf為Mybatis官方使用文件
lib目錄下存放著編譯依賴包,接下來來介紹一下Mybatis編譯的依賴包

  • asm-3.3.1.jar:操作Java位元組碼的類庫
  • cglib-2.2.2.jar:用來動態整合Java類或實現介面
  • commons-logging-1.1.1.jar:用於通用日誌處理
  • javassist-3.17.1-GA。jar:分析、編輯和建立java位元組碼的類庫、
  • log4j-1.2.17.jar:日誌系統
  • slf4j-api-1.7.5.jar:日誌系統的封裝,對外提供統一的API介面
  • slf4j-log4j12-1.7.5.jar:slf4j對log4j的相應驅動,完成slf4j繫結log4j

其次是mybatis-3-mybatis-3.2.2.zip(Mybatis原始碼包):裡面是Mybatis的所有原始碼
目錄結構就講到這,至於具體建立Mybatis專案在這我就不多說了

接下來再介紹一下Mybatis的核心配置檔案configuration.xml
Mybatis核心配置檔案主要用於配置資料庫連線和Mybatis執行時所需要的各種特性,包含了設定和影響Mybatis行為的屬性
接下來說說配置檔案中的基本要素

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE configuration
    PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration>
    	<!-- 引入database.properties -->
    	<properties resource="database.properties"/>
    	<!-- 配置mybatis的log實現LOG4J -->
    	<settings>
    		<setting name="logImpl" value="LOG4J"/>
    	</settings>
    	<!-- 配置mybatis多套執行環境 -->
    	<environments default="development">
    		<environment id="development">
    			<!-- 配置事務管理,採用JDBC的事務管理 -->
    			<transactionManager type="JDBC"></transactionManager>
    			<!-- POOLED:mybatis自帶的資料來源,JNDI:基於Tomcat的資料來源 -->
    			<dataSource type="POOLED">
    				<property name="driver" value="${driver}"/>
    				<property name="url" value="${url}"/>
    				<property name="username" value="${username}"/>
    				<property name="password" value="${password}"/>
    			</dataSource>
    		</environment>
    	</environments>
    	<!-- 將mapper檔案加入到配置檔案中 -->
    	<mappers>
    		<mapper resource="POJO/UserMapper.xml"/>
    	</mappers>
    </configuration>

mybatis-config.xml檔案的幾個常用元素的作用如下:

  1. configuration:配置檔案的根元素節點
  2. properties:通過resource屬性從外部指定properties屬性檔案(database.properties),該屬性檔案描述資料庫連線的相關配置(資料庫驅動、連線資料庫的url、資料庫使用者名稱、資料庫密碼),位置也是在/resource目錄下。
  3. settings:設定Mybatis執行中的一些行為,比如此處設定Mybatis的log日誌實現為LOG4J,即使用log4j實現日誌功能。
  4. environments:配置Mybatis的多套執行環境,將SQL對映到多個不同的資料庫上,該元素節點下可以配置多個environment子元素節點,但是必須指定其中一個預設執行環境(通過default指定)。
  5. environment:配置Mybatis的一套執行環境,需指定ID、事務管理器、資料來源配置等相關資訊。
  6. mappers:作用是告訴Mybatis去哪裡找到SQL對映檔案(該檔案內容是開發者定義的對映SQL語句),整個專案可以有1個或者多個SQL對映檔案
  7. mapper:mappers的子元素節點,具體指定SQL對映檔案的路徑,其中resource屬性的值表述了SQL對映檔案的路徑(類資源路徑)

在這裡我稍微提一下注意事項:mybatis-config.xml檔案的元素節點是有一定的順序,節點位置若不按照順序排位的話,那麼XML檔案會報錯,至於元素的排列順序是:
1.properties

2.settings

3.typeAliases

4.typeHandlers

5.objectFactory

6.objectWrapperFactory

7.plugins

8.environments?

9.databaseIdProvider

10.mappers

常用元素

常用元素的順序大致就是這樣的,大家可以參考一下

有了Mybatis的核心配置檔案後,接下來就要準備持久化類和SQL對映檔案
那麼什麼是持久化類呢?持久化類是指其例項狀態需要被Mybatis持久化到資料庫中的類,在應用的設計中,持久化類通常對應業務中的業務實體,Mybatis一般採用POJO程式設計模型來實現持久化類,與POJO類配合完成持久化工作是Mybatis最常見的工作模式
既然都講到這了,我就再講講什麼是POJO吧!
POJO(Plain Ordinary Java Object):從字面上來說就是普通的Java物件,POJO類可以簡單地理解為符合JavaBean規範的實體類,它不需要繼承和實現任何特殊的Java基類或者介面,JavaBean物件的狀態儲存咋屬性中,訪問屬性必須通過對應的getter和setter方法

POJO實體類

接下里我用例項來向大家演示一下

    public class User {
    private Integer id; //id 
    private String userCode; //使用者編碼
    private String userName; //使用者名稱稱
    private String userPassword; //使用者密碼
    private Integer gender;  //性別
    private Date birthday;  //出生日期
    private String phone;   //電話
    private String address; //地址
    private Integer userRole;    //使用者角色
    private Integer createdBy;   //建立者
    private Date creationDate; //建立時間
    private Integer modifyBy;     //更新者
    private Date modifyDate;   //更新時間
    //省略getter,setter方法

SQL對映檔案

接下來,繼續進行SQL對映檔案的建立,完成與POJO(實體類)的對映,該檔案也是一個XML檔案,命名為UserMapper.xml,示例如下

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE mapper
    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="POJO.UserMapper">
    	<!-- 查詢使用者列表記錄數 -->
    	<select id="count" resultType="int">
    		select count(1) as count from smbms_user
    	</select>
    </mapper>

上面的程式碼就是所定義的SQL語句,其中元素的含義是
1.mapper:對映檔案的根元素節點,只有一個屬性namespace

  • namespace:用於區分不同的mapper,全域性唯一

2.select:表示查詢語句,是Mybatis最常用的元素之一,常用屬性如下

  • id屬性:該名稱空間下唯一識別符號
  • resultType屬性:表示SQL語句返回值型別,此處通過SQL語句返回的是Int資料型別

測試類

SQl對映檔案也弄好了,接下來就是建立測試類了,具體的實現步驟:
1.讀取全域性配置檔案:mybatis-config.xml

    String resource="mybatis-config.xml";
    //獲取mybatis-config.xml檔案的輸入流
    InputStream is=Resource.getResourceAsStream(resource);

2.建立SQLSessionFactory物件,此物件可以完成對配置檔案的讀寫

    SQLSessionFactory factory=new SqlSessionFactoryBuilder().build(is);

3.建立SQLSession物件,此物件的作用是呼叫mapper檔案進行資料操作,需要注意的是必須先將mapper檔案引入到mybatis-config.xml中才能起效

    int count=0;
    SqlSession sqlSession=null;
    sqlSession=factory.openSession();
    //Mybatis通過mapper檔案的namespace和子元素的id來找到對應的SQL,從而執行查詢操作
    count=sqlSession.selectOne("cn.smbms.dao.user.UserMapper.count");
    logger.debug("UserMapperTest count------>"+count);

4.關閉SqlSession物件

    sqlSession.close();

上面咱們已經成功地將Mybatis搭建出來了,下面再來說說Mybatis的核心要素

核心要素

首先介紹一下Mybatis的核心介面和類

  1. 每個Mybatis的應用程式都以一個SQLSessionFactory物件的例項為核心
  2. 首先獲取SqlSessionFactoryBuilder物件,可以根據XML配置檔案或Configuration類的例項構建物件
  3. 然後獲取SQLSessionFactory物件,該物件例項可以通過SqlSessionFactoryBuilder物件來獲得
  4. 有了SQLSessionFactory物件之後,就可以進而獲取SqlSession例項,SqlSession物件中完全包含以資料庫為背景的所有執行SQL操作方法,可以用該例項來直接執行已對映的SQL語句

SqlSessionFactoryBuilder

SqlSessionFactoryBuilder負責構建SQLSessionFactory,並且提供了多個build()方法的過載,分別是

  • InputStream(位元組流)
  • Reader(字元流)
  • Configuration(類)

SqlSessionFactoryBuilder的生命週期和作用域

SqlSessionFactoryBuilder的最大特點就是:用過即丟。一旦建立了SQLSessionFactory物件之後,這個類就不再需要存在了,因此SqlSessionFactoryBuilder的最佳範圍就是存在於方法體內,也就是區域性變數而已。

SqlSessionFactory

SqlSessionFactory簡單的理解就是建立SqlSession例項的工廠。所有的Mybatis應用都是以SQLSessionFactory例項為中心,SQLSessionFactory的例項可以通過SqlSessionFactoryBuilder物件來獲取

SqlSessionFactory的生命週期和作用域

SqlSessionFactory物件一旦建立,就會在整個應用程式中始終存在。沒有理由去銷燬或再建立它,並且在應用程式執行中也不建議多次建立SQLSessionFactory,怎麼說呢,你可以吧SqlSessionFactoryBuilder當做建立工廠的工人,而SQLSessionFactory就是建立好的工廠,一般來說工廠建立好了之後,工人就不需要了,而工廠會被保留下來,這就是它們的生命週期吧!

以上就是本文所介紹Mybatis的內容了,大致的核心都介紹完了,接下來你可以自己去消化一下,加油!