Динамическое имя столбца в предложении WHERE с использованием MyBatis - PullRequest
0 голосов
/ 01 марта 2019

Я хотел бы написать динамический запрос, в котором имя столбца и значение столбца могут измениться в предложении WHERE оператора SELECT.

Пока у меня есть это:

Mapper.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="mypackage.PersonMapper">

    <resultMap id="personMap" type="Person">
        <id property="name" column="NAME"/>
        <id property="lastname" column="LASTNAME"/>
    </resultMap>

    <select id="selectByColumnName" resultType="Person" resultMap="personMap"><![CDATA[
        SELECT * FROM PERSON WHERE #{columnName} = #{columnValue}
    ]]></select>
</mapper>

Интерфейс Mapper:

public interface PersonMapper {
    List<PersonModel> selectByColumnName(
            @Param("columnName") String column, @Param("columnValue") String value
    );
}

Но когда я это называю personMapper.selectByColumnName("NAME", "John"), это не работает и дает мне пустой результат.Если я заменим свой запрос SELECT в Mapper.xml на запрос, в котором я укажу имя столбца, например:

SELECT * FROM PERSON WHERE NAME = #{columnValue}

, тогда он будет работать нормально и вернет всех людей с данным динамическим columnValue.

1 Ответ

0 голосов
/ 02 марта 2019

Вы должны использовать ${} подстановку строк:

    <select id="selectByColumnName" resultType="Person" resultMap="personMap"><![CDATA[
        SELECT * FROM PERSON WHERE ${columnName} = #{columnValue}
    ]]></select>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...