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
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...