MyBatis传入Integer类型使用if判断时会报错
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 ]]>
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语句需要参数传入 在
关于INTEGER 类型在Mybatis中使用if的注意
Mybatis中是使用<if>用来编写动态语句是很方便的一个操作,不过在最近的项目开发中当使用的一个变量为inteter类型的时候,用<if>来编写发现有点问题,源码如下面:
<update id="updateWeightintervalInfo" parameterType="com.exiao.platform.core.logistics.data.WeightInterval"> update tm_weightinterval SET <if test="wgtintervalCode!=null and wgtintervalCode !=‘‘"> wgtintervalcode=#{wgtintervalCode}, </if> <if test="intervalName!=null and intervalName!=‘‘"> intervalname=#{intervalName}, </if> <if test="transportMode!=null and transportMode!=‘‘"> transportmode=#{transportMode}, </if> <if test="vendorCode !=null and vendorCode !=‘‘"> vendorcode=#{vendorCode}, </if> <if test="departurecityCode!=null and departurecityCode!=‘‘"> departurecitycode=#{departurecityCode}, </if> <if test="minWeight !=null and minWeight !=‘‘"> minweight=#{minWeight}, </if> <if test="maxWeight != null and maxWeight !=‘‘"> maxweight=#{maxWeight}, </if> <if test="firstWeight !=null and firstWeight !=‘‘"> firstweight=#{firstWeight}, </if> <if test="addedWeight != null and addedWeight!=‘‘"> addedweight=#{addedWeight}, </if> <if test="sortSeq!=null and sortSeq!=‘‘"> sortseq=#{sortSeq}, </if> <if test="enabled!=null and enabled!=‘‘"> enabled=#{enabled}, </if> update_time=#{updateTime}, updator=#{updator} WHERE wgtintervalid=#{id} </update>
其中enabled是interger类型,其中用0表示无效,1表示有效。如果传值为0的时候,按照if的逻辑则不判断为false不执行当中的语句。经过查找资料,只需要把代码中的enabled!=‘’去掉则可以正常使用。
以上是关于MyBatis传入Integer类型使用if判断时会报错的主要内容,如果未能解决你的问题,请参考以下文章
MyBatis解析<if>动态sql时,Integer类型值为0,返回false
如何解决mybatis在xml中传入Integer整型参数为0时查询条件失效问题?亲测有效