MyBatis從入門到精通(1):MyBatis入門

来源:https://www.cnblogs.com/MarlonKang/archive/2019/07/11/11167550.html
-Advertisement-
Play Games

作為一個自學Java的自動化專業211大學本科生,在學習和實踐過程中”趟了不少雷“,所以有志於建立一個適合同樣有熱情學習Java技術的參考“排雷手冊”。 最近在讀劉增輝老師所著的《MyBatis從入門到精通》一書,很有收穫,於是將自己學習的過程以博客形式輸出,如有錯誤,歡迎指正! 第1章 MyBat ...


作為一個自學Java的自動化專業211大學本科生,在學習和實踐過程中”趟了不少雷“,所以有志於建立一個適合同樣有熱情學習Java技術的參考“排雷手冊”。

最近在讀劉增輝老師所著的《MyBatis從入門到精通》一書,很有收穫,於是將自己學習的過程以博客形式輸出,如有錯誤,歡迎指正!

第1章  MyBatis入門

1.1  MyBatis簡介

MyBatis是一款支持自定義SQL查詢、存儲過程和高級映射的持久層框架。消除了幾乎所有JDBC代碼和參數的手動設置以及結果集的檢索。MyBatis可以使用XML或註解進行配置和映射。MyBatis通過將參數映射到配置的SQL形成最終執行的SQL語句,最後將執行的SQL的結果映射成Java對象返回。

與其他的ORM(對象關係映射)框架不同,MyBatis並沒有將Java對象資料庫表關聯起來,而是將Java方法與SQL語句關聯。

1.2  創建Maven項目

Maven是一個項目構建和管理工具。目前市面上很多陳舊的Java參考書還停留在講如何使用Eclipse開發工具,不過據我觀察IT培訓班的視頻都更新在使用IDEA。

因此我們要新建個Maven項目,使用IntelliJ IDEA 2018.3.6 x64新建Maven項目的過程如下:

+ Create New Project

註:JDK1.8u211 是需要用戶安裝並配置好環境變數,相關教程請參考其他博客的介紹。

 

我們新建完的Maven項目結構如下圖所示:

預設生成的pom.xml文件其內容如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>cn.bjut.mybatis</groupId>
<artifactId>example</artifactId>
<version>0.1-SNAPSHOT</version>


</project>

 

以上是Maven項目的基本配置信息,我們還需要為它添加一些常用配置

首先,設置源代碼編碼方式為UTF-8,配置如下

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

接著,設置編譯源代碼的JDK版本,本人使用的是JDK 1.8,配置如下。

    <build>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

還需要在配置文件pom.xml中添加一些依賴才能使接下來的工作順利進行。

這裡要添加最重要的MyBatis依賴、接著還需要添加會用到的 JUnit、mysql、Log4j驅動的依賴。

註:各種依賴的version要和自己電腦安裝的實際情況一致!

       可以通過 http://search.maven.org/ 來查找依賴坐標。

       MyBatis                                                                                                  下載地址:    https://mybatis3.github.io/downloads.html

       junit 是一個單元測試框架,那麼使用 Junit 能讓我們快速的完成單元測試。下載地址:  https://www.mvnjar.com/junit/junit/4.12/detail.html

       mysql是一個資料庫,Navicat是資料庫可視化操作工具,兩者需要先自行安裝後再進行本實驗流程。下載地址: https://www.mysql.com/downloads/

       log4j是一個一款開源的日誌框架,在項目中,我們一般會結合slf4j和log4j一起使用。                 下載地址:   http://logging.apache.org/log4j/1.2/download.html

       slf4j是一個簡單日記門面(simple logging Facade for java)可以為各種loging APIs提供一個簡單統一的介面。  下載地址:    https://www.slf4j.org/download.html

      

       最終的pom.xml文件內容如下。

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <project xmlns="http://maven.apache.org/POM/4.0.0"
 3          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 5 <modelVersion>4.0.0</modelVersion>
 6 
 7 <groupId>cn.bjut.mybatis</groupId>
 8 <artifactId>example</artifactId>
 9 <version>0.1-SNAPSHOT</version>
10 
11     <properties>
12         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
13         <java.version>1.8</java.version>
14     </properties>
15 
16     <build>
17         <plugins>
18             <plugin>
19                 <artifactId>maven-compiler-plugin</artifactId>
20                 <configuration>
21                     <source>${java.version}</source>
22                     <target>${java.version}</target>
23                 </configuration>
24             </plugin>
25         </plugins>
26     </build>
27 
28     <dependencies>
29         <dependency>
30             <groupId>junit</groupId>
31             <artifactId>junit</artifactId>
32             <version>4.12</version>
33             <scope>test</scope>
34         </dependency>
35         <dependency>
36             <groupId>org.mybatis</groupId>
37             <artifactId>mybatis</artifactId>
38             <version>3.3.0</version>
39         </dependency>
40         <dependency>
41             <groupId>mysql</groupId>
42             <artifactId>mysql-connector-java</artifactId>
43             <version>5.1.38</version>
44         </dependency>
45         <dependency>
46             <groupId>org.slf4j</groupId>
47             <artifactId>slf4j-api</artifactId>
48             <version>1.7.12</version>
49         </dependency>
50         <dependency>
51             <groupId>org.slf4j</groupId>
52             <artifactId>slf4j-log4j12</artifactId>
53             <version>1.7.12</version>
54         </dependency>
55         <dependency>
56             <groupId>log4j</groupId>
57             <artifactId>log4j</artifactId>
58             <version>1.2.17</version>
59         </dependency>
60     </dependencies>
61 
62 
63 </project>

當對Maven的配置進行修改後,還需要來(一些操作技巧)來更新外部依賴的jar包。 

完成上述步驟後,MyBatis的基本開發環境就已經準備好了。

1.3  簡單配置讓MyBatis跑起來

1.3.1  準備資料庫

註:首先需要安裝mysql軟體,並且記下root管理員的密碼。然後再安裝Navicat這個有圖形界面的MySQL客戶端工具,此處命令行代碼的錄入建議用文本編輯器 Notepad++。

       SQL語句學習,推薦看 《MYSQL必知必會》。通過執行下麵的SQL語句創建一個名為 mybatis的資料庫,然後再創建一個名為country的並插入一些簡單的數據。

CREATE DATABASE mybatis DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
-- mysql語句單行註釋使用 "-- " 註意,--後跟有一個空格

use mybatis;

-- 表頭的字元串用` `括起來
CREATE TABLE `country`(
`id`  int NOT NULL AUTO_INCREMENT ,
`countryname` varchar(255) NULL  ,
`countrycode` varchar(255) NULL  ,
PRIMARY KEY  (`id`)

);

-- 表的內容字元串用' '括起來,格式使用同MATLAB
insert country (`countryname`,`countrycode`)
values ('中國','CN'),('美國','US'),('俄羅斯','RU'),
       ('英國','GB'),('法國','FR');

 

首先點擊【連接】彈出窗體 確定->創建了一個名為‘MyBatis從入門到精通’的【連接】->右鍵單擊選擇【打開連接】->右鍵菜單選擇【命令列界面】->輸入上述SQL語句並回車得到結果如下:

我們檢查一下 資料庫mybatis 表 的內容如下圖所示

 1.3.2  配置MyBatis

使用XML形式進行配置,首先在 src/main/resources下麵創建 mybatis-config.xml配置文件。

 

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE configuration
 3         PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
 4         "http://mybatis.org/dtd/mybatis-3-config.dtd">
 5 <configuration>
 6     <settings>
 7         <setting name="logImpl" value="LOG4J"/>
 8     </settings>
 9     
10      <typeAliases>
11         <package name="cn.bjut.example.model"/>
12     </typeAliases>
13 
14     <environments default="development">
15         <environment id="development">
16             <transactionManager type="JDBC">
17                 <property name="" value=""/>
18             </transactionManager>
19             <dataSource type="UNPOOLED">
20                 <property name="driver" value="com.mysql.jdbc.Driver"/>
21                 <property name="url" value="jdbc:mysql://192.168.16.137:3306/mybatis"/>
22                 <property name="username" value="root"/>
23                 <property name="password" value=""/>
24             </dataSource>
25         </environment>
26     </environments>
27 
28     <mappers>
29         <mapper resource="cn/bjut/example/mapper/CountryMapper.xml"/>
30     </mappers>
31 </configuration>
  • <settings>中的logImpl屬性配置 指定使用LOG4J輸出日誌。
  • <typeAliases>在MyBatis中需要頻繁用到類的全限定名稱,為了方便使用,我們配置了 cn.bjut.example.model包,這樣後在使用類的時候不需要寫包名的部分,只使用Country即可。
  • <environments>環境配置中主要配置了資料庫連接,資料庫的url為:     jdbc:mysql://localhost:3306/mybatis   使用的本機MySQL中的mybatis資料庫。
  • <mappers>中配置了一個 包含完整類路徑的 CountryMapper.xml  ,這是一個MyBatis的SQL語句和映射配置文件。

 

1.3.3  創建實體類和Mapper.xml文件

 MyBatis是一個 結果映射框架 ,這裡創建的實體類是一個數據值對象(Data Value Object)。在實際應用中,一個表一般會對應一個實體。

 根據MyBatis官方的習慣,一般用Mapper作為XML和介面類名的尾碼。通常稱XML為Mapper.xml文件,稱介面為Mapper介面。

  • 在src/main/java 下創建一個基礎的包 cn.bjut.example ,在這個包下麵再創建model包。
  • 根據資料庫表 country ,在model包下創建實體類Country ,代碼如下。
 1 package tk.mybatis.simple.model;
 2 
 3 public class Country {
 4     private Long id;
 5     private String countryname;
 6     private String countrycode;
 7 
 8     public Long getId() {
 9         return id;
10     }
11 
12     public void setId(Long id) {
13         this.id = id;
14     }
15 
16     public String getCountryname() {
17         return countryname;
18     }
19 
20     public void setCountryname(String countryname) {
21         this.countryname = countryname;
22     }
23 
24     public String getCountrycode() {
25         return countrycode;
26     }
27 
28     public void setCountrycode(String countrycode) {
29         this.countrycode = countrycode;
30     }
31 
32 }

     在  src/main/resources  下麵創建  cn/bjut/mybatis/example/mapper  目錄,再在該目錄下麵創建 CountryMapper.xml文件,添加如下內容。

<?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" >
<mapper namespace="tk.mybatis.simple.mapper.CountryMapper">
    <select id="selectAll" resultType="Country">
        select id,countryname,countrycode from country
    </select>
</mapper>

SQL定義在 CountryMapper.xml文件中,裡面的配置作用如下。

  • <mapper>: XML的根元素,屬性namespace定義了當前XML的命名空間。
  • <select>元素: 我們所定義的一個  SELECT查詢。
  • id屬性: 定義了當前SELECT查詢的 唯一 一個id。
  • resultType: 定義了當前查詢的返回值類型,此處就是指 實體類Country。

創建好實體和Mapper.xml後,接下來要有針對性地配置 Log4j ,讓MyBatis在執行資料庫操作時將有關信息輸出到控制台。

 

1.3.4   配置Log4j以便查看MyBatis操作資料庫的過程

 在 src/main/resources 中添加 log4j.properties配置文件,輸入如下內容。

 1 #\u5168\u5C40\u914D\u7F6E
 2 log4j.rootLogger=ERROR, stdout
 3 
 4 #MyBatis \u65E5\u5FD7\u914D\u7F6E
 5 log4j.logger.cn.bjut.example.mapper=TRACE 6 
 7 #\u63A7\u5236\u53F0\u8F93\u51FA\u914D\u7F6E
 8 log4j.appender.stdout=org.apache.log4j.ConsoleAppender
 9 log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
10 log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

在MyBatis的日誌實現中,所謂的包名實際上是XML配置中 namespace 屬性值的一部分。由於namespace屬性值必須和介面全限定類名相同,因此才會真正對應到Java中的包。

MyBatis日誌的 最低級別是 TRACE ,在這個日誌級別下,會輸出執行SQL過程中的詳細信息,這個級別適合 開發時使用。

配置好Log4j,接下來就可以編寫 測試代碼讓MyBatis跑起來了。

 

1.3.5  編寫測試代碼 讓MyBatis跑起來

首先在  src/test/java  中創建  cn.bjut.example.mapper 包 ,然後創建  CountryMapperTest測試類 ,代碼如下。

 

 1 package tk.mybatis.simple.mapper;
 2 
 3 import java.io.IOException;
 4 import java.io.Reader;
 5 import java.util.List;
 6 
 7 import org.apache.ibatis.io.Resources;
 8 import org.apache.ibatis.session.SqlSession;
 9 import org.apache.ibatis.session.SqlSessionFactory;
10 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
11 import org.junit.BeforeClass;
12 import org.junit.Test;
13 
14 import tk.mybatis.simple.model.Country;
15 
16 public class CountryMapperTest {
17     
18     private static SqlSessionFactory sqlSessionFactory;
19     
20     @BeforeClass
21     public static void init(){
22         try {
23             Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
24             sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
25             reader.close();
26         } catch (IOException ignore) {
27             ignore.printStackTrace();
28         }
29     }
30     
31     @Test
32     public void testSelectAll(){
33         SqlSession sqlSession = sqlSessionFactory.openSession();
34         try {
35             List<Country> countryList = sqlSession.selectList("selectAll");
36             printCountryList(countryList);
37         } finally {
38             sqlSession.close();
39         }
40     }
41     
42     private void printCountryList(List<Country> countryList){
43         for(Country country : countryList){
44             System.out.printf("%-4d%4s%4s\n",country.getId(), country.getCountryname(), country.getCountrycode());
45         }
46     }
47 }

 

5. 參考

 

1. Junit 入門使用教程    https://www.cnblogs.com/ysocean/p/6889906.html#_label2

2. log4j 日誌框架使用    https://blog.csdn.net/king_kgh/article/details/80430002

3. slf4j學習小結        https://imshare.iteye.com/blog/772770

4. MyBatis從入門到精通     https://mybatis3.github.io/downloads.html

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • SpringCloud系列教程 | 第十一篇:使用Spring Cloud Sleuth和Zipkin進行分散式鏈路跟蹤 Springboot: 2.1.6.RELEASE SpringCloud: Greenwich.SR1 如無特殊說明,本系列教程全採用以上版本 在分散式服務架構中,需要對分散式 ...
  • 微服務概述 1.1 易於擴展 1.2 部署簡單 1.3 技術異構性 資料庫的服務化切分 2.1 什麼是“分庫分表”? 2.2 資料庫擴展的幾種方式 2.3 分庫分表的幾種方式 2.4 引入分庫分表中間件後面臨的問題 2.5 現有分庫分表中間件的橫向對比 微服務架構中的分散式事務 3.1 什麼是事務? ...
  • 為什麼是kafka? 在我們大量使用分散式資料庫、分散式計算集群的時候,是否會遇到這樣的一些問題: 我們想分析下用戶行為(pageviews),以便我們設計出更好的廣告位 我想對用戶的搜索關鍵詞進行統計,分析出當前的流行趨勢 有些數據,存儲資料庫浪費,直接存儲硬碟效率又低 這些場景都有一個共同點: ...
  • 將自己的學習筆記般過來 https://owen027.github.io/2019/07/08/designPatterns/ JavaScript是一門 "[1]" "[2]" "[3]" ,設計模式通過對面向對象的特征 封裝、繼承、組合、多態 等技術的反覆使用,提煉出可復用的面向對象設計技巧。 ...
  • Introduction spring boot plus是一套集成spring boot常用開發組件的後臺快速開發框架 Purpose 每個人都可以獨立、快速、高效地開發項目! Everyone can develop projects independently, quickly and eff ...
  • 一、傳統Session認證 1、認證過程 2、存在問題 二、JWT簡介 JWT(全稱:JSON Web Token),在基於HTTP通信過程中,進行身份認證。 1、認證流程 2、JWT結構說明 抓一隻鮮活的Token過來。 上面的Token被手動格式化了,實際上是用"."分隔的一個完整的長字元串。 ...
  • 大家怎麼說? 老師很好,我認為,若想學好python,應該多練、多想、多看。學習資料不能僅限於老師給定的這些內容,這些畢竟是入門資料 老師講的真不錯,對於我們這種小白來說 也比較容易懂,雖然有些時候自己學起來可能比較費勁 ,但是已經很不錯了 哈哈哈 完全小白,在網上找了好多課程,不是講的太籠統就是不 ...
  • 前言 JDK,CGLIB,JAVASSIST是常用的動態代理方式。 JDK動態代理僅能對具有介面的類進行代理。 CGLIB動態代理方式的目標類可以沒有介面。 Javassist是一個開源的分析、編輯和創建Java位元組碼的類庫,JAVASSIST可以動態修改類,比如添加方法和屬性。JAVASSIST的 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...