zoukankan      html  css  js  c++  java
  • Java往事之《Ibatis动态sql语句》

    Ibatis动态sql语句

    今天下午,一哥们问下图这段代码啥意思。很少用到这种的,后来也是一直在用myBatis,就更不用这种方式了。下面看一下这段代码!

    dynamic 它也是有prepend属性的,为什么这里没有写呢?因为他上面已经写了固定where条件(我个人就比较喜欢加where 1=1,无论有木有条件我就先加一个,之后有条件我就and。),在这呢就不能在写where了对吧。省略prepend属性

    dynamic可以去除第一个prepend=”and”中的字符(这里为and) 下面举个栗子

    xml代码:

    select * from Person
            <dynamic prepend="where"> 
                    <isNotNull property="name" prepend="and">
                        name=#name#
                    </isNotNull>
                    <isNotNull property="sex" prepend="and">
                        sex=#sex#
                    </isNotNull>               
            </dynamic>
    运行结果:
    当name、sex都非null时打出如下的sql语句:select Person where (and) name= ? , and sex= ?
    看到上面这个栗子dynamic就一目了然。下面介绍isNotNull,再举个isNotNull的梨子,请看如下梨子:

    <select id="getCustomerRegNum" resultClass="int" parameterClass="QueryCustomerCondition">  

              select count(cus_id) from cus_customer_tbl   

              <dynamic prepend="WHERE">  

                <isNotNull prepend="AND" property="lct">  

                    ( CUS_CUSTOMER_TBL.CUS_WEB_FROM LIKE '%$lct$%')  

                </isNotNull>  

                <isNotNull prepend="AND" property="lwh">  

                    ( CUS_CUSTOMER_TBL.CUS_WEB_AGENT LIKE '%$lwh$%')  

                </isNotNull>  

              </dynamic> 

       </select>  

    当值传入参数 lct而不传入 lwh时,产生的SQL语句为:

    select count(cus_id) from cus_customer_tbl     WHERE     ( CUS_CUSTOMER_TBL.CUS_WEB_FROM LIKE '%我是参数%')      AND        (CUS_CUSTOMER_TBL.CUS_WEB_AGENT LIKE '%%')


    看到上面这个梨子isNotNull就一目了然。下面介绍isNotEmpty,再举个isNotEmpty的荔枝,请看如下荔枝

    <select id="getCustomerRegNum" resultClass="int" parameterClass="QueryCustomerCondition">  

              select count(cus_id) from cus_customer_tbl   

              <dynamic prepend="WHERE">  

                <isNotEmpty prepend="AND" property="lct">  

                    ( CUS_CUSTOMER_TBL.CUS_WEB_FROM LIKE '%$lct$%')  

                </isNotEmpty>  

                <isNotEmpty prepend="AND" property="lwh">  

                    ( CUS_CUSTOMER_TBL.CUS_WEB_AGENT LIKE '%$lwh$%')  

                </isNotEmpty>  

              </dynamic> 

       </select>  

    同样,当值传入参数 lct 而不传入 lwh时,产生的SQL语句为:

    select count(cus_id) from cus_customer_tbl    WHERE      ( CUS_CUSTOMER_TBL.CUS_WEB_FROM LIKE '%我是参数%')

    那哥们给我发的截图并没有isNotEmpty,在这里我为什么要介绍一下这两者的区别呢?我之前一直用isNotEmpty,刚看到截图的时候,竟然误以为是isNotEmpty,然后我就去百度了一下isNotNull,握了棵草!握了棵草!
    握了棵草!果然还是有区别的。ok,看完栗子、梨子还有荔枝上面的截图代码的意思应该就一目了然了。

  • 相关阅读:
    禁止 FireFox 提示安装 Flash 插件
    MongoDb不能同步,可能是服务器时间不一致
    simpletest的一点经验:0个测试、1个Case的情况
    VIM学习笔记:列编辑
    使用 nginx 做http代理
    VirtualBox非常简单的克隆虚拟机的功能
    PDOStatement的HY093错误原因及解决办法
    火狐英文原版的下载地址
    修改 PHP 的 memory_limit 内存限定
    TEA 加密解法,统一了C语言、Java与PHP的运算结果
  • 原文地址:https://www.cnblogs.com/lwh0206/p/7086036.html
Copyright © 2011-2022 走看看