MyBatis传入Integer类型使用if判断时会报错

<select id="select" resultType="com.huafu.controller.entity.ProductCatalogEntity">
select * from f_product_catalog where 1 = 1
<if test="_parameter!=null">
and id=#{_parameter}
</if>
</select> 正确
<select id="select" resultType="com.huafu.controller.entity.ProductCatalogEntity">
select * from f_product_catalog where 1 = 1
<if test="id!=null">
and id=#{id}//id为Integer类型
</if>
</select>就错报
There is no getter for property named 'id' in 'class java.lang.Integer' 在网上查了很多说是用_parameter,试了不会报错 可这只能传一个参数,如果传多个int 类型的值要怎么办?我放到map中还是会报上面的那个错

可以用parameterType指定参数类型啊,如果要判断多个值,可以定义一个vo类,把要判断的字段包进去,判断和传值的时候通过对象点的方法就可以了,很方便

可以这样用

忘了说,我这个是MyBatis版本是3.2.7

追问

还是会报那个错啊 实体中的id也是integer类型

追答

那你这种写法试一下 传参时把id=#{id}改为id=${id}

select * from f_product_catalog where 1 = 1

and id=${id}//id为Integer类型

猜测可能是因为#{}这种方式使用的是ognl解析参数,
改成这种${}应该就可以,但是这样可能会存在sql注入的危险

追问

我这个也是3.2.7

追答

还不行吗?判断时,用where子句要方便一些

追问

我把实体的属性id改成String了这样就没事了,对了 我想问下大于小于在配置文件里怎么写啊?能用我发的代码写个例子么 我在网上找了半天写的都不一样 还是不知道该加在哪

追答

你代码里没有大小于号,不知道你是这个意思吗:


第一个方法:         

对应 <

  对应 >直接在sql里把>或<换过来

 第二个方法:

    用这种<![CDATA[]]> 把你的sql包起来


            例如:<![   CDATA[你的sql   ]]>

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-07-27
你可以指定类型;
BIT         FLOAT      CHAR           TIMESTAMP       OTHER       UNDEFINEDTINYINT     REAL       VARCHAR        BINARY          BLOB        NVARCHARSMALLINT    DOUBLE     LONGVARCHAR    VARBINARY       CLOB        NCHAR
INTEGER     NUMERIC    DATE           LONGVARBINARY   BOOLEAN     NCLOB
BIGINT      DECIMAL    TIME           NULL            CURSOR
这些都是myBatis支持的类型  你可以这么写 #{id,jdbcType=INTEGER}

追问

不行的还是会报那个错

追答

你没指定这个sql语句需要参数传入 在

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网