Mybatis没有Getter属性



我正在使用Mybatis 3.2.6并实现自定义resulthandler。在使用一个简单的数据类型参数之前,我已经这样做了,并且没有出现任何问题。这一次,我需要传入几个参数。我使用的签名是

session.select(statement, parameter, handler);

对于参数,我创建了一个简单的POJO来方便地发送我需要的东西。内容如下:

public class DifferenceParam {
private int current;
private int compare;
private String table;
private String comparator;
/**
 * Constructor excluding comparator.  Will default a value of
 * &quot;code&quot; to compare content on, e.g., <br/>
 * {@code select * from a minus select * from b where a.code = b.code } <br/>
 * @param table
 * @param current
 * @param compare
 */
public DifferenceParam(String table, int current, int compare) {
    this(table, "code", current, compare);
}
/**
 * Constructor providing a specific column to compare on, e.g. <br/>
 * {@code select * from a minus select * from b where a.[comparator] = b.[comparator] } <br/>
 * @param table
 * @param comparator
 * @param current
 * @param compare
 */
public DifferenceParam(String table, String comparator, int current, int compare) {
    this.table = table;
    this.comparator = comparator;
    this.current = current;
    this.compare = compare;
}
/** Appropriate setters and getters to follow **/
}

处理程序实现目前是无关紧要的,因为我提前得到了一个异常…我正在执行的查询是:

<select id="getCodeSetModifications" parameterType="DifferenceParam" resultType="Code">
    select *
    from
    (
        select * from ${param.table} where revision_seq = #{param.current}
        minus
        select * from ${param.table} where revision_seq = #{param.compare}
    ) a, ${param.table} b
    where a.${param.comparator} = b.${param.comparator}
        and b.revision_seq = #{param.compare}
</select>

界面也是这样

public List<Code> getCodeSetModifications(@Param("param") DifferenceParam param);

我遇到的问题是通过映射器执行,例如

session.getMapper(DifferenceParam.class);

工作得很好,但是当我在会话上通过select调用时,我得到了以下异常:

Error querying database.  Cause: org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'param' in 'class com.mmm.his.cer.cerval.uidifference.map.param.DifferenceParam'
Cause: org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'param' in 'class com.mmm.his.cer.cerval.uidifference.map.param.DifferenceParam'

我已经调试到我可以进入Mybatis,但我没有运气。

当您使用session.getMapper(DifferenceParam.class);时,mybatis查找@Param注释并在查询中使用它的值。

当你调用session.select(statement, parameter, handler);时,这样的映射不会发生。

尝试将public DifferenceParam getParam() { return this; }添加到DifferenceParam以解决此问题。

当MyBatis查询只有一个参数时。不需要#{param.}参考。

因为它默认使用唯一的参数。

所以当你使用${param.table}时,它实际上使用的是#{DifferenceParam.param.table}

因为它认为${param.}#{DifferenceParam.}里面

最新更新