MyBatis研習錄(01)——MyBatis概述與入門

谷哥的小弟發表於2020-02-17

C語言自學完備手冊(33篇)

Android多解析度適配框架

JavaWeb核心技術系列教程

HTML5前端開發實戰系列教程

MySQL資料庫實操教程(35篇圖文版)

推翻自己和過往——自定義View系列教程(10篇)

走出思維困境,踏上精進之路——Android開發進階精華錄

講給Android程式設計師看的前端系列教程(40集免費視訊教程+原始碼)


版權宣告

  • 本文原創作者:谷哥的小弟
  • 作者部落格地址:http://blog.csdn.net/lfdfhl

ORM模型

簡單地說,ORM模型就是資料庫的表與簡單Java物件(Plain Ordinary Java Object,簡稱 POJO)的物件關係對映模型(Object Relational Mapping 簡稱ORM),它主要解決資料庫資料和POJO物件的相互對映。在本系列教程中,我們將詳細介紹輕量級的ORM框架MyBatis。

MyBatis概述

MyBatis 是一款優秀的持久層框架,它支援定製化 SQL、儲存過程以及高階對映。MyBatis原本是apache的一個開源專案iBatis, 2010年該專案由apache software foundation 遷移到了google code並改名為MyBatis 。2013年11月MyBatis又遷移到Github

The MyBatis SQL mapper framework makes it easier to use a relational database with object-oriented applications. MyBatis couples objects with stored procedures or SQL statements using a XML descriptor or annotations. Simplicity is the biggest advantage of the MyBatis data mapper over object relational mapping tools.

MyBatis對JDBC運算元據庫的過程進行了封裝,使開發者只需要關注SQL本身,而不需要開發人員花費大量的精力去處理例如註冊驅動、建立connection、建立statement、手動設定引數等JDBC操作。之前,當我們使用JDBC持久化的時候,sql語句被硬編碼到java程式碼中,耦合度太高程式碼不易於維護;一旦我們修改了Java程式碼就需要對專案進行重新的編譯、打包、釋出。MyBatis將sql語句和java程式碼分開,功能邊界清晰;前者專注於資料,後者側重於業務。


MyBatis入門示例

在此,我們以示例的形式介紹MyBatis的入門示例,詳細步驟如下:

第一步:資料準備

建立資料庫mybatisDatabase和表user

DROP DATABASE IF EXISTS mybatisDatabase;
CREATE DATABASE mybatisDatabase;
use mybatisDatabase;
CREATE TABLE user(
  id INT primary key auto_increment,
  username VARCHAR(50),
  password VARCHAR(50),
  gender VARCHAR(10)
);

INSERT INTO user(username,password,gender) VALUES("lucy","123456","female");
INSERT INTO user(username,password,gender) VALUES("momo","234567","female");
INSERT INTO user(username,password,gender) VALUES("xixi","345678","female");
INSERT INTO user(username,password,gender) VALUES("pepe","456123","female");

SELECT * FROM user;

在這裡插入圖片描述

第二步:建立Java專案

建立普通Java專案並在該專案下新建config和lib資料夾
在這裡插入圖片描述
建立檔案完畢後請對config執行Build Path,圖示如下:
在這裡插入圖片描述

第三步:User

請在cn.com.pojo建立User類

package cn.com.pojo;

public class User {
	private int id;
	private String username;
	private String password;
	private String gender;
	public User() {
		
	}
	
	public User(int id, String username, String password, String gender) {
		this.id = id;
		this.username = username;
		this.password = password;
		this.gender = gender;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public String getGender() {
		return gender;
	}

	public void setGender(String gender) {
		this.gender = gender;
	}

	@Override
	public String toString() {
		return "User [id=" + id + ", username=" + username + ", password=" + password + ", gender=" + gender + "]";
	}
	
}

該User類中各屬性值與user表儘量保持一致。

第四步:新增jar包

請新增以下jar包並Build Path

  • log4j-1.2.17.jar
  • mybatis-3.4.1.jar
  • mysql-connector-java-5.1.7-bin.jar

在這裡插入圖片描述

第五步:log4j.properties

請在config資料夾中建立log4j.properties並編寫其配置,內容如下:

# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

第六步:mybatis-config.xml

在config資料夾中建立mybatis的核心配置檔案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>
  <!-- 配置資料來源 -->
  <environments default="development">
    <environment id="development">
      <transactionManager type="JDBC"/>
      <dataSource type="POOLED">
        <property name="driver" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/mybatisDatabase"/>
        <property name="username" value="root"/>
        <property name="password" value="root"/>
      </dataSource>
    </environment>
  </environments>
   
</configuration>

該配置檔案environments標籤主要用於配置資料庫相關資訊。至於,mybatis-config.xml檔案中的其它常用配置,我們在後續的教程中會提到。

第七步:UserMapper.xml

在User的同級目錄中建立對映檔案UserMapper.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="cn.com.pojo.User">	
  <select id="selectUserById" parameterType="int" resultType="cn.com.pojo.User">
    select id,username,password,gender from user where id = #{id}
  </select>
</mapper>

該mapper的核心功能為:從資料庫中查詢資料並將查詢結果封裝成JavaBean物件。

在該配置檔案中:

  • namespace表示該mapper的名稱空間,其取值為JavaBean的全類名或Mapper介面的全類名
  • select標籤表示select語句。其中,id屬性用於為sql語句配置唯一標識;parameterType屬性用於表示輸入引數的型別,一般來說可以省略該屬性,但是,如果引數是pojo建議不省略;resultType屬性用於指定執行select查詢語句之後每行記錄對應的JavaBean物件的全類名。
  • 在mapper.xml中使用#{ }表示佔位符,類似於JDBC中的佔位符?

在完成UserMapper.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>
  <!-- 配置資料來源 -->
  <environments default="development">
    <environment id="development">
      <transactionManager type="JDBC"/>
      <dataSource type="POOLED">
        <property name="driver" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/mybatisDatabase"/>
        <property name="username" value="root"/>
        <property name="password" value="root"/>
      </dataSource>
    </environment>
  </environments>
  
  <!-- 配置mapper -->
  <mappers>
    <mapper resource="cn/com/pojo/UserMapper.xml"/>
  </mappers>
  
</configuration>

通過mappers標籤配置各mapper。在mapper標籤中使用resource屬性指定mapper的路徑,其形式為斜槓形式的全路徑。

第八步:測試

程式碼如下:

package cn.com.test;

import java.io.InputStream;
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.Test;
import cn.com.pojo.User;
/**
 * 本文作者:谷哥的小弟 
 * 部落格地址:http://blog.csdn.net/lfdfhl
 */
public class MybatisTest {

	@Test
	public void testMybatis() {
		SqlSession sqlSession = null;
		try {
			// 讀取mybatis的核心配置檔案mybatis-config.xml
			InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
			// 建立SqlSessionFactoryBuilder物件
			SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
			// 通過SqlSessionFactoryBuilder解析配置檔案獲取sqlSessionFactory物件
			SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
			// 通過SqlSessionFactory物件建立SqlSession物件
			sqlSession = sqlSessionFactory.openSession();
			// 利用selectOne()執行查詢
			User user = sqlSession.selectOne("cn.com.pojo.User.selectUserById", 1);
			System.out.println(user);
		} catch (Exception e) {

		} finally {
			// 關閉SqlSession
			if (sqlSession != null) {
				sqlSession.close();
			}
		}
	}

}

要點概述:

  • 1、通過org.apache.ibatis.io.Resources讀取mybatis的核心配置檔案mybatis-config.xml
  • 2、通過SqlSessionFactoryBuilder物件生成sqlSessionFactory物件
  • 3、通過SqlSessionFactory物件建立SqlSession物件。該物件的作用類似於JDBC中的Connection物件,所以在執行完資料庫操作後需對其進行關閉操作。
  • 4、通過SqlSession的selectOne( )方法執行返回結果只有一條記錄的sql查詢語句。該方法第一個引數將要執行的sql語句,其格式為:名稱空間.sql語句的id值;該方法第二引數為替換sql語句中佔位符的引數值。
  • 5、執行完查詢操作後關閉SqlSession。

結果如下:
在這裡插入圖片描述

MyBatis入門示例總結

  • 1、mybatis-config.xml是mybatis的核心配置檔案
  • 2、mapper.xml用於定義與資料庫相關的sql語句
  • 3、SqlSession用於執行資料庫操作

Eclipse中關聯MyBatis原始碼

為在開發過程中便捷檢視MyBatis原始碼,我們需要在Eclipse對其進行關聯。

第一步

下載原始碼並存放至本地,圖示如下:
在這裡插入圖片描述

第二步

在Eclipse的專案中找到mybatis-3.4.1.jar,圖示如下:
在這裡插入圖片描述

第三步

選中mybatis-3.4.1.jar右鍵選擇Properties後再新增剛才下載好的原始碼檔案mybatis-3.4.1-src.zip,圖示如下:
在這裡插入圖片描述
最後,單擊 Apply and Close即可。

相關文章