最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MyBatis的collection和association的使用解讀

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

寫在前面

MyBatis涉及到多表關(guān)聯(lián)查詢的時(shí)候,有一個(gè)非常實(shí)用的工具,可以無(wú)縫封裝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)系

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

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

如果只是單純的使用sql關(guān)聯(lián)查詢時(shí),會(huì)查出來(lái)三條數(shù)據(jù),其中school的數(shù)據(jù)是重復(fù)的,因?yàn)閘eft 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屬性需要對(duì)應(yīng)

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

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

我們可以看到,class被封裝成了一個(gè)數(shù)組(因?yàn)槲覀冊(cè)赟choolMapper.xml中用collection封裝);

teacher被封裝成一個(gè)對(duì)象(因?yàn)槲覀冊(cè)贑lassMapper.xml中用association封裝)。

總結(jié)

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

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

相關(guān)文章

  • java.lang.Runtime.exec的左膀右臂:流輸入和流讀取詳解

    java.lang.Runtime.exec的左膀右臂:流輸入和流讀取詳解

    這篇文章主要介紹了java.lang.Runtime.exec的左膀右臂:流輸入和流讀取詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • SpringBoot如何配置Controller實(shí)現(xiàn)Web請(qǐng)求處理

    SpringBoot如何配置Controller實(shí)現(xiàn)Web請(qǐng)求處理

    這篇文章主要介紹了SpringBoot如何配置Controller實(shí)現(xiàn)Web請(qǐng)求處理,文中通過(guò)圖解示例介紹的很詳細(xì),具有有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2023-05-05
  • Java中常見(jiàn)的日期操作(取值、轉(zhuǎn)換、加減、比較)

    Java中常見(jiàn)的日期操作(取值、轉(zhuǎn)換、加減、比較)

    本文給大家介紹java中常見(jiàn)的日期操作,日期取值、日期轉(zhuǎn)換、日期加減、日期比較,對(duì)java日期操作相關(guān)知識(shí)感興趣的朋友一起學(xué)習(xí)吧
    2015-12-12
  • 最新評(píng)論

    嵊泗县| 图木舒克市| 辽源市| 贺州市| 崇仁县| 英吉沙县| 黄冈市| 崇左市| 汉川市| 鄂伦春自治旗| 大理市| 育儿| 延庆县| 盐源县| 上杭县| 宁化县| 仪征市| 通州市| 皋兰县| 奉节县| 金乡县| 石首市| 刚察县| 合阳县| 张家界市| 交城县| 库尔勒市| 镇江市| 绵阳市| 洪泽县| 湖南省| 毕节市| 高碑店市| 沅陵县| 定结县| 九江县| 安新县| 南汇区| 陆河县| 巴塘县| 峨眉山市|