`
nannan408
  • 浏览: 1783816 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

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

    博客分类:
  • SSI
 
阅读更多
ibatis sql mapping 中原始的sql是这样的。

    <select id="searchUsers" parameterClass="User" resultClass="User">
        select * from user_profile
        <dynamic prepend="where">
            <isGreaterThan prepend="AND" property="roleId" compareValue="0">
                roleId=#roleId#
            </isGreaterThan>
            <isNotEmpty prepend="AND" property="loginName">
                loginName like '%$loginName$%'
            </isNotEmpty>
         </dynamic>
     </select>

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

    <select id="searchUsers" parameterClass="User" resultClass="User">
        select * from user_profile
        <dynamic prepend="where">
            loginName != 'anonymous'
            <isGreaterThan prepend="AND" property="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" parameterClass="User" resultClass="User">
        select * from user_profile where loginName != 'anonymous'
        <dynamic>
            <isGreaterThan prepend="AND" property="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%';







分享到:
评论

相关推荐

    iBATIS动态标签

    通过这些标签,开发者可以在iBATIS的SQL映射文件中实现灵活的动态SQL,如示例所示,可以根据`Account`对象的`username`属性是否存在和其值来决定`WHERE`子句的内容,从而实现更高效和可维护的数据库查询。

    ibatis动态注入

    在IT行业中,数据库操作是应用程序的核心部分,而处理动态SQL是一项常见的挑战。iBATIS,作为一款优秀的持久层框架,提供了强大的动态SQL功能,解决了直接使用JDBC时编写复杂动态SQL的难题。本文将深入探讨iBATIS...

    ibatis 电子书

    - SQL映射:iBATIS允许开发者在XML配置文件中编写动态SQL,支持条件查询、分页等复杂操作。 - 数据库事务管理:iBATIS可以处理事务的提交、回滚等操作,提供了事务控制的能力。 - 缓存机制:内置缓存功能,提高...

    iBATIS实战

    书中既详实地介绍了iBATIS的设计理念和基础知识,也讨论了动态SQL、高速缓存、DAD框架等高级主题,还讲解了iBATIS在实际开发中的应用。书的最后给出了一个设计优雅、层次清晰的示例程序JGameStore,该示例涵盖全书的...

    ibatis初学者学习例程,一看就懂!

    映射文件中,我们可以定义SQL语句,包括静态SQL和动态SQL。例如: ```xml SELECT * FROM user WHERE id = #{id} ``` 其中`#{id}`是参数占位符,会自动处理SQL注入。 5. **动态SQL** Ibatis的动态SQL功能...

    ibatis开发指南

    9. **动态SQL**:iBatis的动态SQL功能强大,允许在XML映射文件中直接编写条件语句,避免了大量重复的静态SQL。例如,`&lt;if&gt;`、`&lt;where&gt;`、`&lt;foreach&gt;`等标签可以帮助构建灵活的SQL。 10. **插件支持**:iBatis允许...

    webwork+spring+ibatis注解培训文档

    - 结合iBatis的注解,可以创建Mapper接口,直接在接口方法上写SQL,如`@Select("SELECT * FROM user WHERE id = #{id}")`,并由MyBatis动态执行。 7. **持续学习与进阶**: - 学习如何配置Spring的注解驱动模式,...

    03_ibatis教程_查询指定id的单个对象.rar

    在IT行业中,数据库操作是...5. 静态与动态SQL的概念,以及在查询中应用动态SQL的方式。 通过学习和实践这个教程,开发者能够掌握在Ibatis中查询指定ID对象的基本步骤,为进一步深入学习和使用Ibatis打下坚实的基础。

    ibatis笔记

    这里通过静态代码块初始化了`SqlMapClient`对象,这是ibatis的核心组件之一,负责执行映射文件中定义的各种操作。 1. **获取配置文件**:通过`Resources.getResourceAsReader("SqlMapConfig.xml")`获取配置文件的...

    总结问题集合

    以上SQL语句分别在MySQL和Oracle中实现了分页查询,返回指定范围内的记录。 ### 5. Java String 类 在Java中,`String`类表示不可变的字符序列,这意味着一旦创建了`String`对象,它的值就不能被改变。对于频繁...

    框架mybatis

    2. **Mapper XML 文件中的静态 SQL**:在映射文件中定义 SQL 语句,通过 `@Select`, `@Insert`, `@Update`, `@Delete` 等注解与接口方法关联。 3. **注解方式**:在 Service 或 Dao 接口的方法上直接使用注解来定义 ...

    开发人员结构化面试大纲

    通过上述知识点的总结,我们可以看到,在开发人员的结构化面试中,数据库知识、常用组件/插件和技术框架的选择与应用是非常重要的评估标准之一。掌握这些核心概念和技能有助于开发者更好地应对实际项目中的挑战。

Global site tag (gtag.js) - Google Analytics