MyBatis學習

1 簡介:

每個MyBatis應用程序主要都是使用SqlSessionFactory實例的,一個SqlSessionFactory實例可以通過SqlSessionFactoryBuilder獲得。SqlSessionFactoryBuilder可以從一個xml配置文件或者一個預定義的配置類的實例獲得。

 以上簡介是MyBatis官方文檔的介紹,我以這個爲切入點,結合我們的項目,學習瞭解XML配置文件,SqlSessionFactory的獲取,SqlSession的獲取和使用。

 

2. 從XML中構建SqlSessionFactory(爲後面的MyBatis-Spring打基礎):

  String resource ="com/accp/mybatis/data/Configuration.xml";   

Reader reader =Resources.getResourceAsReader(resource);   

sqlMapper = new SqlSessionFactoryBuilder().build(reader);

那看看XML中配置了什麼?

2.1 xml配置文件如下:

<configuration> 

    <properties resource="properties/datasource.properties" /> 

 

    <typeAliases> 

        <typeAlias type="com.accp.mybatis.model.Blog" alias="Blog"/> 

    </typeAliases>

 

    <environments default="accp">

        <environment id="accp"> 

            <transactionManager type="JDBC" /> 

         <dataSource type="POOLED">   

                <property name="driver" value="${driver}" /> 

                <property name="url" value="${url}" /> 

                <property name="username" value="${username}" /> 

                <property name="password" value="${password}" /> 

                <property name="driver.encoding" value="${encoding}" /> 

            </dataSource> 

        </environment> 

    </environments>

 

    <mappers> 

        <mapper resource="com/accp/mybatis/data/BlogMapper.xml" /> 

    </mappers> 

</configuration>

由此可知xml配置文件的核心設置,以及這樣配置的作用:

    數據源:獲取數據庫實例

    事物管理器:決定事物的範圍和控制

    mapper:告訴MyBatis 去哪尋找映射SQL 的語句。

typeAliases:配置Java對象的別名(Mapper配置需要使用)。

  Java中的JDBC執行步驟是:

C(Class.forName()),

C(Connection),

S(Statement) ,

R(ResultSet)。

結合JDBC,個人是這樣理解這些配置的:

數據源是爲了獲取Connection(對應CC),

mapper以及transactionManager是爲了執行SQL(對應S),

(具體的Mapper.xml文件中有SQL語句,Java對象與SQL返回類型的映射。MyBatis中SQL執行結果是Map<String,Object>,這樣配置以後,MyBatis可以將執行結果轉換爲我們想要的Java對象。)

 

2.2 SqlSessionFactory

   一個environment對應一個SqlSessionFactory,SqlSessionFactory 應該在應用執行期間都存在,可以通過單例模式使其生命週期在一個應用範圍內。

 

 

3. SqlSession

3.1 SqlSession的獲取:從SqlSessionFactory獲取SqlSession。

SqlSession session = sqlSessionFactory.openSession();

try {

  // do work

Blog blog = (Blog) session.selectOne("org.mybatis.example.BlogMapper.selectBlog", 101);

} finally {

  session.close();

}

  SqlSession介紹:

      Sqlsession對應着一次數據庫會話,每次訪問數據庫時都需要創建它,會話結束後要關閉session。

3.2使用SqlSession執行SQL語句:

 3.2.1 只使用Map文件編程:

     SqlSession提供了許多方法供我們使用,在我們項目中常用的有如下方法:

  select(), selectOne(), insert(), update(),delete()。

     項目中使用這種方式,用法和以下這句Java是一樣的:

  Blog blog = (Blog) session.selectOne("org.mybatis.example.BlogMapper.selectBlog", 101);

  3.2.2 以接口方式編程:

   本項目中未用。

BlogMapper mapper = session.getMapper(BlogMapper.class);

Blog blog = mapper.selectBlog(101);

   原理和使用全名調用Java對象的方法是相似的,編寫一個映射類,使用一個名稱, 參數和返回值和已映射的查詢 語句都一樣的方法即可。

4.Mapper XML文件

  在Mapper XML文件中可以配置SQL語句和result映射,相比較JDBC,可以節省大量的代碼量,而且又是以SQL語句爲核心。我個人覺得這個是它強大處之一,順便可以讓我練習寫SQL語句(Hibernate讓我快遺忘掉SQL了)。

  結合我們項目:以下是文件中常用的元素:

sql – 可以重用的 SQL 塊,也可以被其他語句引用。

insert  – 映射插入語句

update – 映射更新語句

delete – 映射刪除語句

select – 映射查詢語句

resultMap  – 將數據庫結果集轉換爲你設置的對象

<![CDATA[ ]]> - 被包裹的內容會被解析器忽略(忽略特殊字符)

  動態SQL,在項目中沒怎麼用到,我就不寫了,用到的時候可以查看官網:http://mybatis.github.io/mybatis-3/zh/dynamic-sql.html

 

5. 和Hibernate比較:

Hibernate和mybatis有一個共同點:

1. 從配置文件(通常是XML配置文件中)得到 sessionfactory.

2. 由sessionfactory  產生 session

3. 在session 中完成對數據的增刪改查和事務提交等.

4. 在用完之後關閉session 。

5. 都可以將查詢的結果集映射爲Java對象

我Hibernate用的不是很多,從個人使用和網上搜來的結果,簡單總結了如下:

 Hibernate特點:

  1. 功能強大,DAO層開發簡單

  2. 比較笨重,不方便優化

  MyBatis特點:

  1. 比較輕,可以細緻優化SQL

  2. MyBatis容易掌握,而Hibernate門檻較高。

發佈了25 篇原創文章 · 獲贊 3 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章