在dao层声明了一个单参数的方法
List<ADVO> listNoExpire(Integer type);
我想在mybaits中的xml中进行判断,如果type为null则查询所有,如果有值则进行where查询
然后我一开始的xml是这么写的
<select id="listNoExpire" resultType="com.lqc.admin.ad.ADVO" parameterType="java.lang.Integer">
select
<include refid="Base_Column_List" />
from t_ad ad
where ad.expiretime >=now()
<if test="type != null">
ad.type = #{type,jdbcType=INTEGER}
</if>
order by ad.sort
</select>
结果会一直报:
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'type' in 'class java.lang.Integer'
的错误。后来查询资料之后解决办法是:
mybaits中,使用单参数的情况下,xml中引用这个参数可以直接使用#{name},这里的name可以使用任意名字,不过我习惯性使用接口中命名的名字。并且在#{}中最好把参数类型也指定了。如:
#{type,jdbcType=INTEGER}
但是在if标签中,如果要引用参数,需要使用_parameter
来代替。要不就会出现上头的报错。
最终xml的写法是:
<select id="listNoExpire" resultType="com.lqc.admin.ad.ADVO" parameterType="java.lang.Integer">
select
<include refid="Base_Column_List" />
from t_ad ad
where ad.expiretime >=now()
<if test="_parameter != null">
and ad.type = #{type,jdbcType=INTEGER}
</if>
order by ad.sort
</select>