共計 4294 個字符,預(yù)計需要花費(fèi) 11 分鐘才能閱讀完成。
這篇文章將為大家詳細(xì)講解有關(guān) Mybatis 有什么用,丸趣 TV 小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
簡介
MyBatis 的前身叫 iBatis,本是 apache 的一個開源項目, 2010 年這個項目由 apache software foundation 遷移到了 google code,并且改名為 MyBatis。MyBatis 是支持普通 SQL 查詢,存儲過程和高級映射的優(yōu)秀持久層框架。MyBatis 消除了幾乎所有的 JDBC 代碼和參數(shù)的手工設(shè)置以及結(jié)果集的檢索。MyBatis 使用簡單的 XML 或注解用于配置和原始映射,將接口和 Java 的 POJOs(Plan Old Java Objects,普通的 Java 對象)映射成數(shù)據(jù)庫中的記錄。
Mybatis 的功能架構(gòu)分為三層(圖片借用了百度百科):
1) API 接口層:提供給外部使用的接口 API,開發(fā)人員通過這些本地 API 來操縱數(shù)據(jù)庫。接口層一接收到調(diào)用請求就會調(diào)用數(shù)據(jù)處理層來完成具體的數(shù)據(jù)處理。
2) 數(shù)據(jù)處理層:負(fù)責(zé)具體的 SQL 查找、SQL 解析、SQL 執(zhí)行和執(zhí)行結(jié)果映射處理等。它主要的目的是根據(jù)調(diào)用的請求完成一次數(shù)據(jù)庫操作。
3) 基礎(chǔ)支撐層:負(fù)責(zé)最基礎(chǔ)的功能支撐,包括連接管理、事務(wù)管理、配置加載和緩存處理,這些都是共用的東西,將他們抽取出來作為最基礎(chǔ)的組件。為上層的數(shù)據(jù)處理層提供最基礎(chǔ)的支撐。
快速入門
Mybatis 的整體流程圖
SqlSessionFactoryBuilder
每一個 MyBatis 的應(yīng)用程序的入口是 SqlSessionFactoryBuilder,它的作用是通過 XML 配置文件創(chuàng)建 Configuration 對象(當(dāng)然也可以在程序中自行創(chuàng)建),然后通過 build 方法創(chuàng)建 SqlSessionFactory 對象。沒有必要每次訪問 Mybatis 就創(chuàng)建一次 SqlSessionFactoryBuilder,通常的做法是創(chuàng)建一個全局的對象就可以了。示例程序如下:
[java] view plain copy
private static SqlSessionFactoryBuilder sqlSessionFactoryBuilder;
private static SqlSessionFactory sqlSessionFactory;
private static void init() throws IOException {
String resource = mybatis-config.xml ;
Reader reader = Resources.getResourceAsReader(resource);
sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
sqlSessionFactory = sqlSessionFactoryBuilder.build(reader);
}
SqlSessionFactory
SqlSessionFactory 對象由 SqlSessionFactoryBuilder 創(chuàng)建。它的主要功能是創(chuàng)建 SqlSession 對象,和 SqlSessionFactoryBuilder 對象一樣,沒有必要每次訪問 Mybatis 就創(chuàng)建一次 SqlSessionFactory,通常的做法是創(chuàng)建一個全局的對象就可以了。SqlSessionFactory 對象一個必要的屬性是 Configuration 對象, 它是保存 Mybatis 全局配置的一個配置對象,通常由 SqlSessionFactoryBuilder 從 XML 配置文件創(chuàng)建。這里給出一個簡單的示例:
[html] view plain copy
?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
!– 配置別名 —
typeAliases
typeAlias type= org.iMybatis.abc.dao.UserDao alias= UserDao /
typeAlias type= org.iMybatis.abc.dto.UserDto alias= UserDto /
/typeAliases
!– 配置環(huán)境變量 —
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://127.0.0.1:3306/iMybatis?characterEncoding=GBK /
property name= username value= iMybatis /
property name= password value= iMybatis /
/dataSource
/environment
/environments
!– 配置 mappers —
mappers
mapper resource= org/iMybatis/abc/dao/UserDao.xml /
/mappers
/configuration
要注意 XML 頭部的聲明,需要用來驗證 XML 文檔正確性。typeAliases 元素是包含所有 typeAlias(別名)的列表,別名用來替換完整類名,這樣在需要完整類名的地方就可以用別名來代替。environment 元素體中包含對事務(wù)管理和連接池的環(huán)境配置。mappers 元素是包含所有 mapper(映射器)的列表,這些 mapper 的 XML 文件包含 SQL 代碼和映射定義信息。當(dāng)然,在 XML 配置文件中還有很多可以配置的,上面的示例指出的則是最關(guān)鍵的部分,其他配置請參考 Mybatis 的官方文檔。
SqlSession
SqlSession 對象的主要功能是完成一次數(shù)據(jù)庫的訪問和結(jié)果的映射,它類似于數(shù)據(jù)庫的 session 概念,由于不是線程安全的,所以 SqlSession 對象的作用域需限制方法內(nèi)。SqlSession 的默認(rèn)實現(xiàn)類是 DefaultSqlSession,它有兩個必須配置的屬性:Configuration 和 Executor。Configuration 前文已經(jīng)描述這里不再多說。SqlSession 對數(shù)據(jù)庫的操作都是通過 Executor 來完成的,Executor 的具體功能在下一小節(jié)在描述。
到目前為止,我們看到的都是 mybatis 的流程,我們的應(yīng)用程序在什么地方插入到這個流程中并獲得我們想要的結(jié)果呢?就是 SqlSession 這里。SqlSession 有一個重要的方法 getMapper,顧名思義,這個方式是用來獲取 Mapper 對象的。什么是 Mapper 對象?根據(jù) Mybatis 的官方手冊,應(yīng)用程序除了要初始并啟動 Mybatis 之外,還需要定義一些接口,接口里定義訪問數(shù)據(jù)庫的方法,存放接口的包路徑下需要放置同名的 XML 配置文件。SqlSession 的 getMapper 方法是聯(lián)系應(yīng)用程序和 Mybatis 紐帶,應(yīng)用程序訪問 getMapper 時,Mybatis 會根據(jù)傳入的接口類型和對應(yīng)的 XML 配置文件生成一個代理對象,這個代理對象就叫 Mapper 對象。應(yīng)用程序獲得 Mapper 對象后,就應(yīng)該通過這個 Mapper 對象來訪問 Mybatis 的 SqlSession 對象,這樣就達(dá)到里插入到 Mybatis 流程的目的。示例代碼如下:
[java] view plain copy
SqlSession session= sqlSessionFactory.openSession();
UserDao userDao = session.getMapper(UserDao.class);
UserDto user = new UserDto();
user.setUsername(iMybatis);
List UserDto users = userDao.queryUsers(user);
對應(yīng)的接口:
[java] view plain copy
public interface UserDao {
public List UserDto queryUsers(UserDto user) throws Exception;
}
對應(yīng)的配置文件:
[html] view plain copy
?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= org.iMybatis.abc.dao.UserDao
select id= queryUsers parameterType= UserDto resultType= UserDto
useCache= false
![CDATA[
select * from t_user t where t.username = #{username}
]]
/select
/mapper
Executor
Executor 對象在創(chuàng)建 Configuration 對象的時候創(chuàng)建,并且緩存在 Configuration 對象里。Executor 對象的主要功能是調(diào)用 StatementHandler 訪問數(shù)據(jù)庫,并將查詢結(jié)果存入緩存中(如果配置了緩存的話)。
StatementHandler
StatementHandler 是真正訪問數(shù)據(jù)庫的地方,并調(diào)用 ResultSetHandler 處理查詢結(jié)果。
ResultSetHandler
處理查詢結(jié)果
關(guān)于“Mybatis 有什么用”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學(xué)到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。