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