欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MyBatis的collection和association的使用解讀

 更新時間:2023年12月27日 09:52:57   作者:禿了也弱了。  
這篇文章主要介紹了MyBatis的collection和association的使用解讀

寫在前面

MyBatis涉及到多表關(guān)聯(lián)查詢的時候,有一個非常實用的工具,可以無縫封裝object、array,將結(jié)果返回指定格式的json數(shù)據(jù)。

在這里提供手把手教學(xué),一起看collection和association如何使用。

表結(jié)構(gòu)及數(shù)據(jù)準(zhǔn)備

CREATE TABLE `test_school` (
  `id` varchar(20) NOT NULL,
  `name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
 
 
CREATE TABLE `test_class` (
  `id` varchar(20) NOT NULL,
  `name` varchar(255) DEFAULT NULL,
  `school_id` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
 
CREATE TABLE `test_teacher` (
  `id` varchar(20) NOT NULL,
  `name` varchar(255) DEFAULT NULL,
  `class_id` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

數(shù)據(jù)與關(guān)系

分別在三張表中簡單的創(chuàng)建了幾條數(shù)據(jù),來簡單的表示數(shù)據(jù)之間的關(guān)系。

我們可以看出,school與class的數(shù)據(jù)之間是一對多的關(guān)系;class與teacher之間的關(guān)系是一對一的關(guān)系。

如果只是單純的使用sql關(guān)聯(lián)查詢時,會查出來三條數(shù)據(jù),其中school的數(shù)據(jù)是重復(fù)的,因為left join嘛。

關(guān)鍵:MyBatis的xml

SchoolMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.boot.security.server.dao.SchoolDao">
 
	<resultMap id="SchoolMap" type="com.boot.security.server.model.TestSchool">
		<id column="id" property="id" />
		<result column="name" property="name" />
		<collection property="testClasses" columnPrefix="tc_"
					resultMap="com.boot.security.server.dao.ClassDao.ClassMap"/>
	</resultMap>
 
	<select id="list" resultMap="SchoolMap">
		select ts.id,ts.name,
			tc.id AS tc_id,
			tc.name AS tc_name,
			tc.school_id AS tc_school_id,
			tt.id AS tc_tt_id,
			tt.name AS tc_tt_name,
			tt.class_id AS tc_tt_class_id
		from test_school ts
		left join test_class tc on ts.id=tc.school_id
		left join test_teacher tt on tc.id=tt.class_id
	</select>
 
</mapper>

ClassMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.boot.security.server.dao.ClassDao">
 
	<resultMap id="ClassMap" type="com.boot.security.server.model.TestClass">
		<id column="id" property="id" />
		<result column="name" property="name" />
		<result column="school_id" property="schoolId" />
		<association property="testTeacher" columnPrefix="tt_"
					 resultMap="com.boot.security.server.dao.TeacherDao.TeacherMap"/>
	</resultMap>
 
</mapper>

TeacherMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.boot.security.server.dao.TeacherDao">
 
	<resultMap id="TeacherMap" type="com.boot.security.server.model.TestTeacher">
		<id column="id" property="id" />
		<result column="name" property="name" />
		<result column="class_id" property="classId" />
	</resultMap>
 
</mapper>

注意!SchoolMapper.xml中的collection與ClassMapper.xml中的association!

注意!注意查詢的sql起的別名,與collection和association中的columnPrefix屬性需要對應(yīng)

其中service、controller這里省略了,我們直接調(diào)用SchoolMapper.xml中的list方法,查看一下執(zhí)行結(jié)果!

執(zhí)行結(jié)果

我們可以看到,class被封裝成了一個數(shù)組(因為我們在SchoolMapper.xml中用collection封裝);

teacher被封裝成一個對象(因為我們在ClassMapper.xml中用association封裝)。

總結(jié)

MyBatis提供了非常強(qiáng)大的對象、數(shù)組封裝方式,直接將查詢出來的結(jié)果封裝成對應(yīng)的格式。

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • java中對象轉(zhuǎn)json字符串的三種常用方式

    java中對象轉(zhuǎn)json字符串的三種常用方式

    本文主要介紹了java中對象轉(zhuǎn)json字符串的三種常用方式,包含Jackson庫,Gson庫和Hutool工具類這三種,具有一定的參考價值,感興趣的可以了解一下
    2024-06-06
  • JAVA(MAVEN項目)添加JUnit依賴配置全過程

    JAVA(MAVEN項目)添加JUnit依賴配置全過程

    在Maven項目中進(jìn)行單元測試是確保代碼質(zhì)量的重要步驟,本教程提供SpringBoot和微服務(wù)平臺適用的單元測試方法,包括環(huán)境準(zhǔn)備、創(chuàng)建測試類、JUnit簡介及注解使用,環(huán)境準(zhǔn)備涉及引入依賴和安裝JUnit插件,測試類創(chuàng)建可通過快捷鍵或手動添加@Test注解來實現(xiàn)
    2024-10-10
  • SpringBoot快速通關(guān)自動配置應(yīng)用

    SpringBoot快速通關(guān)自動配置應(yīng)用

    在進(jìn)行項目編寫前,我們還需要知道一個東西,就是SpringBoot對我們的SpringMVC還做了哪些配置,包括如何擴(kuò)展,如何定制,只有把這些都搞清楚了,我們在之后使用才會更加得心應(yīng)手
    2022-07-07
  • java中線程安全的list詳細(xì)特性和用法

    java中線程安全的list詳細(xì)特性和用法

    這篇文章主要給大家介紹了關(guān)于java中線程安全的list詳細(xì)特性和用法的相關(guān)資料,Java中有多種線程安全的List,其中比較常用的有Vector、Collections.synchronizedList()和CopyOnWriteArrayList三種方式,需要的朋友可以參考下
    2024-03-03
  • Mybatis如何自動生成sql語句

    Mybatis如何自動生成sql語句

    這篇文章主要介紹了Mybatis如何自動生成sql語句,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • java經(jīng)典問題:連個字符串互為回環(huán)變位

    java經(jīng)典問題:連個字符串互為回環(huán)變位

    連個字符串互為回環(huán)變位經(jīng)常出現(xiàn)在java程序員面試中,這個是考驗程序員的解題思路和方法的最經(jīng)典的一題,小編為大家詳細(xì)分析一下,一起來學(xué)習(xí)吧。
    2017-11-11
  • 深入理解Java并發(fā)編程之LinkedBlockingQueue隊列

    深入理解Java并發(fā)編程之LinkedBlockingQueue隊列

    本文主要介紹了Java并發(fā)編程之LinkedBlockingQueue隊列,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • Java?精煉解讀類和對象原理

    Java?精煉解讀類和對象原理

    面向?qū)ο竽耸荍ava語言的核心,是程序設(shè)計的思想。Java語言的面向?qū)ο蠹夹g(shù)包括了面向?qū)ο蠛兔嫦蜻^程的基本概念,面向?qū)ο蟮奶卣鳎琂ava語言的類,對象,修飾符,抽象類等一系列的知識點
    2022-03-03
  • Java?Optional的判空操作詳解

    Java?Optional的判空操作詳解

    JAVA在1.8版本推出Optional,官方文檔將其描述為可能包含或不包含非空值的容器對象,目前Optional用于避免程序出現(xiàn)異常NullPointerException,感興趣的可以了解一下
    2022-09-09
  • 基于jenkins構(gòu)建結(jié)果企業(yè)微信提醒

    基于jenkins構(gòu)建結(jié)果企業(yè)微信提醒

    這篇文章主要介紹了基于jenkins構(gòu)建結(jié)果企業(yè)微信提醒,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-08-08

最新評論