Java 使用MyBatis的WHERE子句中的动态列名

Java 使用MyBatis的WHERE子句中的动态列名,java,spring,orm,mybatis,spring-mybatis,Java,Spring,Orm,Mybatis,Spring Mybatis,我想在SELECT语句的where子句中编写列名称和列值可能发生变化的动态查询 到目前为止,我有: 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

我想在SELECT语句的where子句中编写列名称和列值可能发生变化的动态查询

到目前为止,我有:

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>
映射器接口:

public interface PersonMapper {
    List<PersonModel> selectByColumnName(
            @Param("columnName") String column, @Param("columnValue") String value
    );
}
但当我将其命名为personMapper.selectByColumnNameNAME时,它不起作用,并给出空结果。如果将Mapper.xml中的SELECT查询替换为指定列名的查询,如下所示:

从姓名为{columnValue}的人员中选择*

然后它工作正常并返回具有给定动态列值的所有人员。

您必须使用${}字符串替换:

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