首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

ibatis-在where中混同动态和静态sql (转)

2013-01-18 
ibatis-在where中混合动态和静态sql (转)ibatis sql mapping 中原始的sql是这样的。select idsearchUser

ibatis-在where中混合动态和静态sql (转)
ibatis sql mapping 中原始的sql是这样的。

    <select id="searchUsers" parameterresultproperty="roleId" compareValue="0">
                roleId=#roleId#
            </isGreaterThan>
            <isNotEmpty prepend="AND" property="loginName">
                loginName like '%$loginName$%'
            </isNotEmpty>
         </dynamic>
     </select>

现在我需要增加一个静态的过滤条件 loginName != 'anonymous',如何能够混合动态和静态sql在where子句中呢。
第一种方案:

    <select id="searchUsers" parameterresultproperty="roleId" compareValue="0">
                roleId=#roleId#
            </isGreaterThan>
            <isNotEmpty prepend="AND" property="loginName">
                loginName like '%$loginName$%'
            </isNotEmpty>
         </dynamic>
     </select>

这样配置产生的结果是 roleId条件前没有AND

select * from user_profile where loginName != 'anonymous' roleId=1 AND loginName like '%user%';


第二种方案:

    <select id="searchUsers" parameterresultproperty="roleId" compareValue="0">
                roleId=#roleId#
            </isGreaterThan>
            <isNotEmpty prepend="AND" property="loginName">
                loginName like '%$loginName$%'
            </isNotEmpty>
         </dynamic>
     </select>

这种方案解决了动态和静态sql的混合问题,产生的sql无论有没有roleid和loginName参数都是正确的。

select * from user_profile where loginName != 'anonymous';
or

select * from user_profile where loginName != 'anonymous' AND roleId=1 AND loginName like '%user%';







热点排行