Mybatis多表关联查询

一对多关联关系

数据库里有 account表 work_info 表 ,建表代码如下:


account表

create table `account` 
(
  `id` int(11) not null auto_increment,
  `username` varchar(32) ,
  `pwd` varchar(64) ,
  `email` varchar(64),
  primary key (`id`),

  unique key `unique_username` (`username`),
  key `username_index` (`username`) using btree
) engine=InnodDB default charset=utf8



work_info表

create table `work_info` 
(
  `work_id` int(11) not null auto_increment,
  `company` varchar(64) ,
  `position` varchar(32) ,
  `duty` varchar(128) ,
  `departure` date ,
  `user_id` int(11) ,
  primary key (`work_id`),

  key `fk_workinfo_account` (`user_id`),
  constraint `fk_workinfo_account` foreign key (`user_id`) references `account` (`id`)
) engine=InnoDB default charset=utf8



在JavaBean中有类UserInfo 对应 account表 类WorkInfo 对应 work_info表

work_infoaccout间关系如下
这里写图片描述


UserInfoWorkInfo间关系如下
这里写图片描述
UserInfoWorkInfo是一对多聚合关系,即一个用户对应多条工作经历。此处用UML类图代替繁长的代码


一对多关联关系查询接口定义如下:
dao.IUserinfo.java

public interface IUserinfo {
   
    UserInfo queryWorkExperienceByUserId(Map<String,Object> map);
    UserInfo queryWorkExperienceByUserIdSingleTable(Map<String,Object> map);
}

调用queryWorkExperienceByUserId() 直接连接查询 实现如下:
这里写图片描述


注意:
这里写图片描述

分两次单表查询实现一对多的关联查询,在Mybatis中这种查询方式支持延迟加载,用得比较多。
调用queryWorkExperienceByUserIdSingleTable方法的单表查询示例如下:
这里写图片描述


多对一关联查询

有这样一种场景:QQ中以前修改密码有用到密保,在这里一个用户假定一个用户可以设置n个密保,1个密保只能属于1个用户,因此密保与用户间存在着多对一的关系.


数据库中有security_guarantee表,定义如下:

create table `security_guarantee` (
  `secturityid` int(10) unsigned not null auto_increment,
  `question` varchar(256) ,
  `answer` varchar(256) ,
  `user_id` int(
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值