1.mybatis簡介
在說mybatis之前,我們先來說一下ORM框架,
ORM(object Relational Mapping)物件關系映射,將程式中的一個物件與表中的一行資料一一對應,
如果我們要使用JDBC來完成ORM的操作,想一想我們需要多少操作?
首先匯入關于操作資料庫的類,然后建立連接,輸入sql陳述句對資料庫進行操作,如果是查詢操作,我們還需要建立物件去接受查到的資料,最后關閉連接,回傳相應值,
聽起來不麻煩,但是當資料特別多的時候,這樣的操作就顯得復雜,所以我們需要一個框架來幫我們簡化一下工程,
mybatis就是這樣的框架,他省略了很多底層的操作,我們只需要配置相應檔案,寫出sql陳述句,剩下的mybatis都會幫我們解決,
MyBatis 是一個基于 Java 的持久層框架,MyBatis 提供的持久層框架包括 SQL Maps 和 Data Access Objects(DAO),它消除了幾乎所有的 JDBC 代碼和引數的手工設定以及結果集的檢索,
MyBatis 使用簡單的 XML 或注解用于配置和原始映射,將介面和 Java 的 POJOs(Plain Old Java Objects,普通的 Java 物件)映射成資料庫中的記錄,
2.mybatis作業原理
2.1 讀取組態檔
我們有一個mybatis-config.xml作組態檔,它配置了mybatis的運行環境資訊以及相關的資料庫連接資訊/
下面是mybatis-cofig.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="org.apache.ibatis.datasource.pooled.PooledDataSourceFactory">
<property name="driver" value="https://www.cnblogs.com/lisuhang/p/com.mysql.jdbc.Driver"/>
<property name="url" value="https://www.cnblogs.com/lisuhang/p/jdbc.url"/>
<property name="username" value="https://www.cnblogs.com/lisuhang/p/root"/>
<property name="password" value="https://www.cnblogs.com/lisuhang/p/xxx"/>
</dataSource>
</environment>
</environments>
<mappers>
<!--注冊Mapper檔案所在的位置-->
<mapper resource="xxxMapper.xml"/>
</mappers>
</configuration>
2.2 加載映射檔案
加載映射檔案,映射檔案即 SQL 映射檔案,該檔案中配置了操作資料庫的 SQL 陳述句,需要在 MyBatis 組態檔 mybatis-config.xml 中加載,mybatis-config.xml 檔案可以加載多個映射檔案,每個檔案對應資料庫中的一張表,
即上述的Mapper.xml檔案
下面是簡略的Mapper.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.dao.daoInterface.UserDao">
<select id="xxx(介面方法)" resultType="com.bean.User(回傳型別)">
SELECT id,.....
FROM t_user
WHERE id = #{arg0}(介面方法的引數,arg0代表第一個引數)
</select>
</mapper>
2.3構造會話工廠并創建會話物件
通過 MyBatis 的環境等配置資訊構建會話工廠 SqlSessionFactory,
由會話工廠創建 SqlSession 物件,該物件中包含了執行 SQL 陳述句的所有方法,
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build("加載的組態檔的資訊");
SqlSession sqlSession = sqlSessionFactory.openSession();
3.3SqlSession物件完成和資料庫的互動
UserDao mapper = sqlSession.getiMapper(UserDao.class);
User user = mapper.xxx(介面中的方法)(引數);
a.用戶程式呼叫mybatis介面層api(即Mapper介面中的方法)
b.SqlSession通過呼叫api的Statement ID找到對應的MappedStatement物件
c.通過Executor(負責動態SQL的生成和查詢快取的維護)將MappedStatement物件進行決議,sql引數轉化、動態sql拼接,生成jdbc Statement物件
d.JDBC執行sql,
e.借助 MappedStatement 中的結果映射關系,將回傳結果轉化成 HashMap、JavaBean 等存盤結構并回傳,
3.mybatis核心組件
3.1SqlSessionFactoryBuilder(構造器)
SqlSessionFactoryBuilder這個類的作用就是為了創建SqlSessionFactory的,它會根據配置或者代碼來生成 SqlSessionFactory,采用的是分步構建的 Builder 模式,
3.2SqlSessionFactory(工廠介面)
SqlSessionFactory是MyBatis的關鍵物件,它是個單個資料庫映射關系經過編譯后的記憶體鏡像,依靠它來生成 SqlSession,使用的是工廠模式,
3.3SqlSession(會話)
一個既可以發送 SQL 執行回傳結果,也可以獲取 Mapper 的介面,
3.4SQL Mapper(映射器)
MyBatis 新設計存在的組件,它由一個 Java 介面和 XML 檔案(或注解)構成,需要給出對應的 SQL 和映射規則,它負責發送 SQL 去執行,并回傳結果,
文章參考于Mybatis以及大佬博客,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/263646.html
標籤:Java
