使用MyBatis

时间:2019-03-01 16:36:26

标签: 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 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.selectByColumnName("NAME", "John")时,它不起作用,给了我空洞的结果。如果我将Mapper.xml中的SELECT查询替换为我在其中指定列名称的查询,如下所示:

SELECT * FROM PERSON WHERE NAME = #{columnValue}

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

1 个答案:

答案 0 :(得分:1)

您必须使用inspect字符串替换:

...