1. 程式人生 > >MyBatis入門學習——環境搭建

MyBatis入門學習——環境搭建

在MyBatis官方文件上是這樣說的:

MyBatis 是一款優秀的持久層框架,它支援定製化 SQL、儲存過程以及高階對映。MyBatis 避免了幾乎所有的 JDBC 程式碼和手動設定引數以及獲取結果集。MyBatis 可以使用簡單的 XML 或註解來配置和對映原生資訊,將介面和 Java 的 POJOs(Plain Old Java Objects,普通的 Java物件)對映成資料庫中的記錄。

首先MyBatis是一個框架,那麼什麼是框架?通俗的說框架就是具有特定約束性的工具類.框架就是為解決問題制定的一套約束,在提供功能基礎上進行擴充. 框架中一些不能被封裝的程式碼(變數),需要使用框架者新建一個配置檔案,在檔案中新增變數內容. 配置檔案需要建立在特定位置和特定名稱 通過反射技術例項化配置檔案中的類並獲取到類屬性的值。從而達到解決某類問題的目的,凡是框架都是為了簡便開發而誕生的

MyBatis是一個持久層框架。持久層框架解決的就是資料訪問的問題,那麼MyBatis的功能就是連線資料庫進行CRUD操作,而為了優化CRUD操作還提供了資料庫連線池、事務管理、資料表的對映等一系列功能。其實MyBatis的底層就是對JDBC進行了封裝而已。

學習一個框架的**第一步**就是搭建所需要的環境,這個環境指的就是所需要的Jar包和依賴的配置檔案。下面就是MyBatis所以依賴的包。

MyBatis對配置檔案沒有名稱上的要求,路徑一般全域性配置檔案放在classes根部錄下也就是srcresources下。

我們看一下全域性的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 -->
<configuration>
    <!-- default引用的是environment標籤的id,意思是當前是用的環境 -->
    <environments default="MySql">
        <!-- 宣告可以是用的環境,id環境唯一標識 -->
        <environment id="MySql">
            <!--
                事務管理器 type=[JDBC|MANAGED]  MyBatis 中有兩種型別的事務管理器
                JDBC – 這個配置就是直接使用了JDBC的提交和回滾設定,它依賴於從資料來源得到的連線來管理事務作用域。
                MANAGED – 這個配置就是讓容器來管理事務的整個生命週期,或許框架整合時會說這個配置。
            -->
            <transactionManager type="JDBC"></transactionManager>
            <!--
                資料來源配置 使用標準的 JDBC 資料來源介面來配置 JDBC 連線物件的資源。
                有三種內建的資料來源型別(也就是 type=[UNPOOLED|POOLED|JNDI])
                UNPOOLED:不使用連線池每次請求都會建立新的資料連線物件
                POOLED:使用連線池方式
                JNDI:使用JNDI方式
            -->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver" />
                <property name="url" value="jdbc:mysql://localhost:3306/test" />
                <property name="username" value="root" />
                <property name="password" value="123456" />
            </dataSource>
        </environment>
    </environments>
    <!--
        對映器  MyBatis 的行為已經由上述元素配置完了,我們現在就要定義 SQL 對映語句了。
        但是首先我們需要告訴 MyBatis 到哪裡去找到這些語句。
        Java 在自動查詢這方面沒有提供一個很好的方法,所以最佳的方式是告訴 MyBatis 到哪裡去找對映檔案。
    -->
    <mappers>
        <!-- 使用相對於類路徑的資源引用 -->
        <mapper resource="org/mybatis/builder/AuthorMapper.xml"/>
        <!-- 使用完全限定資源定位符(URL)基本不會使用 -->
        <mapper url="file:///var/mappers/AuthorMapper.xml"/>
        <!-- 使用對映器介面實現類的完全限定類名 -->
        <mapper class="org.mybatis.builder.AuthorMapper"/>
        <!-- 將包內的對映器介面實現全部註冊為對映器 -->
        <package name="org.mybatis.builder"/>
    </mappers>
</configuration>

MyBatis 的真正強大在於它的對映語句,也是它的魔力所在。由於它的異常強大,對映器的 XML 檔案就顯得相對簡單。如果拿它跟具有相同功能的 JDBC 程式碼進行對比,你會立即發現省掉了將近 95% 的程式碼。MyBatis 就是針對 SQL 構建的,並且比普通的方法做的更好。

SQL 對映檔案有很少的幾個頂級元素(按照它們應該被定義的順序):

  • cache – 給定名稱空間的快取配置。
  • cache-ref – 其他名稱空間快取配置的引用。
  • resultMap – 是最複雜也是最強大的元素,用來描述如何從資料庫結果集中來載入物件。
  • sql – 可被其他語句引用的可重用語句塊。
  • insert – 對映插入語句
  • update – 對映更新語句
  • delete – 對映刪除語句
  • select – 對映查詢語句

接下來我們看一下mapper對映器配置檔案的格式:

<?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">
<!--
    對映器 namespace名稱空間 用於語句隔離
-->
<mapper namespace="org.mybatis.example.AuthorMapper">
    <!--
        select 查詢
        id	在名稱空間中唯一的識別符號,可以被用來引用這條語句。
        parameterType	引數型別
        resultType	返回值型別
    -->
    <select id="selectAuthor" parameterType="int" resultType="hashmap">
        SELECT * FROM Author WHERE ID = #{id}
    </select>
    <!--
        insert 插入
        id	在名稱空間中唯一的識別符號,可以被用來引用這條語句。
        parameterType	引數型別
    -->
    <insert id="insertAuthor" parameterType="org.mybatis.example.Author">
        insert into Author (id,username,password,email,bio)
        values (#{id},#{username},#{password},#{email},#{bio})
    </insert>
    <!--
        update 修改
        id	在名稱空間中唯一的識別符號,可以被用來引用這條語句。
        parameterType	引數型別
    -->
    <update id="updateAuthor" parameterType="org.mybatis.example.Author">
        update Author set
        username = #{username},
        password = #{password},
        email = #{email},
        bio = #{bio}
        where id = #{id}
    </update>
    <!--
        delete 刪除
        id	在名稱空間中唯一的識別符號,可以被用來引用這條語句。
        parameterType	引數型別
    -->
    <delete id="deleteAuthor" parameterType="int">
        delete from Author where id = #{id}
    </delete>
</mapper>

環境搭建好後我們怎麼使用呢?

public class TestMybatis {
    public static void main(String[] args) throws IOException {
        //載入全域性配置檔案
        InputStream is =  Resources.getResourceAsStream("Mybatis.xml");
        //建立SqlSessionFactory
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
        //獲取SqlSession
        SqlSession sqlSession = factory.openSession();
        Map<String,Integer> map = new HashMap<>();
        map.put("id", 1);
        //執行SQL獲取結果
        List<Author> list = sqlSession.selectList("org.mybatis.example.AuthorMapper.selectAuthor", map);
        //關閉SqlSession
        sqlSession.close();
    }
}

每個基於 MyBatis 的應用都是以一個 SqlSessionFactory 的例項為中心的。SqlSessionFactory是SqlSession的工廠,而SqlSession就相當於JDBC中的執行器一樣,它可以執行SQL並返回結果。而 SqlSessionFactory 則是通過我們剛剛配置的全域性配置檔案MyBatis.xml建立的。