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