`
MauerSu
  • 浏览: 513655 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

mybatis xml写动态 sql where set 自动去除 , and/or

 
阅读更多
源:http://limingnihao.iteye.com/blog/782190
评:


3.5 if + trim代替where/set标签

       trim是更灵活的去处多余关键字的标签,他可以实践where和set的效果。



3.5.1trim代替where


Xml代码  收藏代码

    <!-- 5.1 if/trim代替where(判断参数) - 将实体类不为空的属性作为where条件 --> 
    <select id="getStudentList_if_trim" resultMap="resultMap_studentEntity"> 
        SELECT ST.STUDENT_ID, 
               ST.STUDENT_NAME, 
               ST.STUDENT_SEX, 
               ST.STUDENT_BIRTHDAY, 
               ST.STUDENT_PHOTO, 
               ST.CLASS_ID, 
               ST.PLACE_ID 
          FROM STUDENT_TBL ST  
       <trim prefix="WHERE" prefixOverrides="AND|OR suffixOverrides="AND|OR""> 
            <if test="studentName !=null "> 
                ST.STUDENT_NAME LIKE CONCAT(CONCAT('%', #{studentName, jdbcType=VARCHAR}),'%') 
            </if> 
            <if test="studentSex != null and studentSex != '' "> 
                AND ST.STUDENT_SEX = #{studentSex, jdbcType=INTEGER} 
            </if> 
            <if test="studentBirthday != null "> 
                AND ST.STUDENT_BIRTHDAY = #{studentBirthday, jdbcType=DATE} 
            </if> 
            <if test="classId != null and classId!= '' "> 
                AND ST.CLASS_ID = #{classId, jdbcType=VARCHAR} 
            </if> 
            <if test="classEntity != null and classEntity.classId !=null and classEntity.classId !=' ' "> 
                AND ST.CLASS_ID = #{classEntity.classId, jdbcType=VARCHAR} 
            </if> 
            <if test="placeId != null and placeId != '' "> 
                AND ST.PLACE_ID = #{placeId, jdbcType=VARCHAR} 
            </if> 
            <if test="placeEntity != null and placeEntity.placeId != null and placeEntity.placeId != '' "> 
                AND ST.PLACE_ID = #{placeEntity.placeId, jdbcType=VARCHAR} 
            </if> 
            <if test="studentId != null and studentId != '' "> 
                AND ST.STUDENT_ID = #{studentId, jdbcType=VARCHAR} 
            </if> 
        </trim>    
    </select> 




3.5.2 trim代替set


Xml代码  收藏代码

    <!-- 5.2 if/trim代替set(判断参数) - 将实体类不为空的属性更新 --> 
    <update id="updateStudent_if_trim" parameterType="liming.student.manager.data.model.StudentEntity"> 
        UPDATE STUDENT_TBL 
        <trim prefix="SET" suffixOverrides=","> 
            <if test="studentName != null and studentName != '' "> 
                STUDENT_TBL.STUDENT_NAME = #{studentName}, 
            </if> 
            <if test="studentSex != null and studentSex != '' "> 
                STUDENT_TBL.STUDENT_SEX = #{studentSex}, 
            </if> 
            <if test="studentBirthday != null "> 
                STUDENT_TBL.STUDENT_BIRTHDAY = #{studentBirthday}, 
            </if> 
            <if test="studentPhoto != null "> 
                STUDENT_TBL.STUDENT_PHOTO = #{studentPhoto, javaType=byte[], jdbcType=BLOB, typeHandler=org.apache.ibatis.type.BlobTypeHandler}, 
            </if> 
            <if test="classId != '' "> 
                STUDENT_TBL.CLASS_ID = #{classId}, 
            </if> 
            <if test="placeId != '' "> 
                STUDENT_TBL.PLACE_ID = #{placeId} 
            </if> 
        </trim> 
        WHERE STUDENT_TBL.STUDENT_ID = #{studentId} 
    </update> 
分享到:
评论

相关推荐

    MyBatis动态拼接SQL

    MyBatis是一款强大的Java持久层框架,它允许开发者将SQL语句直接写在XML映射文件或注解中,提供了灵活的数据库交互方式。在某些场景下,我们可能需要根据业务逻辑动态地拼接SQL语句,以实现更复杂的查询需求。这就是...

    mybatis中的动态sql, 涉及 where trim set if foreach等

    2. **去除AND/ OR:** 如果子句以AND或OR开头,`&lt;where&gt;`元素会自动去除这些关键字。 3. **动态性:** 如果`state`, `title`, 或`author.name`为null,则对应的条件不会被包含在最终的SQL语句中。 #### 四、`trim`...

    myBatis xml提示文件

    此外,MyBatis还支持动态SQL,通过`&lt;if&gt;`, `&lt;choose&gt;`, `&lt;when&gt;`, `&lt;otherwise&gt;`, `&lt;where&gt;`, `&lt;set&gt;`, `&lt;foreach&gt;`等标签,可以根据条件动态生成SQL语句。 在IDE(如IntelliJ IDEA或Eclipse)中,XML提示文件能...

    mybatis Mapper.xml中传参多选 字符串形式逗号分隔 AND中拼接OR.rar

    在Mybatis中,我们经常需要处理复杂的SQL查询,其中涉及到多条件筛选,这些条件可能是可选的,并且可能需要在`AND`与`OR`之间灵活切换。标题和描述所提及的问题是关于如何在Mapper.xml文件中处理字符串形式的参数,...

    MyBatis 深入浅出-动态SQL

    2. **`&lt;where&gt;`** - 自动处理WHERE关键字及开头的AND或OR。 3. **`&lt;set&gt;`** - 用于UPDATE语句,自动处理SET关键字及其后的逗号。 4. **`&lt;trim&gt;`** - 可以用来去除前缀或后缀的文本,如移除多余的逗号等。 5. **`...

    mybatis-demo11-动态SQL语句.zip

    `&lt;where&gt;`标签用于构建SQL的WHERE子句,并自动添加前导的AND或OR。这样可以避免在多个条件拼接时产生不必要的AND或OR,提高SQL的可读性: ```xml SELECT * FROM user &lt;where&gt; != null"&gt;name = #{name}&lt;/if&gt; ...

    mybatis xml添加提示

    每个标签内部可能还有`parameterType`, `resultType`, `parameterMap`, `resultMap`等属性,以及`&lt;if&gt;`, `&lt;choose&gt;`, `&lt;when&gt;`, `&lt;otherwise&gt;`, `&lt;where&gt;`, `&lt;set&gt;`, `&lt;foreach&gt;`等动态标签。 在IDE中,如IntelliJ ...

    什么是mybatis动态sql以及学习mybatis动态sql的意义

    ### 什么是MyBatis动态SQL MyBatis作为一种流行的Java持久层框架,为开发者提供了将数据库操作与Java对象之间的映射进行简化的便捷方法。它不仅支持传统的SQL查询方式,还引入了动态SQL这一概念,这使得MyBatis在...

    《一头扎进MyBatis3》第六讲 动态SQL的实现

    首先,我们了解MyBatis动态SQL的基础——`&lt;if&gt;`、`&lt;choose&gt;`(`&lt;when&gt;`、`&lt;otherwise&gt;`)、`&lt;where&gt;`、`&lt;set&gt;`、`&lt;foreach&gt;`等标签。这些标签在XML映射文件中用于构建动态的SQL片段。 1. `&lt;if&gt;`标签:这个标签用于...

    Mybatis实现动态代理,动态SQL

    "Mybatis实现动态代理,动态SQL" Mybatis框架可以通过配置的形式为DAO接口生成动态代理实现类,从而简化程序开发,提高开发效率。在实现动态代理时,需要满足以下条件:接口全命名必须和SQL映射文件中的namespace...

    MyBatis之动态SQL-资料

    4. `&lt;trim&gt;`:用于修剪字符串,常用于去除首尾的空格或者SQL的开头的`WHERE`或`AND`。 5. `&lt;foreach&gt;`:遍历集合,常用于IN语句、JOIN等场景。 6. `&lt;set&gt;`:用于构建`SET`子句,处理更新语句中的多个设置项。 三、...

    mybatis动态SQL的详所有细用法代码。经过测试

    4. **Trim、Set、Having 语句**: `&lt;trim&gt;` 用于去除前导或尾随的特定字符,常用于动态 SQL 的拼接。`&lt;set&gt;` 用于更新语句中的 SET 部分,`&lt;having&gt;` 用于 GROUP BY 后的条件筛选。 5. **ForEach 语句**: 这个标签...

    MyBatis注解配置映射器:动态SQL的实现

    在MyBatis中,动态SQL主要通过`&lt;if&gt;`、`&lt;choose&gt;`(相当于`switch`)、`&lt;when&gt;`、`&lt;otherwise&gt;`、`&lt;where&gt;`、`&lt;set&gt;`、`&lt;foreach&gt;`等标签来实现。例如,我们可以使用`&lt;if&gt;`标签来判断某个条件是否满足,然后决定是否...

    mybatis教程之动态sql语句借鉴.pdf

    动态 SQL 在 MyBatis 中主要通过 `&lt;if&gt;`、`&lt;choose&gt;`、`&lt;when&gt;`、`&lt;otherwise&gt;`、`&lt;where&gt;`、`&lt;set&gt;`、`&lt;foreach&gt;` 等标签实现。这些标签允许我们在 XML 映射文件中构建灵活的 SQL 语句,根据传入参数的不同,生成...

    MyBatis 中动态 SQL 的示例

    首先,动态SQL主要通过`&lt;if&gt;`、`&lt;choose&gt;`(相当于Java中的switch语句)、`&lt;when&gt;`、`&lt;otherwise&gt;`、`&lt;where&gt;`、`&lt;set&gt;`、`&lt;foreach&gt;`等标签实现。这些标签允许我们在SQL语句中插入条件或循环,使得同一个映射文件...

    ssm框架\mybatis\动态sql\1.使用动态SQL完成多条件查询

    在MyBatis的映射文件中,我们可以通过`&lt;if&gt;`、`&lt;choose&gt;`(相当于Java的switch)、`&lt;when&gt;`、`&lt;otherwise&gt;`、`&lt;where&gt;`、`&lt;set&gt;`、`&lt;foreach&gt;`等标签来实现动态SQL。首先,我们需要在Mapper XML文件的根元素上启用`...

    mybatis动态sql及其JAVA示例

    - **`&lt;where&gt;`**:用于自动处理WHERE关键字,以及在没有条件时去除多余的AND或OR。 - **`&lt;set&gt;`**:用于更新操作时动态添加SET子句。 - **`&lt;foreach&gt;`**:常用于处理集合类型的参数,如IN查询等。 - **`&lt;choose&gt;`、`...

    ### MyBatis动态SQL介绍说明、使用技巧和优缺点

    - `&lt;where&gt;`元素则自动处理WHERE子句前的AND/OR关键字,使其更加美观和正确。 - 示例: ```xml UPDATE user &lt;set&gt; != null"&gt; username = #{username}, &lt;/if&gt; != null"&gt; password = #{password} &lt;/if&gt; ...

    mybatis动态sql(使用<where>标签来处理多个查询条件)

    MyBatis提供了多种动态SQL标签,如`&lt;if&gt;`、`&lt;choose&gt;`、`&lt;when&gt;`、`&lt;otherwise&gt;`、`&lt;trim&gt;`、`&lt;where&gt;`、`&lt;set&gt;`和`&lt;foreach&gt;`等,这些标签可以用来构建灵活多变的SQL语句。 #### 三、`&lt;where&gt;`标签详解 `&lt;where&gt;`...

    MyBatis-03动态SQL-01.<if>元素的使用

    除了`&lt;if&gt;`,MyBatis还提供了其他动态SQL元素,如`&lt;choose&gt;`, `&lt;when&gt;`, `&lt;otherwise&gt;`, `&lt;trim&gt;`, `&lt;where&gt;`, `&lt;set&gt;`等,它们可以组合使用,构建出更加复杂的逻辑。这些元素共同构成了MyBatis动态SQL的强大功能,...

Global site tag (gtag.js) - Google Analytics