摘要:概述本章學習查詢的一對一關系的多種實現方式。本系列文章是基于版本??偨Y本文介紹了一對一映射的三種方法,希望對大家有幫助。最后創建了群方便大家交流,可掃描加入,同時也可加我,共同學習共同進步,謝謝
概述
本章學習Mybatis查詢的一對一關系的多種實現方式。
本系列文章是基于Mybatis 3.4.6 版本。
創建表創建測試使用的數據庫表,使用用戶表和用戶身份證表進行測試,用戶表與身份證是一對一關系,創建表結構如下:
用戶表:
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 "手機號", `idcard_id` bigint(11) unsigned DEFAULT NULL COMMENT "身份證信息表ID", `created_date` datetime NOT NULL COMMENT "創建時間", `modified_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT "修改時間", `yn` tinyint(1) unsigned NOT NULL DEFAULT "1" COMMENT "是否有效(0無效,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 "身份證號碼", `issuing_authority` varchar(50) COLLATE utf8_bin DEFAULT NULL COMMENT "簽發機關", `indate_start` date DEFAULT NULL COMMENT "有效期開始日期", `indate_end` date DEFAULT NULL COMMENT "有效期結束日期", `created_date` datetime NOT NULL COMMENT "創建時間", `modified_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT "修改時間", `yn` tinyint(1) unsigned NOT NULL DEFAULT "1" COMMENT "是否有效(0無效,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="身份證信息表";自動映射
通過數據庫表關系,我們在sys_user表中添加了外鍵列,關聯sys_user_idcard表主鍵,所有在創建實體時,在SysUser類中增加SysUserIdcard屬性,實體類代碼如下:
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規范(如: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; }
測試方法代碼如下:
@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(); } }
結果如下:
通過結果日志可知,Mybatis自動將關聯的身份證信息通過屬性映射到用戶對象中。
resultMap映射對于查詢可通過resultMap進行屬性和列進行映射,此一對一mapper配置文件如下:
Mapper接口與測試類同上,測試結果如下:
association映射與resultMap映射類型,使用association標簽進行映射,代碼如下:
association標簽屬性有:
property:對應實體類中的屬性名,必填項
javaType:屬性對應的java類型
resultMap:可以使用resultMap,替換javaType
columnPrefix:查詢列名的前綴,配置后,在子標簽配置result的column時可以省略前綴,但sql字段前綴或別名必須以此開頭
測試用例與結果與上面一致。
總結本文介紹了Mybatis一對一映射的三種方法,希望對大家有幫助。
最后創建了qq群方便大家交流,可掃描加入,同時也可加我qq:276420284,共同學習、共同進步,謝謝!
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/71368.html
摘要:場合常見一些明細記錄的展示,比如用戶購買商品明細,將關聯查詢信息全部展示在頁面時,此時可直接使用將每一條記錄映射到中,在前端頁面遍歷中是即可。作用將關聯查詢信息映射到一個對象中。 相關閱讀: 1、通過項目逐步深入了解Mybatis 2、 通過項目逐步深入了解Mybatis 本項目所有代碼及文檔都托管在 Github地址:https://github.com/zhisheng17/myb...
摘要:訂單信息與訂單明細為一對多關系。例如先從單表查詢,需要時再從關聯表去關聯查詢,大大提高數據庫性能,因為查詢單表要比關聯查詢多張表速度要快。作用將關聯查詢信息映射到一個對象中。 MyBatis理解與掌握(關聯查詢) @(MyBatis)[Java, 框架, MyBatis] 一對一查詢 案例:查詢所有訂單信息,關聯查詢下單用戶信息 showImg(https://segmentfault...
摘要:場合常見一些明細記錄的展示,將關聯查詢信息全部展示在頁面時,此時可直接使用將每一條記錄映射到中,在前端頁面遍歷中是即可。如果查詢單表就可以滿足需求,一開始先查詢單表,當需要關聯信息時,再關聯查詢,當需要關聯信息再查詢這個叫延遲加載。 配置文件和映射文件還有挺多的屬性我還沒有講的,現在就把它們一一補全 映射文件 在mapper.xml文件中配置很多的sql語句,執行每個sql語句時,封裝...
閱讀 1492·2021-11-24 11:16
閱讀 2697·2021-07-28 12:32
閱讀 2308·2019-08-30 11:22
閱讀 1445·2019-08-30 11:01
閱讀 604·2019-08-29 16:24
閱讀 3552·2019-08-29 12:52
閱讀 1632·2019-08-29 12:15
閱讀 1338·2019-08-29 11:18