关于ibatis动态拼凑查询条件失败,咋回事?大虾求指教!

原创
2013/10/17 16:36
阅读数 549

    今天突然接到客服要对现在系统要增加一块查询功能的需求,原来信心满满的跟她说稍等几分钟就好,但那结果是没有预想到的,等了老半天还没弄好,真是被ibatis玩转了,呜呜……

    需求如下: 给出一个号码,可以直接查出它是否在网,或是直接号码+(在网/退订)组合查询。

    实现效果:第一种查询OK没有问题,但第二种查询就出问题了。在网/退订我用的是一个下拉菜单控件做为输入,后端把它和手机号码写进一个map数组传入到ibatis动态拼凑中去,结果问题就出现了,满足后面那个(在网/退订)条件的SQL语句死活不出来,检查了好几遍代码也没发现有问题呀,郁闷..........

ibatis xml代码如下:

<dynamic prepend="WHERE">
    <isNotEmpty property="USER_MOBILE">
        user_mobile = #USER_MOBILE#
    </isNotEmpty>
    <isNotEmpty prepend=" AND " property="USER_TYPE">
        <isEqual compareValue="2">
            ( pro_klys = 'Y' OR pro_yybd = 'Y' OR pro_kxye = 'Y' )
        </isEqual>
        <isEqual compareValue="3">
            ( pro_yybd = 'N' AND pro_kxye = 'N' AND pro_klys = 'N' )
        </isEqual>
    </isNotEmpty>
</dynamic>

调试窗口输出情况是: 

SELECT * FROM user_info WHERE user_mobile = ?

后面的当user_type = 2或3条件的SQL条件就没有拼凑了,这是怎么回事呢?

有人谁遇到过这样的问题呢?求指教,谢谢。


展开阅读全文
打赏
0
3 收藏
分享
加载中
推荐国内最流行的ibatis代码生成网站 --- fwjava.com
无需任何安装配置,直接在线生成,且十分规范好用.
现在,很多知名的互联网公司都在用它.
2016/09/20 19:21
回复
举报
照这种拼出来应该才对
2015/03/26 14:30
回复
举报
<isEqual compareValue="1" property="type">
    <isNotEmpty prepend="AND" property="aac003"> <!-- 姓名 -->
     a.aac003 like '%'||#aac003#||'%'
      </isNotEmpty>
      <isNotEmpty prepend="AND" property="aac002"> <!-- 居民身份证号 -->
     a.aac002 like '%'||#aac002#||'%'
      </isNotEmpty>
      <isNotEmpty prepend="AND" property="aac004"> <!-- 性别 -->
     a.aac004 like '%'||#aac004#||'%'
      </isNotEmpty>
    </isEqual>
2015/03/26 14:30
回复
举报
ibatis中应该经常见到"<![CDATA["这样的东西吧,它的用处应该是转义一些特殊关键字字符,
    不合法的XML字符必须被替换为相应的实体。 下面是五个在XML文档中预定义好的实体:
    <  >   小于号
    >  <   大于号
    &  &  和
    '  '  单引号
    "  "  双引号
也就是说,你这段语句里面有单引号,需要转义之后才不会出现错误
需要将SQL语句放入<![CDATA[ 需要拼接的SQL语句 ]]>,你可以试试这样,看可以不
2015/03/26 12:50
回复
举报
isequal 也要property吧
2013/10/17 22:24
回复
举报
isequal 也要property吧
2013/10/17 22:24
回复
举报
更多评论
打赏
6 评论
3 收藏
0
分享
返回顶部
顶部