试图找出是否有办法在一个查询中重用相同的片段.
考虑一下:
<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 ×1