MyBatis动态SQL

来源:互联网 发布:c语言long占几个字节 编辑:程序博客网 时间:2024/06/01 17:14

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


0 0
原创粉丝点击