Mybatis框架簡介、搭建及核心元素揭祕

你們都知道當前比較流行的框架,如Spring、SpringMVC、Hibernate、Mybatis等框架,那今天我們來說講當前比較流行的企業框架Mybatis。 首先先來介紹一下Mybatis這個框架:Mybatis是一個開源的數據持久化層框架,它內部封裝了經過JDBC訪問數據庫的操做,支持普通的SQL查詢,存儲過程和高級映射,幾乎消除了全部的JDBC代碼和參數設置及結果集的檢索。 接下來講說Mybatis的優缺點: 優勢:與JDBC相比,減小了50%以上的代碼量,最簡單的持久化框架,小巧簡單易學,SQL代碼從程序中完全分離,可重用。提供了XML標籤,支持編寫動態SQL,提供映射標籤,支持對象與數據庫的ORM字段映射。那麼什麼是ORM呢?java

ORM(Object RelationMapping)即對象關係映射,是一種數據持久化技術,它在對象模型和關係型數據庫之間創建對應關係。 接下來講說Mybatis的缺點: SQL語句編寫量大,對於開發人員有必定的要求,數據庫移植性差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項目在這我就很少說了api

接下來再介紹一下Mybatis的核心配置文件configuration.xml
Mybatis核心配置文件主要用於配置數據庫鏈接和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文件的幾個經常使用元素的做用以下:app

  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.settingside

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的內容了,大體的核心都介紹完了,接下來你能夠本身去消化一下,加油!

相關文章
相關標籤/搜索