摘要:學(xué)習(xí)筆記有官方的中文開發(fā)文檔并且針對使用者比較友好是一款優(yōu)秀的持久層框架,它支持定制化存儲過程以及高級映射。它只和配置有關(guān),存在的意義僅在于用來減少類完全限定名的冗余,為了簡化中的書寫。
Mybatis學(xué)習(xí)筆記
mybatis有官方的中文開發(fā)文檔并且針對使用者比較友好:http://www.mybatis.org/mybatis-3/zh/
MyBatis 是一款優(yōu)秀的持久層框架,它支持定制化 SQL、存儲過程以及高級映射。MyBatis 避免了幾乎所有的 JDBC 代碼和手動設(shè)置參數(shù)以及獲取結(jié)果集。MyBatis 可以使用簡單的 XML 或注解來配置和映射原生信息,將接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java對象)映射成數(shù)據(jù)庫中的記錄。
在mybatis中有這么幾個需要關(guān)注的點(diǎn):mybatis的配置文件mybatis-config.xml
properties 屬性 settings 設(shè)置 typeAliases 類型別名 typeHandlers 類型處理器 objectFactory 對象工廠 plugins 插件 environments 環(huán)境 environment 環(huán)境變量 transactionManager 事務(wù)管理器 dataSource 數(shù)據(jù)源 databaseIdProvider 數(shù)據(jù)庫廠商標(biāo)識 mappers 映射器
這是mybatist配置文件中需要配置的屬性, 有些屬性可以配置,有些屬性可以不配置, 但是所有的屬性配置按照以上的順序進(jìn)行, 否則會出現(xiàn)配置錯誤。
首先是對properties的配置,可以引入 .properties 文件,作為信息,例如jdbc.properties
jdbc.properties中的內(nèi)容
jdbc.username=root
jdbc.password=root
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/db_mybatis_demo?serverTimezone=GMT&useSSL=false
如果使用這種方式配置最好加上jdbc.xxxx避免與編輯器或系統(tǒng)變量產(chǎn)生沖突,以致于連接數(shù)據(jù)庫失敗。
如果直接在 properties 元素體內(nèi)指定屬性值也是可以的,,以上配置的方式作為第二種方式, 還可以通過java代碼的方式來引入配置。屬性也可以被傳遞到 SqlSessionFactoryBuilder.build()方法中,
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, props); // ... or ... SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, environment, props);
這以上的三種方式優(yōu)先級遞增, 如果同時配置了,將會使用最后一種中的值。(推薦使用第二種方式),另外還有默認(rèn)值配置, 詳見文檔。
下面是對 setting 的講解
這是 MyBatis 中極為重要的調(diào)整設(shè)置,它們會改變 MyBatis 的運(yùn)行時行為。setting有諸多屬性, 官方文檔中對這些屬性有詳盡的介紹, 按需配置。例如:
typeAliases 別名
類型別名是為 Java 類型設(shè)置一個短的名字。它只和 XML 配置有關(guān),存在的意義僅在于用來減少類完全限定名的冗余,為了簡化xxxMapper.xml中的書寫。例如
mybatis-config.xml
UserMapper.xml
也可以指定一個包名,MyBatis 會在包名下面搜索需要的 Java Bean,比如:
這里有一點(diǎn)值得注意的是Mapper.xml中得明明空間不能使用別名, 只能使用類路徑名,例如:
typeHandlers 類型處理器
使用這個的類型處理器將會覆蓋已經(jīng)存在的處理 Java 的 String 類型屬性和 VARCHAR 參數(shù)及結(jié)果的類型處理器。 要注意 MyBatis 不會窺探數(shù)據(jù)庫元信息來決定使用哪種類型,所以你必須在參數(shù)和結(jié)果映射中指明那是 VARCHAR 類型的字段, 以使其能夠綁定到正確的類型處理器上。 這是因?yàn)椋篗yBatis 直到語句被執(zhí)行才清楚數(shù)據(jù)類型。(這個我在后面的demo中使用了用的是枚舉類型的SexEnum)
objectFactory 對象工廠
(沒有使用過,詳見官方文檔)
plugins 插件
MyBatis 允許你在已映射語句執(zhí)行過程中的某一點(diǎn)進(jìn)行攔截調(diào)用。
這里我使用了 pagehelper 分頁的插件,地址是https://pagehelper.github.io/
environments 配置環(huán)境
MyBatis 可以配置成適應(yīng)多種環(huán)境,這種機(jī)制有助于將 SQL 映射應(yīng)用于多種數(shù)據(jù)庫之中, 現(xiàn)實(shí)情況下有多種理由需要這么做。例如,開發(fā)、測試和生產(chǎn)環(huán)境需要有不同的配置;或者共享相同 Schema 的多個生產(chǎn)數(shù)據(jù)庫, 想使用相同的 SQL 映射。許多類似的用例。
默認(rèn)的環(huán)境 ID(比如:default=”development”)。 每個 environment 元素定義的環(huán)境 ID(比如:id=”development”)。 事務(wù)管理器的配置(比如:type=”JDBC”)。 數(shù)據(jù)源的配置(比如:type=”POOLED”)。
由于mybatis少多帶帶使用, 大多情況下會結(jié)合spring使用, 所以我們并不用太關(guān)系他的事務(wù)管理,因?yàn)閟pring會做這件事。
Mapper映射器
既然 MyBatis 的行為已經(jīng)由上述元素配置完了,我們現(xiàn)在就要定義 SQL 映射語句了。但是首先我們需要告訴 MyBatis 到哪里去找到這些語句。 Java 在自動查找這方面沒有提供一個很好的方法,所以最佳的方式是告訴 MyBatis 到哪里去找映射文件。
com/ultrapower/practice.mybatis/mapper/UserMapper.xml
文檔中有幾種不同的方式, 請選用適合你的方式。
Mapper XML 文件select
insert
update
delete
這四個語句是最長用的幾個語句,在文檔中應(yīng)用的屬性有詳細(xì)的說明。這里有個例子:
需要注意的一點(diǎn)是在使用username的時候?qū)?username進(jìn)行了一次判斷, 這里不僅需要判斷username是否為null, 還要判斷是否為 "",但是一般會錯寫為
另外還需要對大于小于等符號進(jìn)行轉(zhuǎn)義, 如上述age的操作。
<還沒有看resultmap的高級映射>
動態(tài)sqlMyBatis 的強(qiáng)大特性之一便是它的動態(tài) SQL。如果你有使用 JDBC 或其他類似框架的經(jīng)驗(yàn),你就能體會到根據(jù)不同條件拼接 SQL 語句有多么痛苦。拼接的時候要確保不能忘了必要的空格,還要注意省掉列名列表最后的逗號。利用動態(tài) SQL 這一特性可以徹底擺脫這種痛苦。
有些時候,我們不想用到所有的條件語句,而只想從中擇其一二。針對這種情況,MyBatis 提供了 choose 元素,它有點(diǎn)像 Java 中的 switch 語句。
foreach
動態(tài) SQL 的另外一個常用的必要操作是需要對一個集合進(jìn)行遍歷,通常是在構(gòu)建 IN 條件語句的時候。
在mybatis中還有兩個符號需要注意:
1. 符號#{} 解析為一個 JDBC 預(yù)編譯語句(prepared statement)的參數(shù)標(biāo)記符。 2. 一個 #{ } 被解析為一個參數(shù)占位符 ? 。 3. ${} 僅僅為一個純碎的 string 替換,在動態(tài) SQL 解析階段將會進(jìn)行變量替換 4. 表名作為變量時,必須使用 ${} 5. 能用#{}就用#{},因?yàn)樗鼤ql進(jìn)行預(yù)編譯, 可以提高性能。
針對以上的所講的功能實(shí)現(xiàn)了一個demo,只包含mybatis的相關(guān)內(nèi)容:
在這可以去github下載源碼
集合、高級映射、handlerType(后面補(bǔ))
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/68462.html
摘要:要想使用需要在的中導(dǎo)入包和的驅(qū)動包每個基于的應(yīng)用都是以一個的實(shí)例為中心的的實(shí)例可以通過獲得則可以從配置文件或一個預(yù)先定制的的實(shí)例構(gòu)建出的實(shí)例配置文件中包含了對系統(tǒng)的核心設(shè)置,包含獲取數(shù)據(jù)庫連接實(shí)例的數(shù)據(jù)源和決定事務(wù)作用域和控制方式的事 1 要想使用mybatis 需要在maven的pom.xml中導(dǎo)入jar包和mysql的驅(qū)動包 org.mybatis ...
摘要:目標(biāo)創(chuàng)建一個簡單的框架的程序,實(shí)現(xiàn)對數(shù)據(jù)庫的讀取操作。的核心配置文件核心配置文件,配置數(shù)據(jù)庫連接信息事物等每一個都需要在核心配置文件中注冊工具類獲取第一步獲取對象既然有了,顧名思義,我們可以從中獲得的實(shí)例。 ...
摘要:關(guān)閉進(jìn)程問題順利解決。問題泄也是一個奇葩的問題,百度一下,原來碰到的人挺多,原因就是高版本的驅(qū)動會有數(shù)據(jù)庫和系統(tǒng)時區(qū)差異我用的版本是,所以碰到了,修改下配置,執(zhí)行時區(qū)就可以了或者用回版本,該版本不會存在時區(qū)問題。 本文主要在上一篇Spring Boot學(xué)習(xí)筆記(四)構(gòu)建RESTful API標(biāo)準(zhǔn)工程實(shí)例的基礎(chǔ)上,整合MyBatis,實(shí)現(xiàn)簡單的MySql數(shù)據(jù)庫訪問 引入依賴 這里主要依賴...
摘要:前兩篇已經(jīng)構(gòu)建了標(biāo)準(zhǔn)工程實(shí)例,也整合了實(shí)現(xiàn)了簡單數(shù)據(jù)庫訪問,本篇主要更深入的學(xué)習(xí)下,實(shí)現(xiàn)較為完整的數(shù)據(jù)庫的標(biāo)準(zhǔn)服務(wù)。到這里,最復(fù)雜的數(shù)據(jù)訪問基本就算編寫完了。 前兩篇已經(jīng)構(gòu)建了RESTful API標(biāo)準(zhǔn)工程實(shí)例,也整合了MyBatis實(shí)現(xiàn)了簡單數(shù)據(jù)庫訪問,本篇主要更深入的學(xué)習(xí)下,實(shí)現(xiàn)較為完整的數(shù)據(jù)庫CRUD的標(biāo)準(zhǔn)服務(wù)。 首先看下要實(shí)現(xiàn)的效果吧,完成下面截圖部分的API,除了CRUD之外...
摘要:將語句硬編碼到代碼中,修改語句需要重新編譯代碼設(shè)想使用配置文件配置。從結(jié)果集中遍歷數(shù)據(jù)的時候存在硬編碼。表示一個拼接符號,會引用注入,所以不建議使用。和表示查詢出一條記錄進(jìn)行映射。 MyBatis是什么 mybatis是托管在github上的ORM框架,讓程序員將主要精力放在SQL上,通過mybatis提供映射方式,自由靈活(SQL的可定制性較高,半自動化)生成滿足需求的SQL語句。m...
閱讀 2796·2023-04-26 01:47
閱讀 3602·2023-04-25 23:45
閱讀 2482·2021-10-13 09:39
閱讀 617·2021-10-09 09:44
閱讀 1808·2021-09-22 15:59
閱讀 2787·2021-09-13 10:33
閱讀 1734·2021-09-03 10:30
閱讀 667·2019-08-30 15:53