摘要:概述本章學(xué)習(xí)查詢的一對(duì)一關(guān)系的多種實(shí)現(xiàn)方式。本系列文章是基于版本。總結(jié)本文介紹了一對(duì)一映射的三種方法,希望對(duì)大家有幫助。最后創(chuàng)建了群方便大家交流,可掃描加入,同時(shí)也可加我,共同學(xué)習(xí)共同進(jìn)步,謝謝
概述
本章學(xué)習(xí)Mybatis查詢的一對(duì)一關(guān)系的多種實(shí)現(xiàn)方式。
本系列文章是基于Mybatis 3.4.6 版本。
創(chuàng)建表創(chuàng)建測(cè)試使用的數(shù)據(jù)庫(kù)表,使用用戶表和用戶身份證表進(jìn)行測(cè)試,用戶表與身份證是一對(duì)一關(guān)系,創(chuàng)建表結(jié)構(gòu)如下:
用戶表:
CREATE TABLE `sys_user` ( `id` bigint(11) unsigned NOT NULL AUTO_INCREMENT COMMENT "主鍵", `user_account` varchar(50) COLLATE utf8_bin NOT NULL COMMENT "用戶賬戶", `user_password` char(32) COLLATE utf8_bin NOT NULL COMMENT "MD5加密的用戶密碼", `user_email` varchar(20) COLLATE utf8_bin DEFAULT NULL COMMENT "用戶郵箱", `user_phone` varchar(20) COLLATE utf8_bin DEFAULT NULL COMMENT "手機(jī)號(hào)", `idcard_id` bigint(11) unsigned DEFAULT NULL COMMENT "身份證信息表ID", `created_date` datetime NOT NULL COMMENT "創(chuàng)建時(shí)間", `modified_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT "修改時(shí)間", `yn` tinyint(1) unsigned NOT NULL DEFAULT "1" COMMENT "是否有效(0無(wú)效,1有效)", `modified_user` varchar(50) COLLATE utf8_bin DEFAULT NULL COMMENT "修改人", `remark` varchar(500) COLLATE utf8_bin DEFAULT NULL COMMENT "備注", PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT="用戶表";
用戶身份證信息表:
CREATE TABLE `sys_user_idcard` ( `id` bigint(11) unsigned NOT NULL AUTO_INCREMENT COMMENT "主鍵", `user_name` varchar(50) COLLATE utf8_bin NOT NULL COMMENT "姓名", `user_sex` tinyint(1) unsigned NOT NULL COMMENT "性別1:男 2:女", `user_birthday` date NOT NULL COMMENT "出生日期", `user_address` varchar(100) COLLATE utf8_bin DEFAULT NULL COMMENT "住址", `idcard_no` varchar(18) COLLATE utf8_bin NOT NULL COMMENT "身份證號(hào)碼", `issuing_authority` varchar(50) COLLATE utf8_bin DEFAULT NULL COMMENT "簽發(fā)機(jī)關(guān)", `indate_start` date DEFAULT NULL COMMENT "有效期開(kāi)始日期", `indate_end` date DEFAULT NULL COMMENT "有效期結(jié)束日期", `created_date` datetime NOT NULL COMMENT "創(chuàng)建時(shí)間", `modified_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT "修改時(shí)間", `yn` tinyint(1) unsigned NOT NULL DEFAULT "1" COMMENT "是否有效(0無(wú)效,1有效)", `modified_user` varchar(50) COLLATE utf8_bin DEFAULT NULL COMMENT "修改人", `remark` varchar(500) COLLATE utf8_bin DEFAULT NULL COMMENT "備注", PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT="身份證信息表";自動(dòng)映射
通過(guò)數(shù)據(jù)庫(kù)表關(guān)系,我們?cè)趕ys_user表中添加了外鍵列,關(guān)聯(lián)sys_user_idcard表主鍵,所有在創(chuàng)建實(shí)體時(shí),在SysUser類中增加SysUserIdcard屬性,實(shí)體類代碼如下:
SysUser:
package com.github.dalianghe.model; import com.github.dalianghe.mapper.SysUserIdcardModel; import lombok.Getter; import lombok.Setter; import lombok.ToString; @Setter @Getter @ToString public class SysUserModel{ /** 用戶賬戶 */ private String userAccount; /** 用戶密碼 */ private String userPassword; /** 用戶身份證信息 */ private SysUserIdcardModel idcard; }
SysUserIdcard:
package com.github.dalianghe.model; import lombok.Getter; import lombok.Setter; import lombok.ToString; import java.time.LocalDate; @Setter @Getter @ToString public class SysUserIdcardModel{ /** 用戶姓名 */ private String userName; /** 出生日期 */ private LocalDate userBirthday; /** ... 省略其他屬性 ...*/ }
注意:本例子我們使用了JSR310規(guī)范(如:LocalDate),故需在pom文件中添加依賴,如下:
org.mybatis mybatis-typehandlers-jsr310 1.0.2
mapper映射文件配置如下:
Mapper接口代碼如下:
package com.github.dalianghe.mapper; import com.github.dalianghe.model.SysUserModel; public interface SysUserMapper { SysUserModel selectSysUserById(Long id) throws Exception; }
測(cè)試方法代碼如下:
@Test public void testSelectSysUserById(){ SqlSession sqlSession = getSqlSession(); try{ SysUserMapper sysUserMapper = sqlSession.getMapper(SysUserMapper.class); SysUserModel user = sysUserMapper.selectSysUserById(20L); System.out.println("按用戶ID查詢用戶信息:" + user.toString()); //sqlSession.commit(); }catch (Exception e){ e.printStackTrace(); //sqlSession.rollback(); }finally { sqlSession.close(); } }
結(jié)果如下:
通過(guò)結(jié)果日志可知,Mybatis自動(dòng)將關(guān)聯(lián)的身份證信息通過(guò)屬性映射到用戶對(duì)象中。
resultMap映射對(duì)于查詢可通過(guò)resultMap進(jìn)行屬性和列進(jìn)行映射,此一對(duì)一mapper配置文件如下:
Mapper接口與測(cè)試類同上,測(cè)試結(jié)果如下:
association映射與resultMap映射類型,使用association標(biāo)簽進(jìn)行映射,代碼如下:
association標(biāo)簽屬性有:
property:對(duì)應(yīng)實(shí)體類中的屬性名,必填項(xiàng)
javaType:屬性對(duì)應(yīng)的java類型
resultMap:可以使用resultMap,替換javaType
columnPrefix:查詢列名的前綴,配置后,在子標(biāo)簽配置result的column時(shí)可以省略前綴,但sql字段前綴或別名必須以此開(kāi)頭
測(cè)試用例與結(jié)果與上面一致。
總結(jié)本文介紹了Mybatis一對(duì)一映射的三種方法,希望對(duì)大家有幫助。
最后創(chuàng)建了qq群方便大家交流,可掃描加入,同時(shí)也可加我qq:276420284,共同學(xué)習(xí)、共同進(jìn)步,謝謝!
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/71368.html
摘要:場(chǎng)合常見(jiàn)一些明細(xì)記錄的展示,比如用戶購(gòu)買商品明細(xì),將關(guān)聯(lián)查詢信息全部展示在頁(yè)面時(shí),此時(shí)可直接使用將每一條記錄映射到中,在前端頁(yè)面遍歷中是即可。作用將關(guān)聯(lián)查詢信息映射到一個(gè)對(duì)象中。 相關(guān)閱讀: 1、通過(guò)項(xiàng)目逐步深入了解Mybatis 2、 通過(guò)項(xiàng)目逐步深入了解Mybatis 本項(xiàng)目所有代碼及文檔都托管在 Github地址:https://github.com/zhisheng17/myb...
摘要:訂單信息與訂單明細(xì)為一對(duì)多關(guān)系。例如先從單表查詢,需要時(shí)再?gòu)年P(guān)聯(lián)表去關(guān)聯(lián)查詢,大大提高數(shù)據(jù)庫(kù)性能,因?yàn)椴樵儐伪硪汝P(guān)聯(lián)查詢多張表速度要快。作用將關(guān)聯(lián)查詢信息映射到一個(gè)對(duì)象中。 MyBatis理解與掌握(關(guān)聯(lián)查詢) @(MyBatis)[Java, 框架, MyBatis] 一對(duì)一查詢 案例:查詢所有訂單信息,關(guān)聯(lián)查詢下單用戶信息 showImg(https://segmentfault...
摘要:場(chǎng)合常見(jiàn)一些明細(xì)記錄的展示,將關(guān)聯(lián)查詢信息全部展示在頁(yè)面時(shí),此時(shí)可直接使用將每一條記錄映射到中,在前端頁(yè)面遍歷中是即可。如果查詢單表就可以滿足需求,一開(kāi)始先查詢單表,當(dāng)需要關(guān)聯(lián)信息時(shí),再關(guān)聯(lián)查詢,當(dāng)需要關(guān)聯(lián)信息再查詢這個(gè)叫延遲加載。 配置文件和映射文件還有挺多的屬性我還沒(méi)有講的,現(xiàn)在就把它們一一補(bǔ)全 映射文件 在mapper.xml文件中配置很多的sql語(yǔ)句,執(zhí)行每個(gè)sql語(yǔ)句時(shí),封裝...
閱讀 1524·2021-11-24 11:16
閱讀 2754·2021-07-28 12:32
閱讀 2336·2019-08-30 11:22
閱讀 1471·2019-08-30 11:01
閱讀 629·2019-08-29 16:24
閱讀 3585·2019-08-29 12:52
閱讀 1654·2019-08-29 12:15
閱讀 1364·2019-08-29 11:18