摘要:概述本章学习查询的一对一关系的多种实现方式。本系列文章是基于版本。总结本文介绍了一对一映射的三种方法,希望对大家有帮助。最后创建了群方便大家交流,可扫描加入,同时也可加我,共同学习共同进步,谢谢
概述
本章学习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,共同学习、共同进步,谢谢!
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/71368.html
摘要:场合常见一些明细记录的展示,比如用户购买商品明细,将关联查询信息全部展示在页面时,此时可直接使用将每一条记录映射到中,在前端页面遍历中是即可。作用将关联查询信息映射到一个对象中。 相关阅读: 1、通过项目逐步深入了解Mybatis 2、 通过项目逐步深入了解Mybatis 本项目所有代码及文档都托管在 Github地址:https://github.com/zhisheng17/myb...
摘要:订单信息与订单明细为一对多关系。例如先从单表查询,需要时再从关联表去关联查询,大大提高数据库性能,因为查询单表要比关联查询多张表速度要快。作用将关联查询信息映射到一个对象中。 MyBatis理解与掌握(关联查询) @(MyBatis)[Java, 框架, MyBatis] 一对一查询 案例:查询所有订单信息,关联查询下单用户信息 showImg(https://segmentfault...
摘要:场合常见一些明细记录的展示,将关联查询信息全部展示在页面时,此时可直接使用将每一条记录映射到中,在前端页面遍历中是即可。如果查询单表就可以满足需求,一开始先查询单表,当需要关联信息时,再关联查询,当需要关联信息再查询这个叫延迟加载。 配置文件和映射文件还有挺多的属性我还没有讲的,现在就把它们一一补全 映射文件 在mapper.xml文件中配置很多的sql语句,执行每个sql语句时,封装...
阅读 1464·2021-11-24 11:16
阅读 2647·2021-07-28 12:32
阅读 2283·2019-08-30 11:22
阅读 1425·2019-08-30 11:01
阅读 560·2019-08-29 16:24
阅读 3507·2019-08-29 12:52
阅读 1608·2019-08-29 12:15
阅读 1314·2019-08-29 11:18