日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql及mybatis知识点_MyBatis知识点详解

發(fā)布時間:2023/12/31 数据库 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql及mybatis知识点_MyBatis知识点详解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一:概述

一、概念

1. MyBatis 是支持定制化SQL、存儲過程以及高級映射的優(yōu)秀的持久層框架。

2. MyBatis 可以使用XML或注解將接口和Java的POJO映射成數(shù)據(jù)庫中的記錄。

二、特點

1. 優(yōu)點

1. 簡單易學(xué)切靈活:自身很小,不會對應(yīng)用程序或者數(shù)據(jù)庫的現(xiàn)有設(shè)計強加任何影響。

2.?解除sql與程序代碼的耦合:通過提供DAL層,將業(yè)務(wù)邏輯和數(shù)據(jù)訪問邏輯分離,使系統(tǒng)的設(shè)計更清晰,更易維護,更易單元測試。

2. 缺點

1. 編寫SQL語句時工作量很大,尤其是字段多、關(guān)聯(lián)表多時。

2. SQL語句依賴于數(shù)據(jù)庫,導(dǎo)致數(shù)據(jù)庫移植性差,不能更換數(shù)據(jù)庫。

3. 二級緩存機制不佳。

三、架構(gòu)

1. 功能架構(gòu)

1. API接口層:通過提供給外部使用的接口AP操作數(shù)據(jù)庫I,接收到調(diào)用請求就會調(diào)用數(shù)據(jù)處理層來完成具體的數(shù)據(jù)處理。

2. 數(shù)據(jù)處理層:根據(jù)請求完成數(shù)據(jù)庫操作,包括SQL查找、SQL解析、SQL執(zhí)行和執(zhí)行結(jié)果映射處理等。

3. 基礎(chǔ)支撐層:提供數(shù)據(jù)處理層基礎(chǔ)功能支持,包括連接管理、事務(wù)管理、配置加載和緩存處理等。

2. 框架架構(gòu)

1. 加載配置:將SQL的配置信息(配置文件和注解)加載成為一個個MappedStatement對象并存儲在內(nèi)存。

2. SQL解析:當API接口層接收到調(diào)用請求時,Mybatis會根據(jù)SQL的ID和傳入?yún)?shù)對象找到并解析對應(yīng)的MappedStatement,得到可執(zhí)行SQL。

3. SQL執(zhí)行:將最終得到的SQL和參數(shù)拿到數(shù)據(jù)庫進行執(zhí)行,得到操作數(shù)據(jù)庫的結(jié)果。

4. 結(jié)果映射:將操作數(shù)據(jù)庫的結(jié)果按照映射的配置進行轉(zhuǎn)換,可以轉(zhuǎn)換成HashMap、JavaBean或者基本數(shù)據(jù)類型,并將最終結(jié)果返回。

1. 最新版本

2. 所有版本

3. 官方文檔

二:全局配置文件

一、:屬性配置文件

1. 通過properties子元素(environment中引用)配置

2. 通過properties的屬性配置

3. 通過屬性參數(shù)傳遞配置

二、:設(shè)置運行時行為

三、 :類型別名,減少全限定類名的冗余

1. 單個類:使用別名代替全限定類路徑

1. 配置文件

2. 注解

2. 一個包:自動搜索指定包下的Java bean

四、:類型處理器

1. 定義枚舉類型

2. 實現(xiàn)TypeHandler接口

3. 自定義類型處理器

五、:運行環(huán)境

1. :事務(wù)管理器

1. JDBC:依賴于從數(shù)據(jù)源得到的連接來管理事務(wù)作用域。

2. MANAGED:不提交或回滾。

2. :數(shù)據(jù)源

1. UNPOOLED:每次被請求時打開和關(guān)閉連接

2. POOLED:請求從池中連接

3. JNDI:請求從容器中連接

六、:多數(shù)據(jù)庫支持

1. 配置多個數(shù)據(jù)庫

2. 操作標簽中使用

七、:注冊SQL映射文件

1. 使用相對于類路徑的資源引用

2. 使用完全限定資源定位符

3. 使用映射器接口的全限定類路徑

4. 批量注冊

二、SQL映射文件

一、定義SQL映射關(guān)系

1. resultType和resultMap的區(qū)別

1.resultType(自動結(jié)果集映射):只有查詢出來的列名和pojo中的屬性名一致,MyBatis對自動的給把對應(yīng)的值賦給resultType所指定對象的屬性,該列才可以映射成功。

2.resultMap(自定義結(jié)果集映射):可以將查詢到的復(fù)雜數(shù)據(jù)(比如查詢到幾個表中數(shù)據(jù))映射到一個結(jié)果集當中,是mybatis最強大的元素。

3.resultType和resultMap不能同時存在

2. resultMap的使用

1. 配置映射關(guān)系

2. 配置表主鍵和POJO的主鍵屬性對應(yīng)

3.配置表其他列和POJO的其他屬性

4. 配置關(guān)聯(lián)關(guān)系

1. 關(guān)聯(lián)對象

2. 關(guān)聯(lián)集合

3. 查詢

1. 普通查詢

2. 關(guān)聯(lián)查詢

1. 關(guān)聯(lián)對象(多對一)

1. 多表聯(lián)查

2. 延遲加載(不開啟就是分步查詢)

2. 關(guān)聯(lián)集合(一對多)

1. 多表聯(lián)查

2. 延遲加載(不開啟就是分步查詢)

二、定義SQL語句

1. 增刪改

1. 增

2. 刪

3. 改

2. 獲取自增主鍵

1. MySQL:增刪改標簽增加屬性

2. Oracle:將查詢到的id封裝后傳遞給增刪改語句

3. 返回值

1. 返回list集合

2. 返回map集合

1. 返回一條

2. 返回多條

三、參數(shù)處理

1. 單個參數(shù):不做任何處理

2. 多個參數(shù):將多個參數(shù)封裝成Map,通過索引或param1...paramN獲取

3. 命名參數(shù):將多個參數(shù)封裝成Map,使用@Param指定key

4. POJO:業(yè)務(wù)對象模型

5. Map:將多個參數(shù)封裝成map

6. #{ } 和 ${ }的區(qū)別

1. #{ }:預(yù)編譯處理,防止SQL注入,安全性高。

2. ${ }:字符串替換,拼接或替換原生JDBC不支持占位符的地方(例如按照年份分表)

四:Java API(運行原理)

一、SqlSessionFactoryBuilder

1. 作用:從不同的資源中創(chuàng)建一個 SqlSessionFactory 實例

2. 創(chuàng)建SqlSessionFactory的過程(DefaultSqlSessionFactory類)

1. 通過數(shù)據(jù)源獲取數(shù)據(jù)庫連接,并創(chuàng)建Executor對象以及DefaultSqlSession對象

2. 通過用戶提供數(shù)據(jù)庫連接對象,并創(chuàng)建相應(yīng)的Executor對象以及DefaultSqlSession對象

3. 使用

1. 通過全局配置文件創(chuàng)建

2. 通過自定義創(chuàng)建

二、SqlSessionFactory

1. 作用:創(chuàng)建 SqlSession 實例

2. 創(chuàng)建SqlSession的過程(DefaultSqlSession類)

1. DefaultSqlSession:SqlSession接口的主要實現(xiàn)類,使用策略模式將數(shù)據(jù)庫相關(guān)的操作全部封裝到了Executor接口并通過executor字段選擇不同的Executor實現(xiàn)類。

3. 使用

三、SqlSession

1. 作用:數(shù)據(jù)庫操作

2. 創(chuàng)建Mapper的過程

根據(jù)sqlsession返回一個Mapper代理對象

3. 使用

四、crud的過程

Executor接口:封裝數(shù)據(jù)庫操作的基本方法

1. BaseExecutor:Executor接口的抽象實現(xiàn)類,使用模板方法模式,提供了緩存管理和事物管理的基本功能并定義doUpdate、doQuery、doQueryCursor、doFlushStatement方法

2. SimpleExecutor:每一次創(chuàng)建新的Statement連接對象(執(zhí)行一次SQL)

3. ReuseExecutor:從StatementMap中獲取Statement對象(執(zhí)行多次SQL)

1. ReuseExecutor通過StatementMap字段緩存使用過的Statement對象,key是sql語句,value是對應(yīng)的Statement對象。

2. 和SimpleExecutor的區(qū)別是在prepareStatement方法會嘗試重用StatementMap中的緩存的Statement對象。

4. BatchExecutor:批量操作sql語句的功能(一級緩存機制)

五、MybatisUtil

六、mybatis的四大對象

1.?ParameterHandler:處理SQL的參數(shù)對象

2. ResultSetHandler:處理SQL的返回結(jié)果集

3. StatementHandler:數(shù)據(jù)庫的處理對象,用于執(zhí)行SQL語句

4. Executor:MyBatis的執(zhí)行器,用于執(zhí)行增刪改查操作

五:動態(tài)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:表示以什么結(jié)束

2. 遍歷

1. 遍歷數(shù)組

1. 不用注解

2. 使用注解

2. 遍歷集合

1. 不用注解

2. 使用注解

3. 批量插入

六、內(nèi)置參數(shù)

1. _parameter:代表整個參數(shù)

1. 單個參數(shù):_parameter就是這個參數(shù)

2. 多個參數(shù):_parameter就是代表封裝參數(shù)的map

2. _databaseId:如果配置了databaseIdProvider標簽, _databaseId就是代表當前數(shù)據(jù)庫的別名

六:緩存

一、一級緩存(SqlSession緩存)

1. 工作流程

1. 查詢一級緩存

1. 有:直接返回緩存中的數(shù)據(jù)

2. 沒有:去數(shù)據(jù)庫查詢信息輸出,同時保存到一級緩存中

2. 特點

1. 一級緩存是默認打開的

2. 一級緩存的生命周期是從SqlSession創(chuàng)建到SqlSession關(guān)閉

3. 一級緩存讀取數(shù)據(jù)的依據(jù)是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:軟引用,移除基于垃圾回收器狀態(tài)和軟引用規(guī)則的對象

4. WEAK:弱引用,更積極的移除基于垃圾收集器狀態(tài)和弱引用規(guī)則的對象。

2. flushInterval:刷新間隔時間

3. size:引用數(shù)目

4. readOnly:只讀

2. 關(guān)閉

1. 全部關(guān)閉:設(shè)置為false或者刪除

2. 局部關(guān)閉:select標簽的useCache屬性值設(shè)置為false

3. 刷新緩存:select標簽的flushCache屬性設(shè)置為true

3. 特點

1. 二級緩存是為了解決相同查詢重復(fù)出現(xiàn)的問題

2. 增刪改都會清空二級緩存,但只將key對應(yīng)的value置為null

3. 二級緩存進行select查詢的條件

1. 緩存中不存在key

2. 存在key,但是value值為null

4. 使用原則

1. 多個namespace不要操作同一張表

2. 不要在關(guān)聯(lián)關(guān)系表上執(zhí)行增刪改操作

3. 查詢多于修改時使用二級緩存

三、第三方緩存

1.?ehcache

1. 下載jar包并導(dǎo)入

或者maven配置

2.?下載其依賴的日志包sl4j

或者maven配置

或者maven配置

或者maven配置

2. 編寫ehcache.xml配置文件

3. mapper.xml中使用自定義緩存

如果共享緩存

總結(jié)

以上是生活随笔為你收集整理的mysql及mybatis知识点_MyBatis知识点详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。