Cómo ingresar parámetros en Mapper.xml en SpringBoot

Durante el proceso de desarrollo de SpringBoot, usamos ***Mapper.xml+ ***Mapper.javapara encapsular operaciones en tablas de bases de datos CURD. Normalmente, cada tabla tendrá un conjunto de archivos correspondiente.

1. Uso común de Mapper

El siguiente es un ejemplo de una operación de consulta:

  • Tabla de datos t_sap_customercon campos en la tabla.id、code、name、create_time、update_time、last_ver、is_valid
  • Ahora necesitamos consultar un dato idbasado enis_valid

Código TSapCustomerMapper.java:

package com.starcharge.repository.db1.product.mapper;

import com.starcharge.repository.db1.product.domain.TSapCustomerDO;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

@Repository
public interface TSapCustomerMapper {
    
    
    TSapCustomerDO detail(String id,String isValid);
}

Código TSapCustomerMapper.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.abc.repository.db1.product.mapper.TSapCustomerMapper">

    <!-- 创建数据库与实体类字段对应关系 -->
    <resultMap id="BaseResultMap" type="com.abc.repository.db1.product.domain.TSapCustomerDO">
        <result property="id" column="id"/>
        <result property="name" column="name" jdbcType="VARCHAR"/>
        <result property="createTime" column="create_time" jdbcType="VARCHAR"/>
        <result property="updateTime" column="update_time" jdbcType="VARCHAR"/>
        <result property="lastVer" column="last_ver" jdbcType="VARCHAR"/>
        <result property="isValid" column="is_valid" jdbcType="VARCHAR"/>
    </resultMap>

    <!--查询列表-->
    <select id="detail" resultMap="BaseResultMap">
        select
        id,code,name,last_ver,is_valid,create_time,update_time
        from t_sap_customer
        where is_valid = #{isValid} and id = #{id}
    </select>
</mapper>

Lo anterior TSapCustomerMapper.javay TSapCustomerMapper.xmlson un conjunto de t_sap_customeroperaciones de clase de entidad para tablas de bases de datos, *Mapper.javaresponsables de definir la API externa de la clase de entidad y responsables de implementar declaraciones SQL de operaciones *Mapper.xmlespecíficas .CURD

Los dos usan los valores de atributo en el archivo xml idpara mapear, específicamente los métodos TSapCustomerMapperen la interfaz , y los correspondientes se encontrarán en el archivo para su ejecución.detailxmlid='detail'

2. Método de entrada del parámetro Mapper.xml

Un problema común aquí es que tendremos SQLvarios parámetros de entrada durante la ejecución, entonces, ¿cómo pasamos apilos parámetros de entrada xmlal archivo? Consulte la introducción a continuación.

1. Transferencia de parámetros sencilla

TSapCustomerMapper.javaEntre y TSapCustomerMapper.xml , los parámetros se ingresan según sus nombres de forma predeterminada .

Los siguientes parámetros de entrada pueden ejecutarse normalmente:

//TSapCustomerMapper.java
@Repository
public interface TSapCustomerMapper {
    
    
    TSapCustomerDO detail(String id, String isValid);
}

//TSapCustomerMapper.xml
    <select id="detail" resultMap="BaseResultMap">
        select
        id,code,name,last_ver,is_valid,create_time,update_time
        from t_sap_customer
        where is_valid = #{
    
    isValid} and id = #{
    
    id}
    </select>

2. @Param pasando parámetros

//TSapCustomerMapper.java
@Repository
public interface TSapCustomerMapper {
    
    
    TSapCustomerDO detail(@Param("id1") String id, @Param("isValid1") String isValid);
}

//TSapCustomerMapper.xml
    <select id="detail" resultMap="BaseResultMap">
        select
        id,code,name,last_ver,is_valid,create_time,update_time
        from t_sap_customer
        where is_valid = #{
    
    isValid1} and id = #{
    
    id1}
    </select>

3. Parámetros de entrada del mapa

//SapCustomerImpl.java
@Service
public class SapCustomerImpl implements SapCustomerService {
    
        
	@Override
    public TSapCustomerDO detail(String id) {
    
    
        HashMap<String,String> map=new HashMap<String,String>();
        map.put("id",id);
        map.put("isValid","2");
        TSapCustomerDO r = sapCustomerMapper.detail(map);
        return r;
    }
}

//TSapCustomerMapper.java
@Repository
public interface TSapCustomerMapper {
    
    
    TSapCustomerDO detail(HashMap query);
}

//TSapCustomerMapper.xml
    <select id="detail" resultMap="BaseResultMap">
        select
        id,code,name,last_ver,is_valid,create_time,update_time
        from t_sap_customer
        where is_valid = #{
    
    isValid} and id = #{
    
    id}
    </select>

4. Parámetros, parámetros de entrada arg

arg0...argNDe forma predeterminada , se pasarán param1...paramNdos parámetros de entrada que utilizan el índice en el archivo xml. argA partir de 0, parama partir de 1.

//TSapCustomerMapper.java
@Repository
public interface TSapCustomerMapper {
    
    
    TSapCustomerDO detail(String id, String isValid);
}

//TSapCustomerMapper.xml
    <select id="detail" resultMap="BaseResultMap">
        select
        id,code,name,last_ver,is_valid,create_time,update_time
        from t_sap_customer
        where is_valid = #{
    
    param2} and id = #{
    
    param1}
    </select>

5. Entrada de parámetros simple + entrada de parámetros de mapa

//SapCustomerImpl.java
@Service
public class SapCustomerImpl implements SapCustomerService {
    
        
	@Override
    public TSapCustomerDO detail(String id) {
    
    
        HashMap<String,String> map=new HashMap<String,String>();
        map.put("isValid","2");
        TSapCustomerDO r = sapCustomerMapper.detail(id, map);
        return r;
    }
}

//TSapCustomerMapper.java
@Repository
public interface TSapCustomerMapper {
    
    
    TSapCustomerDO detail(String id, HashMap map);
}

//TSapCustomerMapper.xml
    <select id="detail" resultMap="BaseResultMap">
        select
        id,code,name,last_ver,is_valid,create_time,update_time
        from t_sap_customer
        where is_valid = #{
    
    map.isValid} and id = #{
    
    id}
    </select>

3. La diferencia entre #{} y ${}

En MyBatis, tanto #{ } como ${ } se pueden usar para pasar parámetros dinámicamente.

1. Diferencias

#{}Corresponde al objeto subyacente utilizado jdbcpara PreparedStatementdejecutar declaraciones SQL. En SQL, es equivalente a un marcador de posición de parámetro "?", que se utiliza para completar la declaración precompilada. Cuando completa la declaración preparada, se puede entender que utiliza comillas simples en ambos extremos del valor del parámetro. #{}Además de escribir el nombre del parámetro recibido, también puede configurar javaType, jdbcType, modeetc.

${}La ejecución de declaraciones correspondientes a los objetos utilizados en la capa inferior jdbces simplemente unir cadenas. La compilación y ejecución se realizarán solo después de que se complete el empalme, por lo que el rendimiento es bajo y no se puede reutilizar. Pero todavía hay algunas áreas en las que no eres competente y aún debes completarlas.StatementsqlSQL#{ }${ }

2. Conclusión

#{}Previene en gran medida la inyección sqly mejora la seguridad del sistema. #No lo use donde generalmente se puede usar $.

${}No se puede evitar la inyección. Si el contenido del parámetro de la declaración Sqlescrita debe usarse como parte de la declaración, debe usarse en este momento , como: nombre de tabla, campo de clasificación, agrupación , etc.SQLSQL$order bygroup by

Supongo que te gusta

Origin blog.csdn.net/bobo789456123/article/details/132406894
Recomendado
Clasificación