mysql及mybatis知识点_MyBatis知识点详解
一:概述
一、概念
1. MyBatis 是支持定制化SQL、存儲過程以及高級映射的優秀的持久層框架。
2. MyBatis 可以使用XML或注解將接口和Java的POJO映射成數據庫中的記錄。
二、特點
1. 優點
1. 簡單易學切靈活:自身很小,不會對應用程序或者數據庫的現有設計強加任何影響。
2.?解除sql與程序代碼的耦合:通過提供DAL層,將業務邏輯和數據訪問邏輯分離,使系統的設計更清晰,更易維護,更易單元測試。
2. 缺點
1. 編寫SQL語句時工作量很大,尤其是字段多、關聯表多時。
2. SQL語句依賴于數據庫,導致數據庫移植性差,不能更換數據庫。
3. 二級緩存機制不佳。
三、架構
1. 功能架構
1. API接口層:通過提供給外部使用的接口AP操作數據庫I,接收到調用請求就會調用數據處理層來完成具體的數據處理。
2. 數據處理層:根據請求完成數據庫操作,包括SQL查找、SQL解析、SQL執行和執行結果映射處理等。
3. 基礎支撐層:提供數據處理層基礎功能支持,包括連接管理、事務管理、配置加載和緩存處理等。
2. 框架架構
1. 加載配置:將SQL的配置信息(配置文件和注解)加載成為一個個MappedStatement對象并存儲在內存。
2. SQL解析:當API接口層接收到調用請求時,Mybatis會根據SQL的ID和傳入參數對象找到并解析對應的MappedStatement,得到可執行SQL。
3. SQL執行:將最終得到的SQL和參數拿到數據庫進行執行,得到操作數據庫的結果。
4. 結果映射:將操作數據庫的結果按照映射的配置進行轉換,可以轉換成HashMap、JavaBean或者基本數據類型,并將最終結果返回。
1. 最新版本
2. 所有版本
3. 官方文檔
二:全局配置文件
一、:屬性配置文件
1. 通過properties子元素(environment中引用)配置
2. 通過properties的屬性配置
3. 通過屬性參數傳遞配置
二、:設置運行時行為
三、 :類型別名,減少全限定類名的冗余
1. 單個類:使用別名代替全限定類路徑
1. 配置文件
2. 注解
2. 一個包:自動搜索指定包下的Java bean
四、:類型處理器
1. 定義枚舉類型
2. 實現TypeHandler接口
3. 自定義類型處理器
五、:運行環境
1. :事務管理器
1. JDBC:依賴于從數據源得到的連接來管理事務作用域。
2. MANAGED:不提交或回滾。
2. :數據源
1. UNPOOLED:每次被請求時打開和關閉連接
2. POOLED:請求從池中連接
3. JNDI:請求從容器中連接
六、:多數據庫支持
1. 配置多個數據庫
2. 操作標簽中使用
七、:注冊SQL映射文件
1. 使用相對于類路徑的資源引用
2. 使用完全限定資源定位符
3. 使用映射器接口的全限定類路徑
4. 批量注冊
二、SQL映射文件
一、定義SQL映射關系
1. resultType和resultMap的區別
1.resultType(自動結果集映射):只有查詢出來的列名和pojo中的屬性名一致,MyBatis對自動的給把對應的值賦給resultType所指定對象的屬性,該列才可以映射成功。
2.resultMap(自定義結果集映射):可以將查詢到的復雜數據(比如查詢到幾個表中數據)映射到一個結果集當中,是mybatis最強大的元素。
3.resultType和resultMap不能同時存在
2. resultMap的使用
1. 配置映射關系
2. 配置表主鍵和POJO的主鍵屬性對應
3.配置表其他列和POJO的其他屬性
4. 配置關聯關系
1. 關聯對象
2. 關聯集合
3. 查詢
1. 普通查詢
2. 關聯查詢
1. 關聯對象(多對一)
1. 多表聯查
2. 延遲加載(不開啟就是分步查詢)
2. 關聯集合(一對多)
1. 多表聯查
2. 延遲加載(不開啟就是分步查詢)
二、定義SQL語句
1. 增刪改
1. 增
2. 刪
3. 改
2. 獲取自增主鍵
1. MySQL:增刪改標簽增加屬性
2. Oracle:將查詢到的id封裝后傳遞給增刪改語句
3. 返回值
1. 返回list集合
2. 返回map集合
1. 返回一條
2. 返回多條
三、參數處理
1. 單個參數:不做任何處理
2. 多個參數:將多個參數封裝成Map,通過索引或param1...paramN獲取
3. 命名參數:將多個參數封裝成Map,使用@Param指定key
4. POJO:業務對象模型
5. Map:將多個參數封裝成map
6. #{ } 和 ${ }的區別
1. #{ }:預編譯處理,防止SQL注入,安全性高。
2. ${ }:字符串替換,拼接或替換原生JDBC不支持占位符的地方(例如按照年份分表)
四:Java API(運行原理)
一、SqlSessionFactoryBuilder
1. 作用:從不同的資源中創建一個 SqlSessionFactory 實例
2. 創建SqlSessionFactory的過程(DefaultSqlSessionFactory類)
1. 通過數據源獲取數據庫連接,并創建Executor對象以及DefaultSqlSession對象
2. 通過用戶提供數據庫連接對象,并創建相應的Executor對象以及DefaultSqlSession對象
3. 使用
1. 通過全局配置文件創建
2. 通過自定義創建
二、SqlSessionFactory
1. 作用:創建 SqlSession 實例
2. 創建SqlSession的過程(DefaultSqlSession類)
1. DefaultSqlSession:SqlSession接口的主要實現類,使用策略模式將數據庫相關的操作全部封裝到了Executor接口并通過executor字段選擇不同的Executor實現類。
3. 使用
三、SqlSession
1. 作用:數據庫操作
2. 創建Mapper的過程
根據sqlsession返回一個Mapper代理對象
3. 使用
四、crud的過程
Executor接口:封裝數據庫操作的基本方法
1. BaseExecutor:Executor接口的抽象實現類,使用模板方法模式,提供了緩存管理和事物管理的基本功能并定義doUpdate、doQuery、doQueryCursor、doFlushStatement方法
2. SimpleExecutor:每一次創建新的Statement連接對象(執行一次SQL)
3. ReuseExecutor:從StatementMap中獲取Statement對象(執行多次SQL)
1. ReuseExecutor通過StatementMap字段緩存使用過的Statement對象,key是sql語句,value是對應的Statement對象。
2. 和SimpleExecutor的區別是在prepareStatement方法會嘗試重用StatementMap中的緩存的Statement對象。
4. BatchExecutor:批量操作sql語句的功能(一級緩存機制)
五、MybatisUtil
六、mybatis的四大對象
1.?ParameterHandler:處理SQL的參數對象
2. ResultSetHandler:處理SQL的返回結果集
3. StatementHandler:數據庫的處理對象,用于執行SQL語句
4. Executor:MyBatis的執行器,用于執行增刪改查操作
五:動態SQL
一、if + where:條件判斷
二、if + set:更新
三、choose:多條件選擇(相當于switch)
四、trim:替換和添加
1. 屬性作用
prefix:前綴
suffix:后綴
prefixOverrides:忽略第一個
suffixOverrides:忽略最后一個
2. 替換where:忽略where后直接跟的And或Or
3. 替換set:忽略最后一個逗號
五、foreach:遍歷,使用在IN語句后
1. 屬性作用
item:表示集合中每一個元素進行迭代時的別名
index:指定索引名
open:表示以什么開始
separator:表示在每次進行迭代之間以什么符號作為分隔符
close:表示以什么結束
2. 遍歷
1. 遍歷數組
1. 不用注解
2. 使用注解
2. 遍歷集合
1. 不用注解
2. 使用注解
3. 批量插入
六、內置參數
1. _parameter:代表整個參數
1. 單個參數:_parameter就是這個參數
2. 多個參數:_parameter就是代表封裝參數的map
2. _databaseId:如果配置了databaseIdProvider標簽, _databaseId就是代表當前數據庫的別名
六:緩存
一、一級緩存(SqlSession緩存)
1. 工作流程
1. 查詢一級緩存
1. 有:直接返回緩存中的數據
2. 沒有:去數據庫查詢信息輸出,同時保存到一級緩存中
2. 特點
1. 一級緩存是默認打開的
2. 一級緩存的生命周期是從SqlSession創建到SqlSession關閉
3. 一級緩存讀取數據的依據是Sql的id和Sql語句
4. 增刪改都會清空一級緩存,無論是否提交
二、二級緩存(namespace緩存)
1. 開啟
1.?開啟全局二級緩存
2. POJO類進行序列化
3. 開啟namespace二級緩存
1. eviction:緩存回收策略
1. LRU(Least Recently Used):最近最少使用策略,最長時間不用的對象。
2. FIFO(First In First Out):先進先出策略,按對象進入緩存的順序來移除他們
3. SOFT:軟引用,移除基于垃圾回收器狀態和軟引用規則的對象
4. WEAK:弱引用,更積極的移除基于垃圾收集器狀態和弱引用規則的對象。
2. flushInterval:刷新間隔時間
3. size:引用數目
4. readOnly:只讀
2. 關閉
1. 全部關閉:設置為false或者刪除
2. 局部關閉:select標簽的useCache屬性值設置為false
3. 刷新緩存:select標簽的flushCache屬性設置為true
3. 特點
1. 二級緩存是為了解決相同查詢重復出現的問題
2. 增刪改都會清空二級緩存,但只將key對應的value置為null
3. 二級緩存進行select查詢的條件
1. 緩存中不存在key
2. 存在key,但是value值為null
4. 使用原則
1. 多個namespace不要操作同一張表
2. 不要在關聯關系表上執行增刪改操作
3. 查詢多于修改時使用二級緩存
三、第三方緩存
1.?ehcache
1. 下載jar包并導入
或者maven配置
2.?下載其依賴的日志包sl4j
或者maven配置
或者maven配置
或者maven配置
2. 編寫ehcache.xml配置文件
3. mapper.xml中使用自定義緩存
如果共享緩存
總結
以上是生活随笔為你收集整理的mysql及mybatis知识点_MyBatis知识点详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: docker如何快速搭建几个常用的第三方
- 下一篇: mysql循环队列_数据结构:循环队列