最近在项目里面,有市县区三级联动的图标问题,即订阅不同的地区,图表显示的数据就是不同的地区数据,因为工程持久层用的是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>