mybatis 字符串比较失效

在mybatis的mapper.xml中用以下语句判断条件:

<if test="name='0'">    

and name=#{name}

</if> 

实现,当name传入字符串0时,判断name的值

但是在实际运行过程中,这个判断条件并没有生效。

原因:mybatis是用OGNL表达式来解析的,在OGNL的表达式中,'0'会被解析成字符,而java是强类型的,传入的是一个String类型,故而 char和String比较时是不相等的。所以sql中if标签是不会被解析的

解决方法:

一、使用用双引号

<if test='name="0"'>
and name=#{name}

</if>

二、使用toString()

<if test="name='0'.toString()">

and name=#{name}

</if>

推荐使用第二种toString方法。

PS:mybatis中的if、when等里面的test条件判断时,被判断的字段可以通过调用java.util.String的方法进行判断,如:

<when test='fwbdh.indexOf(",") != -1'>

AND t.FWBDH in (${fwbdh})

</when>



多条件判断标签choose when otherwise

choose标签是按顺序判断其内部的when标签,当某一个when标签满足条件后,则choose标签结束,当所有的when标签都不满足时,则执行最后的otherwise标签

<!-- choose(判断参数) - 按顺序将实体类 User 第一个不为空的属性作为:where条件 --> <select id="getProductList_choose" resultMap="resultMap_user" parameterType="com.entity.Product">

SELECT * FROM Product p

<where>

    <choose>

            <when test="name !=null ">

                              p.name LIKE CONCAT(CONCAT('%', #{name, jdbcType=VARCHAR}),'%')

            </when >

            <when test="type!= null and type!= ' ' ">

                      AND p.type= #{type, jdbcType=INTEGER}

            </when >

            <otherwise>

                    AND p.price = #{price, jdbcType=NUMBER}

                </otherwise>

            </choose>

        </where>

</select>

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。