最近在讀劉增輝老師所著的《MyBatis從入門到精通》一書,頗有收穫,因而將本身學習的過程以博客形式輸出,若有錯誤,歡迎指正,如幫助到你,不勝榮幸!html
2001年,Clinton Begin發起了一個名爲iBATIS的開源項目,最初側重於密碼軟件的研發,後來發展成爲一款基於Java的持久層框架。java
2004年,Clinton將iBATIS的名字和源碼捐贈給了Apache軟件基金會。mysql
2010年,核心開發團隊決定離開Apache軟件基金會,而且將iBATIS更名爲MyBatis。git
MyBatis是一款優秀的支持自定義SQL查詢、存儲過程和高級映射的持久層框架,消除了幾乎全部的JDBC代碼和參數的手動設置以及結果集的檢索。MyBatis可使用XML或註解進行配置和映射,MyBatis經過將參數映射到配置的SQL造成最終執行的SQL語句,最後將執行SQL的結果映射成Java對象返回。github
與其餘的ORM(對象關係映射)框架不一樣,MyBatis並無將Java對象與數據庫表關聯起來,而是將Java方法與SQL語句關聯。sql
說明:以上內容瞭解下便可,由於按個人風格,特別不喜歡純理論純文字的東西,看過我以往博客的讀者可能有這個意識,我更喜歡具體代碼實戰,好比如何使用一個新技術,某一段代碼是爲了解決什麼問題……數據庫
關於Maven的相關內容,你們能夠參考我以前的博客Spring入門(四):使用Maven管理Spring項目。apache
我一直認爲,理解一門技術最好的方式,是經過一個具體的例子,好比Hello World,哈哈。api
因此,首先咱們要新建個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項目建立完畢。
首先執行以下語句建立數據庫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');
首先在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>
配置簡單講解:
在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>
配置簡單講解:
在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
在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
源碼地址:https://github.com/zwwhnly/mybatis-action.git,歡迎下載。
劉增輝《MyBatis從入門到精通》
歡迎掃描下方二維碼關注微信公衆號:「申城異鄉人」,博客內容會同步更新。