Mybatis入門

ning12發表於2024-06-07

目錄
  • 一、簡介
    • 1.1、MyBatis歷史
    • 1.2、特性
    • 1.3、下載
    • 1.4、和其它持久層技術對比
  • 二、搭建Mybatis
    • 2.1開發環境
  • 三、建立MyBatis的核心配置檔案
    • 3.1、建立mapper介面
    • 3.2、建立MyBatis的對映檔案
    • 3.3、透過junit測試對應功能
    • 3.4、加入log4j日誌功能

一、簡介

1.1、MyBatis歷史

MyBatis最初是Apache的一個開源專案iBatis, 2010年6月這個專案由Apache Software Foundation遷移到了Google Code。隨著開發團隊轉投Google Code旗下, iBatis3.x正式更名為MyBatis。程式碼於2013年11月遷移到Github。

iBatis一詞來源於“internet”和“abatis”的組合,是一個基於Java的持久層框架。 iBatis提供的持久層框架包括SQL Maps和Data Access Objects(DAO)。

1.2、特性

1) MyBatis 是支援定製化 SQL、儲存過程以及高階對映的優秀的持久層框架

2) MyBatis 避免了幾乎所有的 JDBC 程式碼和手動設定引數以及獲取結果集

3) MyBatis可以使用簡單的XML或註解用於配置和原始對映,將介面和Java的POJO(Plain Old Java Objects,普通的Java物件)對映成資料庫中的記錄

4) MyBatis 是一個半自動的ORM(Object Relation Mapping)框架

1.3、下載

https://github.com/mybatis/mybatis-3

1.4、和其它持久層技術對比

JDBC

  1. SQL 夾雜在Java程式碼中耦合度高,導致硬編碼內傷

  2. 維護不易且實際開發需求中 SQL 有變化,頻繁修改的情況多見

  3. 程式碼冗長,開發效率低

Hibernate和JPA

  1. 操作簡便,開發效率高

  2. 程式中的長難複雜 SQL 需要繞過框架

  3. 內部自動生產的 SQL,不容易做特殊最佳化

  4. 基於全對映的全自動框架,大量欄位的 POJO 進行部分對映時比較困難。

  5. 反射操作太多,導致資料庫效能下降

Mybatis

  1. 輕量級,效能出色

  2. SQL 和 Java 編碼分開,功能邊界清晰。Java程式碼專注業務、SQL語句專注資料

  3. 開發效率稍遜於Hibernate,但是完全能夠接受

二、搭建Mybatis

2.1開發環境

IDE:idea 2022.2.3

構建工具:maven 3.6.0

MySQL版本:MySQL 5

MyBatis版本:MyBatis 3.5.7

MySQL不同版本的注意事項:

  1. 驅動類driver-class-name

    MySQL 5版本使用jdbc5驅動,驅動類使用:com.mysql.jdbc.Driver

    MySQL 8版本使用jdbc8驅動,驅動類使用:com.mysql.cj.jdbc.Driver

  2. 連線地址url

    MySQL 5版本的url:

    jdbc:mysql://localhost:3306/ssm

    **MySQL 8版本的url: **

    jdbc:mysql://localhost:3306/ssm?serverTimezone=UTC

**否則執行測試用例報告如下錯誤: **

java.sql.SQLException: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more 

三、建立MyBatis的核心配置檔案

習慣上命名為mybatis-config.xml,這個檔名僅僅只是建議,並非強制要求。將來整合Spring

之後,這個配置檔案可以省略,所以大家操作時可以直接複製、貼上。

核心配置檔案主要用於配置連線資料庫的環境以及MyBatis的全域性配置資訊

核心配置檔案存放的位置是src/main/resources目錄下

3.1、建立mapper介面

**MyBatis中的mapper介面相當於以前的dao。但是區別在於,mapper僅僅是介面,不需要提供實現類。 **

3.2、建立MyBatis的對映檔案

相關概念:ORM(Object Relationship Mapping)物件關係對映。

  1. 物件:Java的實體類物件

  2. 關係:關係型資料庫

  3. 對映:二者之間的對應關係

Java****概念 資料庫概念
屬性 欄位/列
物件 記錄/行

**對映檔案的命名規則: **

表所對應的實體類的類名+Mapper.xml

例如:表user,對映的實體類為User,所對應的對映檔案為UserMapper.xml

因此一個對映檔案對應一個實體類,對應一張表的操作

MyBatis對映檔案用於編寫SQL,訪問以及操作表中的資料

MyBatis對映檔案存放的位置是src/main/resources/mappers目錄下

3.3、透過junit測試對應功能

  1. SqlSession:代表Java程式和資料庫之間的會話。(HttpSession是Java程式和瀏覽器之間的會話)

  2. SqlSessionFactory:是“生產”SqlSession的“工廠”。

  3. 工廠模式:如果建立某一個物件,使用的過程基本固定,就可以把建立這個物件的相關程式碼封裝到一個“工廠類”中,以後都使用這個工廠類來“生產”所需要的物件。

3.4、加入log4j日誌功能

  1. 引入依賴

    <!-- log4j日誌 -->
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>
    
  2. 加入log4j的配置檔案(log4j的配置檔名為log4j.xml,存放的位置是src/main/resources目錄下)

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
    
    <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
    
        <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
            <param name="Encoding" value="UTF-8" />
            <layout class="org.apache.log4j.PatternLayout">
                <param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,SSS} %m  (%F:%L) \n" />
            </layout>
        </appender>
        <logger name="java.sql">
            <level value="debug" />
        </logger>
        <logger name="org.apache.ibatis">
            <level value="info" />
        </logger>
        <root>
            <level value="debug" />
            <appender-ref ref="STDOUT" />
        </root>
    </log4j:configuration>
    

**日誌的級別 **

**FATAL(致命)>ERROR(錯誤)>WARN(警告)>INFO(資訊)>DEBUG(除錯) **

從左到右列印的內容越來越詳細

查詢:

查詢的標籤select必須設定屬性resultType或resultMap,用於設定實體類和資料庫表的對映關係

**resultType:自動對映,用於屬性名和表中欄位名一致的情況 **

resultMap:自定義對映,用於一對多或多對一或欄位名和屬性名不一致的情況

相關文章