`
MauerSu
  • 浏览: 496190 次
  • 性别: 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由浅入深 - 03动态SQL 源码

    动态SQL是Mybatis的亮点功能之一,解决了根据不同条件拼接SQL的繁琐痛苦问题,避免了java代码和sql混在一起,是非常常用的功能,也是本人非常喜欢的功能,点赞! 通过本源码您将掌握xml映射文件的常用元素: 1. if 2....

    springmybatis

    mybatis实战教程mybatis in action之八mybatis 动态sql语句 mybatis实战教程mybatis in action之九mybatis 代码生成工具的使用 mybatis SqlSessionDaoSupport的使用附代码下载 转自:...

    MyBatis动态SQL是一种强大的特性.docx

    MyBatis动态SQL则通过标签的形式在XML映射文件中编写,从而避免了手动拼接SQL的麻烦。 MyBatis提供了多种元素来实现动态SQL,如、、、、、&lt;where&gt;、&lt;set&gt;等。这些元素可以单独使用,也可以组合使用,以实现复杂的...

    MyBatis动态SQL是一种强大的特性,它允许我们在SQL语句中根据条件动态地添加或删除某些部分,从而实现更加灵活和高效的数据

    MyBatis动态SQL则通过标签的形式在XML映射文件中编写,从而避免了手动拼接SQL的麻烦。 MyBatis提供了多种元素来实现动态SQL,如、、、、、&lt;where&gt;、&lt;set&gt;等。这些元素可以单独使用,也可以组合使用,以实现复杂的...

    python学习导航.txt

    python

    node-v8.3.0-linux-s390x.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    嵌入式微处理器设计及应用

    摘要:为满足智能家居座椅的交互式运动控制需求,基于AT89S52设计了嵌入式座椅运动控制系统。使用VB.net设计了游戏手柄按键读取软件,并在此基础上设计了座椅运动控制软件,软件可分别在“手柄模式”和“鼠标模式”下与嵌入式座椅运动控制器通信,进而控制座椅进行加速、减速、正转和反转等运动;构建了控制系统实验装置,实验结果表明,“鼠标模式”下,通过鼠标点击控制软件上功能按钮可实现对座椅的准确运动控制;“手柄模式”下,游戏手柄不仅可控制座椅运动,还可同步控制电脑上运行的游戏或远程遥控车,实现浸入感较强的座椅运动娱乐应用。

    2024年中国NFC RFID阅读器行业研究报告.docx

    2024年中国NFC RFID阅读器行业研究报告

    node-v9.9.0-linux-ppc64le.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    04-18 周四 为LLM-inference项目配置GitHub CI过程记录

    04-18 周四 为LLM-inference项目配置GitHub CI过程记录

    2024年中国AI和机器视觉行业研究报告.docx

    2024年中国AI和机器视觉行业研究报告

    计算机二级【公共基础知识速学教程】.pdf

    内容概要:这份资料包含了计算机二级公共基础知识速学教程的内容大纲,涵盖了数据结构与算法、程序设计基础、软件工程基础、数据库设计基础等多个章节。其中包括了算法复杂度、数据结构、栈、队列、链表、二叉树、查找、排序等内容,以及程序设计方法、软件工程概念、数据库设计原理等知识点。 适用人群:适合希望系统学习计算机二级公共基础知识的学生、计算机专业学习者、程序员、软件工程师以及对数据结构、算法和数据库设计感兴趣的人群,希望通过系统学习提升自己的计算机基础知识和技能。 使用场景及目标:该教程可用于计算机相关专业的课程学习、自学提升或备考计算机二级公共基础考试。学习者可以通过逐章学习和实践,掌握数据结构与算法、程序设计基础、软件工程基础和数据库设计基础等知识,提高自己在计算机领域的理论基础和实践能力。 其他说明:学习者在使用这份教程时,可以结合实际案例和练习题进行深入学习和巩固。建议按照章节顺序系统学习,理解各个知识点的概念和应用,并通过实践项目或练习加深对计算机基础知识的理解和掌握。通过系统学习,可以提升自己在计算机领域的专业水平和能力。

    减肥管理,全球前10强生产商排名及市场份额.docx

    减肥管理,全球前10强生产商排名及市场份额

    04-19 周五 GitHub actions-runner 程序解释

    04-19 周五 GitHub actions-runner 程序解释

    node-v8.16.1-linux-arm64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    基于Gnuradio与Hackrf的无线通信收发系统的实现.pdf

    基于Gnuradio与Hackrf的无线通信收发系统的实现.pdf

    5g与数字孪生赋能数字化矿山总体解决方案.pptx

    5g与数字孪生赋能数字化矿山总体解决方案.pptx

    ISO IEC TS 27022-2021 信息技术信息安全管理系统过程指南.pdf

    ISO IEC TS 27022-2021 信息技术信息安全管理系统过程指南.pdf

    一篇关于图像和视频去噪技术的研究论文,它介绍了一种基于稀疏3D变换域的协同滤波方法

    "Image and video denoising by sparse 3D transform-domain collaborative filtering" 是一篇关于图像和视频去噪技术的研究论文,它介绍了一种基于稀疏3D变换域的协同滤波方法。这种方法的核心思想是利用图像或视频中的空间和时间冗余信息来去除噪声

    IEC 60364-7-712-2017 低压电气装置.第7-712部分:特殊装置或位置的要求.太阳能光伏PV电源系统

    IEC 60364-7-712-2017 低压电气装置.第7-712部分:特殊装置或位置的要求.太阳能光伏(PV)电源系统.pdf

Global site tag (gtag.js) - Google Analytics