持久層架構:直接操作對象 将查詢結果轉換成對象集合 把對象儲存到資料庫 你不用寫太多sql 語句(容易出錯,不利于面向對象)
MyBatis:是一個持久層的架構,避免了幾乎所有的 JDBC 代碼和手動設定參數以及擷取結果集。MyBatis 可使用簡單的 XML 或注解來配置和映射原生資訊,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java對象)映射成資料庫中的記錄。
建構工廠模式 ,拿到資料源,拿到基本配置檔案通過資料源拿到session (專門操作資料庫)
引入jar包:
1.要使用 MyBatis, 隻需将 mybatis-x.x.x.jar 檔案置于 classpath 中即可。
2.maven建構項目:将以下加到pom.xml中;

從 XML 中建構 SqlSessionFactory
xml隻是一種 擷取SqlSessionFactory方式 ( SqlSesionFactoryy有好幾個來源 xml/properties檔案/Configuration執行個體);
可以使用classpath路徑下的資源檔案進行配置,也可以使用檔案流來得到路徑;MyBatis 包含一個名叫 Resources 的工具類,它包含一些實用方法,可使從 classpath 或其他位置加載資源檔案更加容易。
mybatis-config.xml配置檔案:
mybatis核心配置(擷取資料庫連接配接的資料源+事務管理器--管理事務的)Configuration通過Resources的方式讀取配置檔案中資訊(SqlSessionFactoryBuilder 中的方法可以new 一個Configuration 執行個體去加載配置檔案的内容 後生成SqlSessionFactory)
<?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 alias="student" type="com.spring.entry.Student" />
</typeAliases>
<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/test" />
<property name="username" value="root" />
<property name="password" value="123456" />
</dataSource>
</environment>
</environments>
<!--所有的映射注冊-->
<mappers>
<mapper resource="com/spring/mybatis/StudentMapper.xml" />
<mapper class="com.spring.mybatis.TeacherMapper"/>
</mappers>
</configuration>
每個基于 MyBatis 的應用都是以一個 SqlSessionFactory 的執行個體為中心的SqlSessionFactory 的執行個體可以通過 SqlSessionFactoryBuilder 獲得。而 SqlSessionFactoryBuilder 則可以從 XML 配置檔案或一個預先定制的 Configuration 的執行個體建構出 SqlSessionFactory 的執行個體。
不使用 XML 建構 SqlSessionFactory
直接用Java程式建立Configuration執行個體 Configuration添加了映射器類 (mappercalss) 含 SQL 映射語句的注解進而避免了 XML 檔案的依賴(xml裡面存sql 所有的sql語句都可以在xml); new 事務管理器
從 SqlSessionFactory 中擷取 SqlSession:
SqlSession 完全包含了面向資料庫執行 SQL 指令所需的所有方法。你可以通過 SqlSession 執行個體來直接執行已映射的 SQL 語句; opensession相當于打開了一個連接配接;
通過session的方法 相當于直接拿到了一個實體對象(沒有任何封裝)
對于給定語句能夠合理描述參數和傳回值的接口(比如說StudentMapper.class)---你可以自定義session的方法(selectstudentmapper) 利用接口的方式進行可封裝;
sql查出結果跟你的實體進行比對<mapper namespace=""> 通過id (方法名)調用sql 傳回一個對象類型
使用指定的完全限定名“org.mybatis.example.BlogMapper.selectBlog”來調用映射語句命名空間唯一;這個命名可以直接映射到在命名空間中同名的 Mapper 類,并将已映射的 select 語句中的名字、參數和傳回類型比對成方法;
利用命名空間直接調用 實體類.calss
BlogMapper mapper = session.getMapper(BlogMapper.class);
Blog blog = mapper.selectBlog(101);
映射類:用注解替換xml形式(第三種)
映射器是一個你建立來綁定你映射的語句的接口(StudentMapper)。
映射器執行個體(Mapper Instances):從 SqlSession 中獲得的,任何映射器執行個體的最大作用域是和請求它們的 SqlSession 相同的,最好把映射器放在方法作用域(method scope)内;
xml 對應了實體類 id即類中的方法 輸出類型就是該類的類型
session(可操作mapper檔案)
執行:session----->mapper(固定類) 【注解@/xml<....id>】------>mapper 去增删改查
映射器(mappers)
告訴 MyBatis 到哪裡去找映射檔案,可以使用相對于類路徑的資源引用, 或完全限定資源定位符(包括 file:/// 的 URL),或類名和包名等.
Mapper XML 檔案:
MyBatis 的真正強大在于它的映射語句,由于它的異常強大,映射器的 XML 檔案就顯得相對簡單。如果拿它跟具有相同功能的 JDBC 代碼進行對比,你會立即發現省掉了将近 95% 的代碼。MyBatis 就是針對 SQL 建構的。
select:預處理方面優勢‘??’
标簽内置屬性:
Result Maps(解決聯合查詢問題)
resultMap 元素是 MyBatis 中最重要最強大的元素。它可以讓你從 90% 的 JDBC
ResultSets 資料提取代碼中解放出來, 并在一些情形下允許你做一些 JDBC 不支援的事情
傳回值為HashMap類型,HashMap 不是一個很好的領域模型你的程式更可能會使用 JavaBean 或 POJO(Plain Old Java Objects,普通 Java 對象)作為領域模型。 MyBatis 對兩者都支援(對應到對象上)
解決字段名和屬性名不比對的問題
1. 類别名:
這些情況下,MyBatis 會在幕後自動建立一個 ResultMap,再基于屬性名來映射列到 JavaBean 的屬性上。如果列名和屬性名沒有精确比對,可以在 SELECT 語句中對列使用别名(這是一個 基本的 SQL 特性)來比對标簽。比如:
<select id="selectUsers" resultType="User">
select
user_id as "id",
user_name as "userName",
hashed_password as "hashedPassword"
from some_table
where id = #{id}
</select>
2.resultMap :解決列名不比對的另外一種方式(對象裡的對象 1:n關系)
動态 SQL
1.判斷(sql拼接的情況)true--拼接 false--不拼接
2.周遊:
ps:mybatis架構功能強大,我們需要了解其内部原理,更好的運用它!
mybatis官方文檔:http://www.mybatis.org/mybatis-3/zh/index.html