小编rea*_*nbs的帖子

对于相同类型的连接表,MyBatis多次包含相同的<sql>片段

更新2016-06-07 - 请参阅下面的答案以获得解决方案

试图找出是否有办法在一个查询中重用相同的片段.

考虑一下:

<sql id="personFields">
    per.id                  person_id,
    per.created_at          person_created_at,
    per.email_address       person_email_address,
    per.first_name          person_first_name,
    per.last_name           person_last_name,
    per.middle_name         person_middle_name
</sql>
Run Code Online (Sandbox Code Playgroud)

"per." 别名用于在使用多个连接表的查询中使用时避免列名冲突.它包括这样:

SELECT
<include refid="com.acme.data.mapper.PersonMapper.personFields"/>
FROM Person per
Run Code Online (Sandbox Code Playgroud)

问题是每个查询不能多次使用它,因为我们有"per".别名.

有这样的事情会很棒:

<sql id="personFields">
    #{alias}.id                  #{alias}_person_id,
    #{alias}.created_at          #{alias}_person_created_at,
    #{alias}.email_address       #{alias}_person_email_address,
    #{alias}.first_name          #{alias}_person_first_name,
    #{alias}.last_name           #{alias}_person_last_name,
    #{alias}.middle_name         #{alias}_person_middle_name
</sql>
Run Code Online (Sandbox Code Playgroud)

并包括这样:

SELECT
<include refid="com.acme.data.mapper.PersonMapper.personFields" alias="per1"/>,
<include refid="com.acme.data.mapper.PersonMapper.personFields" alias="per2"/>
FROM Person per1
JOIN Person per2 ON per2.parent_id = per1.id
Run Code Online (Sandbox Code Playgroud)

mybatis

3
推荐指数
2
解决办法
1万
查看次数

标签 统计

mybatis ×1