MyBatis從入門到精通(一):MyBatis入門
最近在讀劉增輝老師所著的《MyBatis從入門到精通》一書,很有收穫,於是將自己學習的過程以部落格形式輸出,如有錯誤,歡迎指正,如幫助到你,不勝榮幸!
1. MyBatis簡介
2001年,Clinton Begin發起了一個名為iBATIS的開源專案,最初側重於密碼軟體的研發,後來發展成為一款基於Java的持久層框架。
2004年,Clinton將iBATIS的名字和原始碼捐贈給了Apache軟體基金會。
2010年,核心開發團隊決定離開Apache軟體基金會,並且將iBATIS改名為MyBatis。
MyBatis是一款優秀的支援自定義SQL查詢、儲存過程和高階對映的持久層框架,消除了幾乎所有的JDBC程式碼和引數的手動設定以及結果集的檢索。MyBatis可以使用XML或註解進行配置和對映,MyBatis通過將引數對映到配置的SQL形成最終執行的SQL語句,最後將執行SQL的結果對映成Java物件返回。
與其他的ORM(物件關係對映)框架不同,MyBatis並沒有將Java物件與資料庫表關聯起來,而是將Java方法與SQL語句關聯。
說明:以上內容瞭解下即可,因為按我的風格,特別不喜歡純理論純文字的東西,看過我以往部落格的讀者可能有這個意識,我更喜歡具體程式碼實戰,比如如何使用一個新技術,某一段程式碼是為了解決什麼問題……
2. 建立Maven專案
關於Maven的相關內容,大家可以參考我之前的部落格Spring入門(四):使用Maven管理Spring專案。
我一直認為,理解一門技術最好的方式,是通過一個具體的例子,比如Hello World,哈哈。
所以,首先我們要新建個Maven專案,使用IDEA新建Maven專案的方法如下所示:
剛新建完的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>com.zwwhnly</groupId> <artifactId>mybatis-action</artifactId> <version>1.0-SNAPSHOT</version> </project>
首先,我們設定原始碼的編碼方式為UTF-8:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
接著,設定編譯原始碼的JDK版本,這裡暫時用1.6,可根據自己的實際需要修改,比如修改成1.8:
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
</plugins>
</build>
然後,新增重要的MyBatis的依賴座標和mysql驅動的依賴座標:
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.3.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
</dependencies>
最後,新增下用到的Log4j、JUnit的依賴座標,最終的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>com.zwwhnly</groupId>
<artifactId>mybatis-action</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.3.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.12</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.12</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
在IDEA中,如果沒有特殊配置過,修改完pom檔案,需要手動匯入下,否則是下圖這樣的情況:
怎麼手動匯入呢?點選下IDEA右下角提示的Import Changes即可。
至此,Maven專案建立完畢。
3. 簡單示例
3.1 資料準備
首先執行如下語句建立資料庫mybatis_action_db:
CREATE DATABASE mybatis_action_db DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
然後執行如下語句建立表country,並新增一些資料:
use mybatis_action_db;
CREATE TABLE country
(
id INT NOT NULL AUTO_INCREMENT,
countryname VARCHAR(255) NULL,
countrycode VARCHAR(255) NULL,
PRIMARY KEY (id)
);
INSERT country(countryname, countrycode)
VALUES ('中國', 'CN'),
('美國', 'US'),
('俄羅斯', 'RU'),
('英國', 'GB'),
('法國', 'FR');
3.2 配置MyBatis
首先在src/main/resources目錄下建立mybatis-config.xml配置檔案,為了後續更快速的建立mybatis-config.xml檔案,我們可以按照如下步驟新增模版:
然後輸入如下內容:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<settings>
<setting name="logImpl" value="LOG4J"/>
</settings>
<typeAliases>
<package name="com.zwwhnly.mybatisaction.model"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC">
<property name="" value=""/>
</transactionManager>
<dataSource type="UNPOOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis_action_db"/>
<property name="username" value="root"/>
<property name="password" value=""/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/zwwhnly/mybatisaction/mapper/CountryMapper.xml"/>
</mappers>
</configuration>
配置簡單講解:
節點中的logImpl屬性配置指定使用LOG4J輸出日誌。 元素下面配置了一個包名,通常確定一個類的時候需要使用類的全限定名稱,例如com.zwwhnly.mybatisaction.model.Country。在MyBatis中需要頻繁用到類的全限定名稱,為了方便使用,我們配置了com.zwwhnly.mybatisaction.model包,這樣配置後,在使用類的時候不需要寫包名的部分,只使用Country即可。 環境配置中主要配置了資料庫連線,如這裡我們使用的是本機MySql中的mybatis_action_db資料庫,使用者名稱為root,沒有密碼(大家可根據自己的實際情況修改資料庫及使用者名稱和密碼)。 中配置了一個包含完整類路徑的CountryMapper.xml,這是一個MyBatis的Sql語句和對映配置檔案。
3.3 建立實體類和Mapper.xml檔案
在src/main/java下新建包:com.zwwhnly.mybatisaction,然後在這個包下再建立包:model。
在model包下建立資料庫表country表對應的實體類Country:
package com.zwwhnly.mybatisaction.model;
public class Country {
private Integer id;
private String countryname;
private String countrycode;
// 按Alt+Insert快捷鍵生成get和set方法
}
在src/main/resources下建立目錄com/zwwhnly/simple/mapper目錄,然後在該目錄下建立CountryMapper.xml檔案,為了後續更快速的建立Mapper.xml檔案,我們可以參考上面的新增mybatis-config.xml模版的方法,這裡不再贅述。
最終的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="com.zwwhnly.mybatisaction.mapper.CountryMapper">
<select id="selectAll" resultType="Country">
SELECT id,countryname,countrycode from country
</select>
</mapper>
配置簡單講解:
- mapper:XML的根元素,屬性namespace定義了當前XML的名稱空間。
- select:我們所定義的一個Select查詢。
- id屬性:定義了當前Select查詢的唯一id。
- resultType:定義了當前查詢的返回值型別,此處就是指實體類Country,前面配置中提到的包名主要用於這裡,如果沒有設定包名,此處就需要寫成resultType="com.zwwhnly.mybatisaction.model.Country"。
- SELECT id,countryname,countrycode from country:查詢Sql語句。
3.4 配置Log4j以便檢視MyBatis操作資料庫的過程
在src/main/resources下新建log4j.properties配置檔案,輸入如下內容:
log4j.rootLogger=ERROR, stdout
log4j.logger.com.zwwhnly.mybatisaction.mapper=TRACE
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
3.5 編寫測試程式碼
在src/test/java下建立包:com.zwwhnly.mybatisaction.mapper,然後建立測試類CountryMapperTest類,程式碼如下:
package com.zwwhnly.mybatisaction.mapper;
import com.zwwhnly.mybatisaction.mapper.model.Country;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.BeforeClass;
import org.junit.Test;
import java.io.IOException;
import java.io.Reader;
import java.util.List;
public class CountryMapperTest extends BaseMapperTest {
private static SqlSessionFactory sqlSessionFactory;
@BeforeClass
public static void init() {
try {
Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
@Test
public void testSelectAll() {
SqlSession sqlSession = sqlSessionFactory.openSession();
try {
List<Country> countryList = sqlSession.selectList("selectAll");
printCountryList(countryList);
} finally {
sqlSession.close();
}
}
private void printCountryList(List<Country> countryList) {
for (Country country : countryList) {
System.out.printf("%-4d%4s%4s\n", country.getId(), country.getCountryname(), country.getCountrycode());
}
}
}
執行測試程式碼,輸出日誌如下:
DEBUG [main] - ==> Preparing: SELECT id,countryname,countrycode from country
DEBUG [main] - ==> Parameters:
TRACE [main] - <== Columns: id, countryname, countrycode
TRACE [main] - <== Row: 1, 中國, CN
TRACE [main] - <== Row: 2, 美國, US
TRACE [main] - <== Row: 3, 俄羅斯, RU
TRACE [main] - <== Row: 4, 英國, GB
TRACE [main] - <== Row: 5, 法國, FR
DEBUG [main] - <== Total: 5
1 中國 CN
2 美國 US
3 俄羅斯 RU
4 英國 GB
5 法國 FR
4. 原始碼
原始碼地址:https://github.com/zwwhnly/mybatis-action.git,歡迎下載。
5. 參考
劉增輝《MyBatis從入門到精通》
IntelliJ IDEA中建立xml檔案
6. 最後
歡迎掃描下方二維碼關注微信公眾號:「申城異鄉人」,部落格內容會同步更新。
相關推薦
MyBatis從入門到精通(一):MyBatis入門
最近在讀劉增輝老師所著的《MyBatis從入門到精通》一書,很有收穫,於是將自己學習的過程以部落格形式輸出,如有錯誤,歡迎指正,如幫助到你,不勝榮幸! 1. MyBatis簡介 2001年,Clinton Begin發起了一個名為iBATIS的開源專案,最初側重於密碼軟體的研發,後來發展成為一款基於Jav
MyBatis從入門到精通(十一):MyBatis高階結果對映之一對多對映
最近在讀劉增輝老師所著的《MyBatis從入門到精通》一書,很有收穫,於是將自己學習的過程以部落格形式輸出,如有錯誤,歡迎指正,如幫助到你,不勝榮幸! 本篇部落格主要講解MyBatis中如何使用collection標籤實現查詢結果一對多對映。 1. 使用collection標籤 需求:根據使用者id查詢使用者
MyBatis從入門到精通(二):MyBatis XML方式的基本用法之Select
最近在讀劉增輝老師所著的《MyBatis從入門到精通》一書,很有收穫,於是將自己學習的過程以部落格形式輸出,如有錯誤,歡迎指正,如幫助到你,不勝榮幸! 1. 明確需求 書中提到的需求是一個基於角色的許可權控制需求(RBAC,即Role-Based Access Control),提到許可權管理,相信大家都不陌
MyBatis從入門到精通(三):MyBatis XML方式的基本用法之多表查詢
最近在讀劉增輝老師所著的《MyBatis從入門到精通》一書,很有收穫,於是將自己學習的過程以部落格形式輸出,如有錯誤,歡迎指正,如幫助到你,不勝榮幸! 1. 多表查詢 上篇部落格中,我們示例的2個查詢都是單表查詢,但實際的業務場景肯定是需要多表查詢的,比如現在有個需求: 查詢某個使用者擁有的所有角色。這個需求
MyBatis從入門到精通(四):MyBatis XML方式的基本用法之增刪改
最近在讀劉增輝老師所著的《MyBatis從入門到精通》一書,很有收穫,於是將自己學習的過程以部落格形式輸出,如有錯誤,歡迎指正,如幫助到你,不勝榮幸! 1. insert用法 1.1 簡單的insert方法 假如現在我們想新增一個使用者,該如何操作呢? 首先,在介面SysUserMapper中新增如下方法。
MyBatis從入門到精通(五):MyBatis 註解方式的基本用法
最近在讀劉增輝老師所著的《MyBatis從入門到精通》一書,很有收穫,於是將自己學習的過程以部落格形式輸出,如有錯誤,歡迎指正,如幫助到你,不勝榮幸! 1. @Select 註解 1.1 使用Sql語句設定別名方式 假設現在有個需求:根據id查詢角色資訊。使用註解方式該如何實現呢? 首先,在介面SysRole
MyBatis從入門到精通(六):MyBatis動態Sql之if標籤的用法
最近在讀劉增輝老師所著的《MyBatis從入門到精通》一書,很有收穫,於是將自己學習的過程以部落格形式輸出,如有錯誤,歡迎指正,如幫助到你,不勝榮幸! 本篇部落格主要講解如何使用if標籤生成動態的Sql,主要包含以下3個場景: 根據查詢條件實現動態查詢 根據引數值實現動態更新某些列 根據引數值實現動態插入某
MyBatis從入門到精通(七):MyBatis動態Sql之choose,where,set標籤的用法
最近在讀劉增輝老師所著的《MyBatis從入門到精通》一書,很有收穫,於是將自己學習的過程以部落格形式輸出,如有錯誤,歡迎指正,如幫助到你,不勝榮幸! 本篇部落格主要講解如何使用choose,where,set標籤生成動態的Sql。 1. choose 用法 假設有這樣1個需求:當引數id有值時優先使用id查
MyBatis從入門到精通(八):MyBatis動態Sql之foreach標籤的用法
最近在讀劉增輝老師所著的《MyBatis從入門到精通》一書,很有收穫,於是將自己學習的過程以部落格形式輸出,如有錯誤,歡迎指正,如幫助到你,不勝榮幸! 本篇部落格主要講解如何使用foreach標籤生成動態的Sql,主要包含以下3個場景: foreach 實現in集合 foreach 實現批量插入 forea
MyBatis從入門到精通(九):MyBatis高階結果對映之一對一對映
最近在讀劉增輝老師所著的《MyBatis從入門到精通》一書,很有收穫,於是將自己學習的過程以部落格形式輸出,如有錯誤,歡迎指正,如幫助到你,不勝榮幸! 本篇部落格主要講解MyBatis中實現查詢結果一對一對映的3種方式: 使用別名實現自動對映 使用resultMap配置 使用resultMap的associ
MyBatis總結一:快速入門
version rac 文件 ctype group esp args select ransac 簡介 MyBatis 是一款優秀的持久層框架,它支持定制化 SQL、存儲過程以及高級映射。MyBatis 避免了幾乎所有的 JDBC 代碼和手動設置參數以及獲取結果集。My
mybatis基礎系列(一)——mybatis入門
好久不發部落格了,寫博文的一個好處是能讓心靜來,整理下之前學習過的一些知識一起分享,大神路過~ mybatis簡介 MyBatis 是一款優秀的持久層框架,它支援定製化 SQL、儲存過程以及高階對映。傳統的 JDBC程式碼通常存在如下問題: 1. 頻繁對資料庫進行連線和關閉,造成資源浪費,效能下降。 2. S
MyBatis學習(1):Mybatis使用詳解和入門案例
前言 MyBatis和Hibernate一樣,是一個優秀的持久層框架。已經說過很多次了,原生的jdbc操作存在大量的重複性程式碼(如註冊驅動,建立連線,建立statement,結果集檢測等)。框架的作用就是把這些繁瑣的程式碼封裝,這樣可以讓程式設計師專注於sq
MyBatis 學習總結(一)——MyBatis 簡單介紹及快速入門
MyBatis 簡單介紹及快速入門 簡單介紹 MyBatis是支援普通SQL查詢,儲存過程和高階對映的優秀持久層框架。MyBatis消除了幾乎所有的JDBC程式碼和引數的手工設定以及對結果集的檢索封裝。MyBatis可以使用簡單的XML或註解用於配置
Docker(一):Docker入門教程
所在 公有 物理 自己的 定性 屬於 apach 占用 重啟 如今Docker的使用已經非常普遍,特別在一線互聯網公司。使用Docker技術可以幫助企業快速水平擴展服務,從而到達彈性部署業務的能力。在雲服務概念興起之後,Docker的使用場景和範圍進一步發展,如今在微服務架
springboot(一):快速入門
pom.xml www. 負責 格式 一個 tools 實體 簡化 mvc 麽是spring boot Spring Boot是由Pivotal團隊提供的全新框架,其設計目的是用來簡化新Spring應用的初始搭建以及開發過程。 使用spring boot有什麽
Hibernate學習一:Hebinate入門以及一些小問題
路徑 java ima maven 註意 添加 cfg.xml mod hbm 1:Hebinate框架的簡述: Hebinate框架主要用用在javaee開發中的dao層設計,實現對數據庫的crud等操作, Hibernate的底層通過jdbc實現,通過對jdbc的封裝
Selenium自動化測試Python一:Selenium入門
Selenium入門 歡迎閱讀Selenium入門講義,本講義將會重點介紹Selenium的入門知識以及Selenium的前置知識。 自動化測試的基礎 在Selenium的課程以前,我們先回顧一下軟體測試的基本原理,為我們進一步完成Selenium自動化測試做好準備。 軟體測試的發展
零基礎學Java10系列一:程式設計入門
本課程主要講解JavaSE的發展歷史,JDK開發環境的搭建,CLASSPATH屬性作用,Java程式基本結構、基本資料型別的劃分及使用、程式結構、方法的定義與使用。本課程是作為Java系列課程的初期課程,掌握本課程之後可以繼續學習Java面向物件程式設計及高階開發部分。
Spring Boot系列教程十一: Mybatis使用分頁外掛PageHelper
一.前言 上篇部落格中介紹了spring boot整合mybatis的方法,基於上篇文章這裡主要介紹如何使用分頁外掛PageHelper。在MyBatis中提供了攔截器介面,我們可以使用PageHelp最為一個外掛裝入到SqlSessionFactory,實現攔截器功能。