Sql映射檔案
MyBatis 真正的力量是在映射語句中。和對等功能的jdbc來比價,映射文件節省很多的代碼量。 MyBatis的建構就是聚焦在sql的。
sql映射檔有以下幾個頂層元素:(依序)
cache配置給定命名空間的快取。
cache-ref從其他命名空間引用快取配置。
resultMap最複雜,也是最有力量的元素,用來描述如何從資料庫結果集中來載入你的物件。
parameterMap已經被廢棄了!老式風格的參數映射。內聯參數是首選,這個元素可能在將來被移除。
sql可以重複使用的SQL區塊,也可以被其他語句引用。
insert映射插入語句。
update映射更新語句。
delete映射刪除語句。
select映射查詢語句。
MyBatis的建構就是聚焦在SQL的,使其遠離於普通的方式。
SQL映射檔案有很少的幾個頂層元素(按照它們應該被定義的順序):
>mapper:映射檔案的根元素節點,只有一個屬性namespace命名空間,用於區分不同的mapper,全域唯一,namespace綁定的DAO介面全名稱,即面向介面程式設計。這裡的mapper就相當於介面的實作類別。
cache - 設定給定命名空間的快取。
cache-ref – 從其他命名空間引用快取配置。
resultMap – 最複雜,也是最有力量的元素,用來描述如何從資料庫結果集中來載入你的物件。
parameterMap – 已經被廢棄了!老式風格的參數映射。內聯參數是首選,這個元素可能在將來被移除。這裡不會記錄。
sql – 可以重複使用的SQL區塊,也可以被其他語句引用。
insert – 映射插入語句
update – 映射更新語句
delete – 映射刪除語句
select – 映射查詢語句
一:使用select完成但條件查詢
使用工具idea和mysql資料庫
建立實體類別
public class student {private int stuId;private String stuName;private grade getGrade;private int stuAge;public grade getGetGrade() {return getGrade; }public void setGetGrade(grade getGrade) {this.getGrade = getGrade; }public int getStuAge() {return stuAge; } public student(int id,String name){ } public student(){}public void setStuAge(int stuAge) {this.stuAge = stuAge; }public int getStuId() {return stuId; }public void setStuId(int stuId) {this.stuId = stuId; }public String getStuName() {return stuName; }public void setStuName(String stuName) {this.stuName = stuName; } }
使用select完成條件查詢
一:先設定mapper使用resultType
<!--模糊查询 使用resultType返回结果集--> <select>* from student where stuName like CONCAT('%',#{stuName},'%'</select>
測試類別
public void Test() throws IOException { studentDao dao = MyBatis.getSessionTwo().getMapper(studentDao.class); List<student> list = dao.getAllStudentByLike("z");for (student item:list) { System.out.println("----------"+item.getStuName()); } }</student>
#另外parameterType支援的複雜型別除了javaBean之外,還包括Map類型
即修改Mapper
<!--模糊查询--> <select>select * from student where stuName like CONCAT('%',#{stuName},'%')</select>
然後再測試類別裡建立一個HashMap集合直接作為方法參數即可
studentDao dao = MyBatis.getSessionTwo().getMapper(studentDao.class); Map<string> userMap = new HashMap<string>(); userMap.put("stuName","z"); List<student> list = dao.getAllStudentByLike(userMap);for (student item:list) { System.out.println("----------"+item.getStuName()); }</student></string></string>
不過map集合的key值必須和類別中的欄位名稱相同。
二:使用resultMap完成兩表查詢
例如學生表裡關聯班級表的主鍵id,如果使用resultType只能展示其id但在實際中往往關注的是班級名稱,所有需要使用resultMap映射自訂結果。
<resultmap> <id></id> <result></result> <result> </result></resultmap> //sql语句
select * from student,grade
resultType直接表示傳回類型,包含基礎型別和複雜資料型別
resultMap則是對外部resultMap的引用,對應resultMap的id 表示回傳結果對應到哪一個resultMap。 :他的應用場景是:資料庫欄位資訊與物件屬性不一致或需要做複雜的聯合查詢以便自由控制映射結果 。
另外在 MyBatis的select元素中,resultType和resultMap本質上是一樣的,都是Map資料結構。但是 二者不能同時 存在。
三:使用resultMap的自動對映等級
MyBatis中分為三個對應等級
>NONE:禁止自動符合
>PARTIAL;NONE:禁止自動符合
>PARTIAL :(預設):自動符合所有屬性有內部巢狀(association,collection)的除外
>FULL:自動符合所有
<settings> <!--设置resultMap的自动映射级别为Full(自动匹配所有)--><setting></setting> <!--FULL要大写··--> </settings>
設定autoMappingBehavior的值為FULL時就不需要設定resultMap下的節點,他會根據資料庫自動比對
四:使用update完成修改
<update>update student set stuName=#{0} where stuId=#{1}</update>
這裡使用佔位符比較簡單的一種作為參數,在測試類別中就直接填參就行了
五:使用映射複雜類型的屬性association
前面的result只能對應到javaBean的某個「簡單類型」屬性,基礎資料類型和包裝類別等/
stuAge; 。。。。。省略封装
<resultmap> <!-- <id property="stuId" column="stuId"></id> <result property="stuName" column="stuName"></result>--> <!--关联另一个 属性--> <association> <!-- <id property="gradeId" javaType="Integer" column="gradeId"></id> <result property="gradeName" javaType="String" column="gradeName"></result>--> </association> </resultmap> <!--这里使用了自动匹配-->
<select> SELECT * FROM student,grade WHERE student.stuGrade=grade.gradeId</select>###
测试类里直接调用即可
六:前面说到association仅处理一对一的管理关系
如果要处理一对多的关系,则需要使用collection,它与 association元素差不多,但它映射的属性是一个集合列表,即javaBean内部嵌套一个复杂数据类型属性。
javaBean
private int gradeId;private String gradeName;private List<student> gatStudent;</student>
<resultmap> <!--<id property="gradeId" column="gradeId"></id> <result property="gradeName" column="gradeName"></result>--> <collection> <!-- <id property="stuId" column="stuId"></id> <result property="stuName" column="stuName"></result>--> </collection> </resultmap>
<!--查询对应年级的student--> <select> select * from student,grade where stuGrade = gradeId and gradeId=1 </select>
以上是sql映射檔的實例教程的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本文討論了使用Maven和Gradle進行Java項目管理,構建自動化和依賴性解決方案,以比較其方法和優化策略。

本文使用Maven和Gradle之類的工具討論了具有適當的版本控制和依賴關係管理的自定義Java庫(JAR文件)的創建和使用。

本文討論了使用咖啡因和Guava緩存在Java中實施多層緩存以提高應用程序性能。它涵蓋設置,集成和績效優勢,以及配置和驅逐政策管理最佳PRA

本文討論了使用JPA進行對象相關映射,並具有高級功能,例如緩存和懶惰加載。它涵蓋了設置,實體映射和優化性能的最佳實踐,同時突出潛在的陷阱。[159個字符]

Java的類上載涉及使用帶有引導,擴展程序和應用程序類負載器的分層系統加載,鏈接和初始化類。父代授權模型確保首先加載核心類別,從而影響自定義類LOA


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

SublimeText3 Linux新版
SublimeText3 Linux最新版

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

記事本++7.3.1
好用且免費的程式碼編輯器