使用对象的 属性,它是映射器 XML 中的字符串数组
Use an property of an object which is array of strings in mapper XML
我想在我的映射器文件中的对象中引用 属性,它是 SQL IN 条件中的字符串数组。查询进行计数,因此 return 所需的只是一个数值。查询需要根据过滤器对象中定义的一组灵活的标准来调整其计数。一些过滤器将存在(即不为空),而其他过滤器将不存在。
<?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="TotalUniqueUsers">
<select id="getTotalUniqueUsers"
resultType="int"
parameterType="RequestFilter">
SELECT *
FROM MY_TABLE
WHERE
<if test="quarterList!=null and quarterList.length>0">
AND trim(FISCAL_QUARTER_NAME) IN #{quarterList javaType=list}
</if>
</select>
</mapper>
public class RequestFilter {
private String[] quarterList;
public String[] getQuarterList(){
return this.quarterList;
}
public void setQuarterList(String[] quarterList){
this.quarterList=quarterList;
}
}
请注意,RequestFilter 没有类型处理程序。我不认为我需要一个。我不是想把一个对象以某种奇怪的方式浓缩成一个领域。我想要做的就是有一个输入参数
通过以上,我得到
org.apache.ibatis.exceptions.PersistenceException:
...
Caused by: org.apache.ibatis.reflection.ReflectionException: 在 'class RequestFilter'
中没有名为 'quarterList javaType=list' 的 属性 的 getter
我也尝试了 javaType=Array,但得到了相同的结果。如果我改变
#{quarterList javaType=list}
到
#{quarterList}
它说 RequestFilter 的 typeHandler 为 null。
在 JDBC 中没有可移植的方法将列表或数组设置为 IN
准备语句参数,因此在 mybatis 中(如果您使用 ways 可以做到这一点postgres).
所以在一般情况下,您需要使用列表中每个元素的参数动态生成查询:
<select id="getTotalUniqueUsers"
resultType="int"
parameterType="RequestFilter">
SELECT *
FROM MY_TABLE
WHERE
<if test="quarterList!=null and quarterList.length>0">
trim(FISCAL_QUARTER_NAME) IN (
<foreach item='quarter' collection='quarterList' separator=','>
#{quarter}
</foreach>
)
</if>
</select>
我想在我的映射器文件中的对象中引用 属性,它是 SQL IN 条件中的字符串数组。查询进行计数,因此 return 所需的只是一个数值。查询需要根据过滤器对象中定义的一组灵活的标准来调整其计数。一些过滤器将存在(即不为空),而其他过滤器将不存在。
<?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="TotalUniqueUsers">
<select id="getTotalUniqueUsers"
resultType="int"
parameterType="RequestFilter">
SELECT *
FROM MY_TABLE
WHERE
<if test="quarterList!=null and quarterList.length>0">
AND trim(FISCAL_QUARTER_NAME) IN #{quarterList javaType=list}
</if>
</select>
</mapper>
public class RequestFilter {
private String[] quarterList;
public String[] getQuarterList(){
return this.quarterList;
}
public void setQuarterList(String[] quarterList){
this.quarterList=quarterList;
}
}
请注意,RequestFilter 没有类型处理程序。我不认为我需要一个。我不是想把一个对象以某种奇怪的方式浓缩成一个领域。我想要做的就是有一个输入参数
通过以上,我得到 org.apache.ibatis.exceptions.PersistenceException: ... Caused by: org.apache.ibatis.reflection.ReflectionException: 在 'class RequestFilter'
中没有名为 'quarterList javaType=list' 的 属性 的 getter我也尝试了 javaType=Array,但得到了相同的结果。如果我改变
#{quarterList javaType=list}
到
#{quarterList}
它说 RequestFilter 的 typeHandler 为 null。
在 JDBC 中没有可移植的方法将列表或数组设置为 IN
准备语句参数,因此在 mybatis 中(如果您使用 ways 可以做到这一点postgres).
所以在一般情况下,您需要使用列表中每个元素的参数动态生成查询:
<select id="getTotalUniqueUsers"
resultType="int"
parameterType="RequestFilter">
SELECT *
FROM MY_TABLE
WHERE
<if test="quarterList!=null and quarterList.length>0">
trim(FISCAL_QUARTER_NAME) IN (
<foreach item='quarter' collection='quarterList' separator=','>
#{quarter}
</foreach>
)
</if>
</select>