使用 MyBatis 的 WHERE 子句中的动态列名
Dynamic column name in WHERE clause using 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}
然后它工作正常并且 returns 所有具有给定动态 columnValue 的人。
您必须使用 ${}
字符串替换:
<select id="selectByColumnName" resultType="Person" resultMap="personMap"><![CDATA[
SELECT * FROM PERSON WHERE ${columnName} = #{columnValue}
]]></select>
我想编写动态查询,其中列名和列值可能会在 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}
然后它工作正常并且 returns 所有具有给定动态 columnValue 的人。
您必须使用 ${}
字符串替换:
<select id="selectByColumnName" resultType="Person" resultMap="personMap"><![CDATA[
SELECT * FROM PERSON WHERE ${columnName} = #{columnValue}
]]></select>