一对多关联关系
数据库里有 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_info
和accout
间关系如下
类UserInfo
和WorkInfo
间关系如下
UserInfo
和WorkInfo
是一对多聚合关系,即一个用户对应多条工作经历。此处用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(