gpt4 book ai didi

mybatis - mybatis获取多个嵌入对象

转载 作者:行者123 更新时间:2023-12-02 10:11:25 25 4
gpt4 key购买 nike

Class User{
private String employeeId;
private Country assignedCountry;
private Region employeeRegion;

//getter & setter
}

Class Country{
private String countryCode;
private Region countryRegion;
//getter & setter methods
}

Class Region{
private String regionCode;

}

<resultMap type="User" id="userResultMap">
<id column="employee_id" property="employeeId" />
<association property="assignedCountry" resultMap="countryResultMap"/>
<association property="employeeRegion" resultMap="regionResultMap"/>
</resultMap>
<resultMap type="Country" id="countryResultMap">
<id column="country_cd" property="countryCode" />
<association property="countryRegion" resultMap="regionResultMap"/>
</resultMap>
<resultMap type="Region" id="regionResultMap">
<id column="region_cd" property="regionCode" />
<id column="region_nm" property="regionName" />
</resultMap>

员工被分配到一个国家,也属于一个地区。国家/地区属于一个地区,该地区可能与员工所在地区相同,也可能不同。

查询将获取用户指定的国家和地区。

select U.*, C.*, R.* from 
User U left outer join Country C
on U.assigned_country_cd = C.country_cd
left outer join Region R
on U.employee_region_cd = R.region_cd

当我通过 mybatis 执行查询并检查用户对象时,我可以看到用户区域设置正确。但我还可以看到用户所在国家/地区内的 Region 对象也设置为用户所在的区域。事实不应该是这样的。(据我了解,我这里没有获取国家地区。但如果是这样,则根本不应该设置此对象,而不是将员工地区设置为国家地区)

有人可以帮助我如何在国家对象内映射国家/地区的区域吗?

我对 mybatis 和 ORM 非常陌生。任何有助于阐明这一点的帮助将不胜感激。

最佳答案

在您的查询中,您将连接 Region 表,而不是连接 Country 表,而是连接 User 表,最终返回区域员工的(以及 Country 对象的 countryRegion 属性)

在您的 ResultMap 中,regionResultMap 映射如下:

region_cd -> regionCode
region_nm -> regionName

您正在将 region_cd 列映射到 user.assignedCountry.countryRegion.regionCodeuser.employeeRegion.regionCode 同时基本上将不同对象中相同的列设置为相同的属性。

你可以做的是在 SQL 中区分用户的区域和国家的区域,并相应地映射到 MyBatis 中:

添加另一个连接以连接区域与国家/地区:

select U.*, C.*, R.*, CR.region_cd AS C_region_cd, CR.region_nm as C_region_nm from 
User U left outer join Country C
on U.assigned_country_cd = C.country_cd
left outer join Region R
on U.employee_region_cd = R.region_cd
left outer join Region CR
on CR.belongsTo = C.country_cd

并且,您需要按如下方式更改 ResultMap,以便使用具有不同列名称的相同 ResultMap。这里,belongsToRegion 表中的列,显示它属于哪个Country:

<resultMap type="User" id="userResultMap">
<id column="employee_id" property="employeeId" />
<association property="assignedCountry" resultMap="countryResultMap"/>
<association property="employeeRegion" resultMap="regionResultMap"/>
</resultMap>

<resultMap type="Country" id="countryResultMap">
<id column="country_cd" property="countryCode" />
<association columnPrefix="C_" property="countryRegion" resultMap="regionResultMap"/>
</resultMap>

<resultMap type="Region" id="regionResultMap">
<id column="region_cd" property="regionCode" />
<id column="region_nm" property="regionName" />
</resultMap>

关于mybatis - mybatis获取多个嵌入对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27302718/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com