MyBatis动态SQL

最近在项目里面,有市县区三级联动的图标问题,即订阅不同的地区,图表显示的数据就是不同的地区数据,因为工程持久层用的是MyBatis,所以在这里过程遇到的问题写下来,若能帮助他人,那真的是极好的。

在这里我用的是choose,when,otherwise标签,参数传递进来的是map格式,刚开始我是这样写的

<select id="getAge" parameterType="map" resultType="map">
    select substr(DM,3,11)csny,substr(DM,1,1) xb,sum(amount)rs
    from ZBD_XQGL_RK  
    where c_type = #{type}
    and LB = #{lb}
    <choose>
    	<when test="substr(${area},4,6) !=00 and <pre name="code" class="html">substr(${area},
6,8)==00"> and substr(s_area,1,6)||'000000'=#{area} </when> <when test="
substr(${area},4,6) !=00 and <pre name="code" class="html">substr(${area},
6,8)==00">

 and s_area=#{area} </when> </choose> and substr(S_DATE,1,6) = #{tjsj} group by substr(DM,3,11),substr(DM,1,1),s_area </select> 
 然后就是报错 说是ongl表达式错误 ,然后就上网找问题,说是test中“”内为字符了,不用加$EL表达式,直接就可以写变量名,同样的 substrate()函数也应该用String 的,所以正确的写法就成了这样 

<select id="getAge" parameterType="map" resultType="map">
    select substr(DM,3,11)csny,substr(DM,1,1) xb,sum(amount)rs
    from ZBD_XQGL_RK  
    where c_type = #{type}
    and LB = #{lb}
    <choose>
    	<when test="area.substring(4,6) !=00 and area.substring(6,8)==00">
    		and substr(s_area,1,6)||'000000'=#{area}
    	</when>
    	<when test="area.substring(4,6) !=00 and area.substring(6,8) !=00">
    		and s_area=#{area}
    	</when>  
    </choose>
    and substr(S_DATE,1,6) = #{tjsj}
    group by substr(DM,3,11),substr(DM,1,1),s_area 
</select>


  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值