1. 程式人生 > >Mybatis框架學習1:入門

Mybatis框架學習1:入門

一框架介紹

1.Mybatis介紹

​ MyBatis 本是apache的一個開源專案iBatis, 2010年這個專案由apache software foundation 遷移到了google code,並且改名為MyBatis。是一個基於Java的持久層框架。
​ Mybatis本質和Hibernate等持久層框架一樣,底層均是基於jdbc的,作用均是實現資料的持久化。

2.Mybatis和Hibernate對比

對比項 Mybatis Hibernate
底層原理 基於jdbc 基於jdbc
開發速度 業務無複雜查詢時較快,上手快 複雜查詢語句多時較快。上手慢
sql優化 複雜 手寫sql,容易優化
快取 支援一級、二級快取,支援第三方快取 支援一級、更好的二級快取,支援第三方快取
可移植性 不同資料庫需寫不同sql語句 Hibernate負責對映
日誌系統 具有自己的日誌系統 使用第三方日誌工具

.二準備工作

1.建立資料

CREATE TABLE `user` (
  `id` int(11) PRIMARY KEY NOT NULL AUTO_INCREMENT,
  `name` text NOT NULL,
  `memo` text
) ;
INSERT INTO `user` VALUES ('1', 'uzi', 'a gun');
INSERT INTO `user` VALUES ('2', 'the Shy', 'ChampionTop');
INSERT INTO `user` VALUES ('3', 'rookie', 'ChampionMid');
INSERT INTO `user` VALUES ('4', 'clearlove', 'old man');

2.資源準備

如果建立的是java專案,那麼需要下載以下jar包:

  • mybatis-3.4.6.jar

  • commons-logging-1.2.jar

  • log4j-1.2.17.jar

  • asm-5.2.jar

  • cglib-3.2.5.jar

    如果建立的是maven專案,則匯入對應依賴即可。

三.建立專案

我這裡建立的是java專案

1.匯入jar包

在專案根目錄下建立一個資料夾,命名為lib,將下載好的jar包複製進去後,郵件選中,選擇 Buildpath—>add to BuildPath。

a

2.建立Mybatis配置檔案

<?xml version="1.0" encoding="UTF-8" ?>
<!--需要匯入mybatis的dtd約束檔案 -->
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!--
              屬性 
        <properties></properties>
             全域性引數設定
        <settings></settings>
             類型別名
        <typeAliases></typeAliases>
            型別處理器
        <typeHandles></typeHandles>
            物件工廠
        <objectFactory></objectFactory>
            外掛
        <plugins></plugins>
        以上屬性現階段都可以忽視,後面會詳細介紹
    -->
    

<!-- 配置mybatis的環境資訊 -->

<environments default="development">
    <environment id="development">
        <!-- 配置JDBC事務控制,由mybatis進行管理 -->
        <transactionManager type="JDBC"></transactionManager>
        <!-- 配置資料來源,採用dbcp連線池 -->
        <dataSource type="POOLED">
            <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
            <property name="url" value="jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&amp;characterEncoding=utf-8&amp;useSSL=false&amp;serverTimezone=GMT"/>
            <property name="username" value="root"/>
            <property name="password" value="root"/>
        </dataSource>
    </environment>
</environments>
    <!-- 使用mappers標籤載入sql對映檔案 -->    
<mappers>
    <!-- 此處根據自己實際的sql對映檔案位置來填寫-->
    <mapper resource="com/mybatis/mapping/User.xml"/>
</mappers>
</configuration>

3.建立實體類

  package com.mybatis.domain;
  
  public class User {
    private int id;
    private String name;
    private String desc;
    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 String getDesc() {
        return desc;
    }
    public void setDesc(String desc) {
        this.desc = desc;
    }
    @Override
    public String toString() {
        return "User [id=" + id + ", name=" + name + ", desc=" + desc + "]";
    }
  }

4.建立sql對映配置檔案

  <?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:名稱空間,對sql進行一個分類管理 -->
  <!-- 注意:namespace在mapper代理時,具有重要且特殊的作用 -->
  <mapper namespace="com.mybatis.mapping.userMapper">
           <!-- 
   2             使用id進行查詢
   3         查詢,使用select來表示一個查詢的statement,相當於statement.executeQuery
   4         id:表示該statement唯一標識
   5         parameterType:輸入引數型別
   6         resultType:輸出引數型別,使用的是User類,則會將查詢出來的記錄封裝到該類中
   7         #{id}:使用#{}接收輸入的引數,其中的"id"屬性名任意,可以為uid,也可以為別的。
   8       -->
      <!-- 查詢 -->
        <select id="getUser" parameterType="int" resultType="com.mybatis.domain.User">
           SELECT * FROM user WHERE id= #{id}
       </select>
  </mapper>

5.完成簡單查詢

建立一個測試類

  /**
   * @param args
   * @throws IOException 
   */
  public static void main(String[] args) throws IOException {
      //1.讀取配置檔案
      String resource = "SqlMapConfig.xml";
      InputStream inputStream = Resources.getResourceAsStream(resource);
      //2.根據配置檔案建立SqlSessionFactory
      SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
      //3.SqlSessionFactory建立SqlSession
      SqlSession sqlSession = sqlSessionFactory.openSession();
      //4.SqlSession執行statement,並返回對映結果
      User user = sqlSession.selectOne("com.mybatis.mapping.userMapper.getUser",1);
      system.Out
      sqlSession.close();
  }

輸出結果如下

DEBUG [main] - Opening JDBC Connection
DEBUG [main] - Created connection 1859039536.
DEBUG [main] - Setting autocommit to false on JDBC Connection [[email protected]]
DEBUG [main] - ==>  Preparing: SELECT * FROM user WHERE id= ? 
DEBUG [main] - ==> Parameters: 1(Integer)
DEBUG [main] - <==      Total: 1
User [id=1, name=uzi, desc=null]
DEBUG [main] - Resetting autocommit to true on JDBC Connection [[email protected]]
DEBUG [main] - Closing JDBC Connection [[email protected]]
DEBUG [main] - Returned connection 1859039536 to pool.

總結

由上述步驟來看,使用Mybatis來完成一個入門的資料庫查詢並不困難,一共有以下幾個步驟:

  1. 建立Mybatis的xml配置檔案,該配置檔案主要約束了Mybatis的行為,包括資料庫連線以及sql對映檔案位置等
  2. 建立sql對映的配置檔案,在該檔案中,將指定的sql語句繫結到一個關鍵字上
  3. 建立SqlSession物件,使用SelectOne方法,執行"名稱空間+關鍵字",並附帶一個查詢引數,即可完成查詢。