1. 程式人生 > >JAVA持久層框架——MyBatis01

JAVA持久層框架——MyBatis01

   MyBatis 本是apache的一個開源專案iBatis, 2010年這個專案由apache software foundation 遷移到了google code,並且改名為MyBatis。2013年11月遷移到Github。

   一.MyBatis的優點:

1.簡化JDBC程式設計

   MyBatis和Hibernate都是優秀的持久層框架,發明它們的目的之一就是簡化jdbc程式設計。這些框架封裝了JDBC操作的細節過程,大大簡化了開發,讓開發人員更好的集中精力實現業務邏輯。

2.易於SQL優化

     Hibernate完全的O/R對映使得我們沒法根據實際業務優化SQL語句,所以無法滿足特殊的業務需求和高效能業務,MyBatis正好彌補了這個空白。

確切點說MyBatis最重要的就是寫好SQL,包括寫好SQL語句和寫好SQL對映

·SQL語句就是標準的SQL語句(可以在當前選用的資料庫產品下,根據需求使用該產品下的SQL函式

·SQL對映包括:引數對映和返回值對映(返回值只針對查詢,增刪改是沒有返回值的

●【引數對映】(也叫做【輸入對映】)

MyBatisjava物件傳入給SQL語句引數的過程。

●【返回值對映】(也叫做【輸出對映】)

MyBatis將SQL查詢的結果集處理成一個java物件並返回給java程式的過程。

●【java物件】

如果傳遞單個引數,變數可以是簡單型別:int、long、float、String、Integer、Long、Boolean、Float等。

如果傳遞多個引數,必須使用實體類封裝,封裝後再傳給sql。有一個名詞叫pojo(Plain Ordinary Java Object),裡面有許多屬性以及它們的getter/setter方法。

實體類==Java bean==pojo,它們沒有區別,就是換種叫法而已。

SQL語句以及對映寫在xml或註解中。

二.MyBatis訪問資料庫的核心構成

 

從這個結構圖要明確知道MyBatis訪問資料庫的核心構成包括三個核心類和兩種配置檔案。

三個核心類:SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession;

兩種配置檔案:MyBatis核心配置檔案(一個)、MyBatis對映檔案(多個)。

瞭解了核心構成,下面主要學習的就是SQL的對映規範了,也就是在MyBatis中如何寫SQL。只要按照規範寫SQL,MyBatis就能自動的幫助我們完成具體的對映工作。

三.MyBatis小demo環境搭建

第一步:建立資料庫表

第二步:建立工程

建立一個普通java工程。

第三步:匯入jar包

這裡我們用到【MyBatis的jar包】和【mysql的jar包】。

第四步:框架的配置檔案

1.核心配置檔案

在config下建立MyBatisConfig.xml(也有人叫SqlMapConfig.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:當前預設使用的資料庫環境
	 -->
	<environments default="dev">
		<!-- 開發資料庫環境的配置 -->
		<!-- 
			environment:表示一個數據庫環境配置的標籤
			id:表示唯一標識一個數據庫環境
		 -->
		<environment id="dev">
			<!-- 事務管理的配置 -->
			<!-- 
				transactionManager:表示事務管理的配置標籤
				type:表示事務管理的型別,由於MyBatis是對JDBC的封裝,所以通常使用JDBC的事務
			 -->
			<transactionManager type="JDBC"/>
			<!-- 資料來源配置:driver, url, username, password -->
			<!-- 
				dataSource:表示資料來源的配置標籤
				type:表示資料來源的型別,標識是否支援資料庫連線池
					POOLED:表示支援資料庫連線池的資料來源
					UNPOOLED:表示不支援資料庫連線池的資料來源
			 -->
			<dataSource type="POOLED">
				<property name="driver" value="com.mysql.jdbc.Driver"/>
				<property name="url" value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8"/>
				<property name="username" value="root"/>
				<property name="password" value="123"/>
			</dataSource>
		</environment>
	</environments>
<!-- 配置對映檔案 -->
	<mappers>
		<!-- 通過對映檔案在編譯後類目錄下的相對路徑載入對映檔案
		resource:用來指定對映檔案的相對路徑
		 -->
		<mapper resource="cn/itcast/mapper/UserMapper.xml" />
	</mappers>
</configuration>

這個檔案就是MyBatis的核心配置檔案,裡面主要配置連線資料庫的資料來源、事務管理以及MyBatis的對映檔案有哪些。

這裡大概知道里面配置的是資料庫資訊就可以了,因為到實際專案中框架整合後就不用這麼配置了,所以它的實用價值不大,這裡只是臨時這麼用一下。

2.SQL對映

<?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">
<!-- namespace:是一個SQL對映檔案的唯一標識,不能重名 -->
<mapper namespace="user">
	<!-- SQL對映 -->
</mapper>

第六步:測試環境

public class MyTest {
	@Test
	public void envTest() throws Exception {
		SqlSession sqlSession = null;
		try {
			// 1. 讀取配置檔案(MyBatis有專門讀取配置檔案的工具類Resources)
			InputStream inputStream = Resources.getResourceAsStream("MyBatisCofig.xml");
			// 2. 根據主配置檔案建立會話工廠
			SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
			// 3. 根據會話工廠建立會話物件
			// 業務層通過SqlSession物件來訪問資料庫進行CRUD操作,每個執行方法中會話物件要私有
			sqlSession = sqlSessionFactory.openSession();
			System.out.println(sqlSession);
		} catch(Exception e) {
			e.printStackTrace();
			throw e;
		} finally {
			// 關閉會話
			sqlSession.close();
		}
	}
}