gpt4 book ai didi

java - 如何在 MyBatis 中通过两个不同的 resultMap 重用同一个 SELECT 查询?

转载 作者:行者123 更新时间:2023-12-01 20:18:16 30 4
gpt4 key购买 nike

我有一个映射器resultMap,它有两个我需要内联选择的集合

<collection property="companies" ofType="Company" column="user_id" select="selectCompanies"/>
<collection property="companyGroups" ofType="CompanyGroup" column="user_id" select="selectCompanyGroups"/>

这两个集合的查询完全相同,但生成的 map 却截然不同。有没有办法可以将相同的选择与两个不同的 resultMaps 一起使用?

我必须内联运行这些查询,因为如果它是主查询的一部分,则会由于左连接而导致额外的几千条记录。

我无法使用 SQL,因为它只允许静态参数解析,而不是动态参数解析。

最佳答案

Is there a way that I can use the same select with two different resultMaps?

是的,您可以将相同的选择与两个不同的 resultMap 一起使用,如下所示。

<mapper namespace="com.example.PersonRepository">
<!-- The common re-usable SELECT query -->
<sql id="select-part">
SELECT first_name, last_name, ...other attributes...
FROM table
<!-- You may use dynamic parameters here the same way as in a regular query -->
<where>
<if test="searchParams.firstName != null">
first_name = #{searchParams.firstName}
</if>
<if test="searchParams.lastName != null">
and last_name = #{searchParams.lastName}
</if>
</where>
</sql>

<!-- Method List<Type1> getAsType1(SearchParams searchParams) -->
<select id="getAsType1" resultMap="map1">
<include refid="select-part"/>
</select>

<!-- Method List<Type2> getAsType2(SearchParams searchParams) -->
<select id="getAsType2" resultMap="map2">
<include refid="select-part"/>
</select>

<resultMap id="map1" type="Type1">
...
</resultMap>

<resultMap id="map2" type="Type2">
...
</resultMap>
</mapper>

不用担心 whereand 子句,MyBatis 会handle them correctly .

您的 Java 代码可能如下所示:

package com.example;

import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
// Other imports

@Repository
public interface PersonRepository {
public List<Type1> getAsType1(@Param("searchParams") SearchParams searchParams);
public List<Type2> getAsType2(@Param("searchParams") SearchParams searchParams);
}

SearchParams 只是一个带有 firstNamelastName 等的 POJO。

关于java - 如何在 MyBatis 中通过两个不同的 resultMap 重用同一个 SELECT 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45336905/

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