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對映包括:引數對映和返回值對映(返回值只針對查詢,增刪改是沒有返回值的)
●【引數對映】(也叫做【輸入對映】)
MyBatis將java物件傳入給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();
}
}
}