mybatis之级联关系(一对一、一对多)
0. 表结构



1. 准备工作
1.1 配置文件等信息,请参考 myBatis之入门示例
1.2 entity
1.2.1 TPersonInfo.java
package com.blueStarWei.entity;
public class TPersonInfo {
private Integer id;
private String name;
private Integer age;
private Address address;
//setter & getter
@Override
public String toString() {
return "TPersonInfo [id=" + id + ", name=" + name + ", age=" + age + ", address=" + address + "]";
}
}
1.2.2 Address.java
package com.blueStarWei.entity;
public class Address {
private int id;
private String country;
private String city;
//setter & getter
@Override
public String toString() {
return "Address [country=" + country + ", city=" + city + "]";
}
}
2 一对一关系(Maper)
2.1 方法一:
2.1.1 PersonAddressMapper.java
package com.blueStarWei.mappers;
import java.util.List;
import com.blueStarWei.entity.TPersonInfo;
public interface PersonAddressMapper {
List<TPersonInfo> findAllWithAddress();
}
2.1.2 PersonAddressMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.blueStarWei.mappers.PersonAddressMapper"> <select id="findAllWithAddress" resultMap="personResult">
SELECT t1.*,t2.* FROM t_person_info t1 JOIN t_address t2 ON t2.id = t1.addressid
</select> <resultMap type="TPersonInfo" id="personResult">
<id property="id" column="id"/>
<result property="name" column="name"/>
<result property="age" column="age"/>
<association property="address" resultMap="addressResult"/>
</resultMap> <resultMap type="Address" id="addressResult">
<id property="id" column="id"/>
<result property="country" column="country"/>
<result property="city" column="city"/>
</resultMap> </mapper>
2.2 方法二【推荐】
2.2.1 AddressMapper.java
package com.blueStarWei.mappers;
import com.blueStarWei.entity.Address;
public interface AddressMapper {
public Address findById(Integer id);
}
2.2.2 AddressMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.blueStarWei.mappers.AddressMapper"> <select id="findById" parameterType="Integer" resultMap="addressResult">
SELECT * FROM t_address t where t.id = #{id}
</select> <resultMap type="Address" id="addressResult">
<id property="id" column="id"/>
<result property="country" column="country"/>
<result property="city" column="city"/>
</resultMap> </mapper>
2.2.3 PersonMapper.java
package com.blueStarWei.mappers;
import java.util.List;
import com.blueStarWei.entity.TPersonInfo;
public interface PersonMapper {
TPersonInfo findById(Integer id);
List<TPersonInfo> findAll();
}
2.2.4 PersonMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.blueStarWei.mappers.PersonMapper"> <select id="findById" parameterType="Integer" resultMap="personResult">
select * from t_person_info a where a.id = #{id}
</select> <select id="findAll" resultMap="personResult">
select * from t_person_info
</select> <resultMap type="TPersonInfo" id="personResult">
<id property="id" column="id"/>
<result property="name" column="name"/>
<result property="age" column="age"/>
<association property="address" column="addressid"
select="com.blueStarWei.mappers.AddressMapper.findById"/>
</resultMap> </mapper>
2.3. 总结:
方法一是使用级联的方式查找出需要的所有信息,然后将结果返回到对应的entity类中,方法二是通过外键关联的方式返回结果。方法二在开发过程中被推荐时间,因为其具有代码高复用性。
3 一对多关系
3.1 Family.java
package com.blueStarWei.entity;
import java.util.List;
public class Family {
private Integer id;
private String familyCode;
private List<TPersonInfo> persons;
//setter & getter
@Override
public String toString() {
return "Family [id=" + id + ", familyCode=" + familyCode + ", persons=" + persons + "]";
}
}
3.2 FamilyMapper.java
package com.blueStarWei.mappers;
import com.blueStarWei.entity.Family;
public interface FamilyMapper {
Family findById(Integer id);
}
3.3 FamilyMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.blueStarWei.mappers.FamilyMapper"> <select id="findById" parameterType="Integer" resultMap="familyResult">
SELECT * FROM t_family t where t.id = #{id}
</select> <resultMap type="Family" id="familyResult">
<id property="id" column="id"/>
<result property="familyCode" column="familyCode"/>
<collection property="persons" column="id" select="com.blueStarWei.mappers.PersonMapper.findByFamilyId"/>
</resultMap> </mapper>
3.4 PersonMapper.java
package com.blueStarWei.mappers;
import java.util.List;
import com.blueStarWei.entity.TPersonInfo;
public interface PersonMapper {
List<TPersonInfo> findByFamilyId(Integer familyId);
}
3.5 PersonMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.blueStarWei.mappers.PersonMapper"> <select id="findByFamilyId" parameterType="Integer" resultMap="personResult">
select * from t_person_info a where a.familyId = #{familyId}
</select> <resultMap type="TPersonInfo" id="personResult">
<id property="id" column="id"/>
<result property="name" column="name"/>
<result property="age" column="age"/>
<association property="address" column="addressid"
select="com.blueStarWei.mappers.AddressMapper.findById"/>
</resultMap> </mapper>
mybatis之级联关系(一对一、一对多)的更多相关文章
- Python进阶----表与表之间的关系(一对一,一对多,多对多),增删改查操作
Python进阶----表与表之间的关系(一对一,一对多,多对多),增删改查操作,单表查询,多表查询 一丶表与表之间的关系 背景: 由于如果只使用一张表存储所有的数据,就会操作数 ...
- JPA级联(一对一 一对多 多对多)注解【实际项目中摘取的】并非自己实际应用
下面把项目中的用户类中有个:一对一 一对多 多对多的注解对应关系列取出来用于学习 说明:项目运行正常 问题类:一对多.一对一.多对多 ============一对多 一方的设置 @One ...
- LayUI table表格控件 如何显示 对象中的属性(针对Mybatis的级联查询--一对一情况)
1.entity如下: 2.Mybatis的Mapper.xml文件如下 <resultMap id="BaseResultMapPlus" type="dicIt ...
- MyBatis之级联——一对一关系
在学数据库概论的时候会听到这么几个词:数据库的关系分为一对一.一对多.多对多.对于在学校里学的知识已经忘得差不多了,在这里简单的提一下数据库的关系.此篇是介绍MyBatis是如何实现数据库中一对一关系 ...
- MyBatis之级联——一对多关系
上次我们讲到了MyBatis的一对一关系的表示,简单回顾一下一对一关系就是一个学生只有一个学生证.那么什么是一对多关系呢?一个学生有多个课程这就是一对多的关系.我们结合上一章中的学生和学生证,在此基础 ...
- Springboot整合Mybatis实现级联一对多CRUD操作
在关系型数据库中,随处可见表之间的连接,对级联的表进行增删改查也是程序员必备的基础技能.关于Spring Boot整合Mybatis在之前已经详细写过,不熟悉的可以回顾Spring Boot整合Myb ...
- Spring Boot整合Mybatis完成级联一对多CRUD操作
在关系型数据库中,随处可见表之间的连接,对级联的表进行增删改查也是程序员必备的基础技能.关于Spring Boot整合Mybatis在之前已经详细写过,不熟悉的可以回顾Spring Boot整合Myb ...
- Mybatis 级联查询 (一对多 )
后台系统中 涉及到添加试卷 问题 答案的一个模块的.我需要通过试卷 查询出所有的试题,以及试题的答案.这个主要要使用到Mybatis的级联查询. 通过试卷 查询出与该试卷相关的试题(一对多),查询出试 ...
- hibernate 一对多(级联关系)
hibernate 核心配置文件 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hiber ...
随机推荐
- Confluence 6 下载和安装 Oracle thin 驱动
基于许可证的考虑,我们不能将 Oracle 的驱动捆绑到 Confluence 中.如果你希望你的 Confluence 能够连接到 Oracle 数据库,你需要: 停止 Confluence. 进入 ...
- nginx之访问控制http_access_module与http_auth_basic_module
http_access_module 作用 基于IP的访问控制 语法 使用 局限性 解决办法 1. http_x_forwarded_for http_auth_basic_module 作用 基于用 ...
- 基于BootStrap的Collapse折叠(包含回显展开折叠的对应状态)
情况描述:为了改善页面上的input框太多,采用∧∨折叠展开,这个小东西来控制,第一次做,记录一下ヾ(◍°∇°◍)ノ゙下边是Code 代码: //html代码 <div id="col ...
- (批量更新)对多个符合条件的id做更新操作
需求描述:把checkbox勾选的对应id的记录的标志位置1或0,这个其实不难的,不过我自己做的话,肯定是多次访问数据库做更新,看了老大的代码,发现差距不是一般的大,老大把sql灵活运用,结果一次访问 ...
- WPA2-PSK无线密码破解
无线网络WIFI(wireless Fidelity )正确发音 /wai fai/ 是一个建立在IEEE 802.11标准的无线局域网,目前主流的无线上网模式主要有两种分别是 GRPS(手机无线上网 ...
- Little Red Riding Hood
问题 : Little Red Riding Hood 时间限制: 1 Sec 内存限制: 1280 MB 题目描述 Once upon a time, there was a little gir ...
- C语言将字符串转json
示例代码: #include <stdio.h> #include <string.h> #include <stdlib.h> char *strrpc(char ...
- 查看CPU 内存 硬盘 网络 查看进程使用的文件 uptime top ps -aux vmstat iostat iotop nload iptraf nethogs
#安装命令 yum install sysstat #包含 iostat vmstat yum install iotop yum install nload yum install iptraf ...
- Github版本管理以及git使用
1.git客户端编译安装 同步系统时间服务器 ntpdate cn.ntp.org.cn 安装依赖包: [root@baolin ~]# yum install epel-release -y [ro ...
- WPF在XAML中实现持续动画的暂停、恢复、停止
1.动画通过EventTrigger监听按钮的FrameworkElement.Loaded事件,但控件载入时就进行动画, 持续动画通过<BeginStoryboard Name="y ...