MyBatis核心組件(配圖詳解&代碼實現)

MyBatis的核心組件分爲4個部分 SqlSessionFactoryBuilder(構造器):根據xml或java代碼生成SqlSessionFactory。 SqlSessionFactory(工廠接口):使用它生成Sqlsession,工廠模式下生成。 Sqlsession(會話):能夠發送SQL執行返回結果和獲取Mapping的接口。在大多數開發中,咱們使用MyBatis提供的 SQL Mapping 接口編程技術,這提升了可讀性和可維護性。 SQL Mapping(映射器):由一個java接口和XML文件(或者是@註解)構成,生成了對應SQL與映射的規則,發送SQL執行並返回結果。

SqlSessionFactory 如何使用MyBatis,首先就是xml或java代碼生成SqlSessionFactory,MyBatis給咱們提供了SqlSessionFactoryBuilder(構造器),org.apache.ibatis.session.Configuration這個類做爲引導,使用的是Builder模式。java

在MyBatis中有兩種形式生成SqlSessionFactory,一種是XML,一種是java代碼實現。這裏小編推薦使用XML的形式,也是大多數企業開發的選擇。配置XML或java代碼後,MyBatis會讀取配置文件,經過Configuration類對象構建MyBatis的上下文。spring

須要提醒你們的是SqlSessionFactory是一個接口,而它的實現類爲SqlSessionManager和DefaultSqlSessionFactory兩個類。sql

通常用DefaultSqlSessionFactory,DefaultSqlSessionFactory在多線程中,而它的具體實現依靠DefaultSqlSessionFactory。數據庫

使用XML構建SqlSessionFactory  主要分爲兩類:一類是基礎配置文件,一般只有一個,主要配置最基礎的上下文參數和運行環境:另外一類爲映射文件,主要配置映射關係、SQL、參數等。apache

基礎配置文件:通常命名爲mybatis-config.xml,放在工程類路徑下,下面看一個實例:

<mappers>
    <!-- 註冊userMapper.xml文件,
    userMapper.xml位於com.feiyu.mapping這個包下,因此resource寫成com/feiyu/mapping/userMapper.xml-->
    <mapper resource="com/feiyu/mapping/userMapper.xml"/>
</mappers>
複製代碼

元素:定義一個別名,表明com.feiyu.POJO.User這個類,在上下文中科院代替全限定名使用。編程

元素:默認爲開發者,裏面的是配置事務管理器,採用JDBC管理器方式,使用                                               配置數據庫,type="POOLED"爲MyBatis內部提供的鏈接池方式。緩存

元素:表明引入的那些映射器。

//mybatis的配置文件
    String resource = "mybatis-config.xml";
    //使用類加載器加載mybatis的配置文件(它也加載關聯的映射文件)
    InputStream inputStream = Test1.class.getClassLoader().getResourceAsStream(resource);
    //構建sqlSession的工廠
    SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    //使用MyBatis提供的Resources類加載mybatis的配置文件(它也加載關聯的映射文件)
    //Reader reader = Resources.getResourceAsReader(resource);
    //構建sqlSession的工廠
    //SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
    //建立能執行映射文件中sql的sqlSession
    SqlSession session = sessionFactory.openSession();
    /*
     * 映射sql的標識字符串,
     * com.feiyu.mapping.userMapper是userMapper.xml文件中mapper標籤的namespace屬性的值,
     * getUser是select標籤的id屬性值,經過select標籤的id屬性值就能夠找到要執行的SQL
     */
    String statement = "com.feiyu.mapping.userMapper.getUser";//映射sql的標識字符串
    //執行查詢返回一個惟一user對象的sql
    User user = session.selectOne(statement, 1);
    System.out.println(user);
複製代碼

讀取mybatis-config.xml,而後經過SqlSessionFactoryBuilder的Builber方法建立SqlSessionFactory。session

SqlSession 做用至關於一個JDBC中的Connection對象,表明一個鏈接資源的啓用。有如下三個做用:mybatis

獲取Mapping接口 發送SQL給數據庫 控制數據庫事務

SqlSession sqlSession = SqlSessionFactory.openSession();多線程

下面咱們來看看SqlSession在操做事務時的僞代碼:

//定義SqlSession SqlSession sqlSession = null; try{ //打開SqlSession會話 sqlSession = SqlSessionFactory.openSession(); sqlSession.commit();//提交事務 }catch (Exception ex) { sqlSession.rollback();//回滾事務 }finally { //在finally語句中確保資源被順利關閉 if (sqlSession != null) { sqlSession.close(); } }

使用commit方法提交事務,和使用rollback方法回滾事務。

注意:數據庫的鏈接資源使用後要及時的關閉它,若是不及時關閉,數據庫的鏈接資源就會很快被消耗光,整個系統將陷入癱瘓狀態,因此這裏使用finally語句使其順利關閉。

映射器 在MyBatis中,映射器尤其的重要,也是最複雜的組件,它是由一個接口和對應的XML文件(或@註解)構成。

有如下4個做用:

描述映射規則 配置緩存 提供SQL語句,配置SQL參數類型,返回類型,緩存刷新等 提供動態SQL  本文只實現XML文件形式映射器方式,也是大多數開發的選擇,下面首先定義一個POJO:


package com.feiyu.POJO; /**

  • @author gacl

  • users表所對應的實體類 */ public class User { //實體類的屬性和表的字段名稱一一對應 private int id; private String name; private int age;

    public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "User [id=" + id + ", name=" + name + ", age=" + age + "]"; } }

映射器接口

package com.feiyu.mapping;

import com.feiyu.POJO.User;

public interface UserMapper { public User getUser(int id); }

引入XML文件

元素:其中的namespace對應的是一個接口的全限定名,這樣MyBatis就能夠根據上下文找到對應的接口

相關文章
相關標籤/搜索