1. Rótulo <incluir>
As tags são usadas para introduzir um determinado fragmento SQL como um todo na instrução SQL atual e podem encapsular fragmentos de instrução SQL reutilizáveis para facilitar o gerenciamento e a manutenção. Ao usar rótulos, você precisa prestar atenção aos seguintes pontos:
formato gramatical
<include refid="SQL片段ID"/>
Dentre eles, o atributo refid aponta para o ID do fragmento SQL a ser importado, por exemplo:
<select id="selectUsers" resultMap="userResultMap">
SELECT * FROM users
<include refid="whereClause" />
</select>
<sql id="whereClause">
<where>
<if test="name != null">
AND name = #{
name}
</if>
<if test="age != null">
AND age = #{
age}
</if>
</where>
</sql>
No exemplo acima, o rótulo define um fragmento SQL, que contém um rótulo e dois rótulos, que são usados para gerar condições de consulta dinamicamente. O atributo refid da tag faz referência ao fragmento SQL e o inclui na tag.
Escopo dos fragmentos SQL
No arquivo de configuração XML do Mybatis, existem dois escopos dos fragmentos SQL:
(1) Escopo global: fragmentos SQL definidos fora das tags podem ser usados em todo o arquivo XML.
(2) Escopo local: os fragmentos SQL definidos dentro das tags , ou são usados apenas na instrução SQL da tag atual.
Portanto, ao definir fragmentos SQL, é necessário selecionar um escopo apropriado de acordo com a situação real para evitar conflitos de nomenclatura ou uso desnecessário de memória.
2. Marca <trim>
Os rótulos também são usados para gerar instruções SQL dinamicamente, geralmente usadas para remover palavras-chave SQL redundantes ou instruções condicionais. Ao usar rótulos, você precisa prestar atenção aos seguintes pontos:
formato gramatical
<trim prefix="前缀" suffix="后缀" prefixOverrides="需要去除的前缀" suffixOverrides="需要去除的后缀">
SQL语句
</trim>
Entre eles, o atributo prefix indica o prefixo adicionado antes da instrução SQL, o atributo sufixo indica o sufixo adicionado após a instrução SQL, o atributo prefixOverrides indica o prefixo que precisa ser removido e o atributo suffixOverrides indica o sufixo que precisa ser removido. removido. Suponha que temos uma instrução SQL que consulta os usuários, pode haver algumas condições redundantes AND ou OR, podemos usar a tag trim para remover essas partes redundantes, como segue:
<select id="getUserList" resultType="User">
SELECT * FROM user
<trim prefix="WHERE" prefixOverrides="AND | OR">
<if test="id != null">
AND id = #{
id}
</if>
<if test="name != null">
AND name = #{
name}
</if>
<if test="age != null">
AND age = #{
age}
</if>
</trim>
</select>
Neste exemplo, usamos a marca de corte para remover as palavras-chave WHERE, AND e OR redundantes que podem aparecer na instrução SQL. Se id, nome e idade estiverem vazios, a instrução SQL gerada final será "SELECT * FROM user", se apenas id não estiver vazia, a instrução SQL gerada final será "SELECT * FROM user WHERE id = ?", se Apenas nome e idade não estão vazios, então a instrução SQL gerada final é "SELECT * FROM usuário WHERE nome = ? E idade = ?", se id, nome e idade não estiverem vazios, então a instrução SQL gerada final é "SELECT * FROM usuário WHERE id = ?E nome = ?E idade =?".