<if test=“state!=null and state==‘0‘ “> mybatis中使用if test判断参数值得问题

记录一个使用mybatis中的小问题

使用
当条件中有判断值是, 要是用 ==,而不能使用单个 =,
mybatis是用OGNL表达式来解析的,在OGNL的表达式中,’1’会被解析成字符,java是强类型的,char 和 一个string 会导致不等,所以if标签中的sql不会被解析。
总结下使用方法:单个的字符要写到双引号里面或者使用.toString()才行!

以下为错误示范:

     <if test="customerState!=null and customerState= '1' ">
        and rc.user_id is not null
    </if>
    <if test="customerState!=null and customerState='2'">
        and rc.name_tags_dcount is not null
    </if>
    <if test="customerState!=null and customerState='3'">
        and rc.name_tags_scount is not null
    </if>
    <if test="customerState!=null and customerState='4'">
        and rc.status = '7'
    </if>
    <if test="customerState!=null and customerState='5'">
        and rc.status = '11'
    </if>

查看打印出的sql
WHERE
1 = 1
AND rc.shareId = ?
AND rc.user_id IS NOT NULL
AND rc.name_tags_dcount IS NOT NULL
AND rc.name_tags_scount IS NOT NULL
AND rc.STATUS = ‘7’
AND rc.STATUS = ‘11’
很明显这不是我想要的, 修改一下

	<if test="customerState!=null and customerState== '1'.toString()">
        and rc.user_id is not null
    </if>
    <if test="customerState!=null and customerState=='2'.toString()">
        and rc.name_tags_dcount is not null
    </if>
    <if test="customerState!=null and customerState=='3'.toString()">
        and rc.name_tags_scount is not null
    </if>
    <if test="customerState!=null and customerState=='4'.toString()">
        and rc.status = '7'
    </if>
    <if test="customerState!=null and customerState=='5'.toString()">
        and rc.status = '11'
    </if>

控制台打印sql为

FROM
	room_clues rc
	LEFT JOIN cloud_user cu ON cu.id = rc.user_id
	LEFT JOIN cartype ct ON ct.id = rc.carTypeId
	LEFT JOIN cartype ct1 ON ct1.id = rc.deal_car_type_id 
WHERE
	1 = 1 
	AND rc.shareId = ?
<select id="selectByApprovalQuery" parameterType="com.qunar.train.admin.api.approval.dto.ApprovalQueryDTO" resultMap="BaseResultMap"> SELECT <include refid="Base_Column_List"/> FROM tba_approval_flow_record <where> <!-- 通用的的精确查询条件 --> <if test="applicant != null and applicant != ''"> applicant = #{applicant} </if> <if test="approvalState != null and approvalState != ''"> AND approval_state = #{approvalState} </if> <if test="approvalType != null and approvalType.size() > 0"> AND approval_type IN <foreach item="item" collection="approvalType" open="(" separator="," close=")"> #{item} </foreach> </if> <!-- 新增的精确查询条件 --> <if test="exactCriteria != null and exactCriteria.size() > 0"> <foreach collection="exactCriteria.entrySet()" item="entry" separator=" AND " open=" AND (" close=")"> -- 检查是否能找到字段名对应的字符串 LOCATE(CONCAT('\"', #{entry.key}, '\":\"', #{entry.value}, '\"'), biz_data) > 0 </foreach> </if> <!-- 新增的模糊查询条件 --> <if test="fuzzyCriteria != null and fuzzyCriteria.size() > 0"> <foreach collection="fuzzyCriteria.entrySet()" item="entry" separator=" AND " open=" AND (" close=")"> -- 检查是否能找到字段名对应的字符串 LOCATE(CONCAT('\"', #{entry.key}, '\":\"'), biz_data) > 0 AND -- 从字段名之后开始提取,直到下一个 " 为止 SUBSTRING( biz_data, LOCATE(CONCAT('\"', #{entry.key}, '\":\"'), biz_data) + CHAR_LENGTH(CONCAT('\"', #{entry.key}, '\":\"')), LOCATE('\"', biz_data, LOCATE(CONCAT('\"', #{entry.key}, '\":\"'), biz_data) + CHAR_LENGTH(CONCAT('\"', #{entry.key}, '\":\"'))) -
03-18
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.phonemarket.mapper.BannerMapper"> <resultMap type="Banner" id="BaseResultMap"> <id property="bannerId" column="banner_id" /> <result property="bannerName" column="banner_name" /> <result property="bannerUrl" column="banner_url" /> <result property="bannerImg" column="banner_img" /> <result property="bannerState" column="banner_state" /> </resultMap> <insert id="addBanner" parameterType="Banner"> insert into banner(banner_name,banner_url,banner_img) values(#{bannerName},#{bannerUrl},#{bannerImg}) </insert> <update id="deleteBanner" parameterType="java.lang.Integer"> update banner set banner_state=-1 where banner_id=#{id} </update> <update id="changeBannerState" parameterType="java.lang.Integer"> update banner set banner_state=#{0} where banner_id=#{1} </update> <update id="updateBanner" parameterType="Banner"> update banner <set> <if test="bannerName!=null"> banner_name=#{bannerName}, </if> <if test="bannerUrl!=null"> banner_url=#{bannerUrl}, </if> <if test="bannerImg!=null"> banner_img=#{bannerImg} </if> </set> where banner_id=#{bannerId} </update> <select id="findBannerById" parameterType="java.lang.Integer" resultMap="BaseResultMap"> select * from banner where banner_id=#{id} </select> <select id="findAllBanner" resultMap="BaseResultMap"> select * from banner where banner_state > 0 </select> <select id="findAllBannerByLikeName" parameterType="java.lang.String" resultMap="BaseResultMap"> select * from banner where banner_state > 0 and banner_name like '%${value}%' </select> <select id="findAllShowBanner" resultMap="BaseResultMap"> select * from banner where banner_state=1 </select> </mapper>
05-17
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

意田天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值