Mybatis <include> <trim> explicação detalhada do rótulo

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 =?".

Acho que você gosta

Origin blog.csdn.net/weixin_44917334/article/details/129402436
Recomendado
Clasificación