返回顶部
首页 > 资讯 > 精选 >好程序员Java分享Mybatis必会的动态SQL
  • 131
分享到

好程序员Java分享Mybatis必会的动态SQL

2023-06-02 17:06:44 131人浏览 独家记忆
摘要

好程序员Java分享mybatis必会的动态sql,前言:Mybatis可谓是java开发者必须会的一项技能。MyBatis 的强大特性之一便是它的动态 SQL。如果你有使用 JDBC 或其它类似框架的经验,你就能体会到根据不同条件拼接 S

程序员Java分享mybatis必会的动态sql,前言:

Mybatis可谓是java开发者必须会的一项技能。MyBatis 的强大特性之一便是它的动态 SQL。如果你有使用 JDBC 或其它类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句的痛苦。例如拼接时要确保不能忘记添加必要的空格,还要注意去掉列表最后一个列名的逗号。利用动态 SQL 这一特性可以彻底摆脱这种痛苦。

Mybatis动态sql

mybatis 动态SQL,通过 if, choose, when, otherwise, trim, where, set, foreach等标签,可组合成非常灵活的SQL语句,从而在提高 SQL 语句的准确性的同时,也大大提高了开发人员的效率。本文主要介绍这几个动态SQL.

具体示例

if标签 if就是用来对输入映射的字段进行判断 一般是非空判断 null 和""。

 <!-- 案例1:动态sql之if -->  

 <select id="selectUsersIf" parameterType="user" resultType="user">  

     select * from users where 1=1   

     <if test="uname!=null and uname!=''"> and uname like "%"#{uname}"%" </if>   

     <if test="sex!=null and sex!=''">and sex = #{sex} </if>   

 </select>  

动态SQL <where /> 相当于 where关键字 <where />可以自动处理第一个前and 或者or。 当条件都没有的时候 where也不会加上 。

 <!-- 案例2:动态sql之where 可以自动处理第一个前and 或者or。当条件都没有的时候  where也不会加上  -->  

 <select id="selectUsersWhere" parameterType="user" resultType="user">  

     select * from users   

     <where>  

     <if test="uname!=null and uname!=''"> and uname like "%"#{uname}"%" </if>   

     <if test="sex!=null and sex!=''">and sex = #{sex} </if>   

     </where> 

choose—when--when--otherwise when可以多个 otherwise只能有一个 类似于 switch case。

需求:输入用户id 按照用户id进行精确查找  其他条件不看  没有输入  id  用户名模糊查找 都没有的话  查询id=1的用户

 <!-- 案例3:动态sql之choose—when when otherwise -->  

   

 <select id="selectUsersChoose" parameterType="user" resultType="user">  

     select * from users   

     <where>  

             <choose>  

                 <when test="uid!=null"> uid=#{uid}</when>  

                 <when test="uname!=null and uname!=''"> uname like "%"#{uname}"%"</when>  

                 <otherwise>uid=1</otherwise>  

               

             </choose>   

     </where>  

 </select>

动态sql之set 代替set关键字 set标签可以帮助我们去掉最后一个逗号

 <update id="updateSet" parameterType="user">  

     

     update users    

       

   <set>  

     <if test="uname!=null and uname!=''"> uname =#{uname},</if>  

     <if test="upwd!=null and upwd!=''"> upwd =#{upwd},</if>  

     <if test="sex!=null and sex!=''"> sex =#{sex},</if>  

     <if test="birthday!=null"> birthday =#{birthday},</if>  

   </set>  

     where  uid=#{uid}  

   </update>  

Trim,trim代替where

 <!-- 案例5:动态sql之trim  代替where      -->  

     <select id="selectUsersTrimWhere" parameterType="user" resultType="user">  

     select * from users   

     <!--   

     prefix:指添加前缀修饰  

     suffix:添加后缀修饰  

     prefixOverrides:去掉前缀修饰  

     suffixOverrides:去掉后缀修饰  

      -->  

 <trim prefix="where"  prefixOverrides="and|or" >  

 <if test="uname!=null and uname!=''"> and uname like "%"#{uname}"%" </if>   

 <if test="sex!=null and sex!=''">and sex = #{sex} </if>   

 </trim>  

 </select>  

Trim代替set:

       <!-- 案例6:动态sql之trim  代替set    -->  

       <update id="updateTrimSet" parameterType="user">  

   

 update users    

       

   <trim prefix="set" suffixOverrides="," suffix="where  uid=#{uid}" >  

     <if test="uname!=null and uname!=''"> uname =#{uname},</if>  

     <if test="upwd!=null and upwd!=''"> upwd =#{upwd},</if>  

     <if test="sex!=null and sex!=''"> sex =#{sex},</if>  

     <if test="birthday!=null"> birthday =#{birthday},</if>  

   </trim>  

       

Foreach来遍历集合

 <!--案例7:动态sql之foreach   遍历数组  -->  

 <select id="selectUsersForeachArray"  resultType="user">  

     select * from users  where uid  in    

     <!--   

         collection:要遍历的集合  

         item:当前正在遍历的对象的变量名  

         open:开始遍历  

         close:结束便利  

         index:下标  

         separator:分割  

      -->  

     <foreach collection="array" item="item" open="(" close=")" index="index" separator=",">  

         #{item}  

     </foreach>  

   

 </select>  

 

总结

熟练掌握以上Mysql的动态SQL,我们可以更得心应手的完成我的功能,写更少的代码,实现更多的功能。

--结束END--

本文标题: 好程序员Java分享Mybatis必会的动态SQL

本文链接: https://lsjlt.com/news/230749.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 好程序员Java分享Mybatis必会的动态SQL
    好程序员Java分享Mybatis必会的动态SQL,前言:Mybatis可谓是java开发者必须会的一项技能。MyBatis 的强大特性之一便是它的动态 SQL。如果你有使用 JDBC 或其它类似框架的经验,你就能体会到根据不同条件拼接 S...
    99+
    2023-06-02
  • 好程序员Java培训分享Java初学者必读
      好程序员Java培训分享Java初学者必读,近年来各种各样的编程语言不断崛起,但唯有Java是牢牢占据着老大的位置,目前几乎90%以上的大中型互联网应用系统在服务器端开发首选Java。因此,也是吸引了不少年轻人投入到Java的学习之中。...
    99+
    2023-06-02
  • 好程序员Java学习路线分享MyBatis之Spring整合
      好程序员Java学习路线分享MyBatis之Spring整合,Spring、SpringMVC和MyBatis是目前企业开发的三大框架。本章我们将学习将Spring和MyBatis整合到一起,成为我们项目开发的技术骨架。引入依赖首先我们...
    99+
    2023-06-02
  • java程序员必会的远程debug教程
    目录正文启动添加参数配置idea点击 editConfigurations...点击左上角的+号,选择Remote Jvm Debug填写地址和端口号启动debug模式测试正文 现在...
    99+
    2022-11-13
    java远程debug java debug
  • 好程序员Java培训分享Java程序员技能提升指南
      好程序员Java培训分享Java程序员技能提升指南,软件工程是计算机领域发展最快的学科分支之一,在所有软件开发类人才的需求中Java工程师的需求量占软件工程所有岗位需求的60~70%。巨大的企业需求和庞大的人才基数也必然产生激励的就业竞...
    99+
    2023-06-02
  • 好程序员Java教程分享Java 循环结构
    好程序员Java教程分享Java 循环结构,在互联网时代,IT行业飞速发展,Java工程师也随之崛起,薪资待遇较高,已成为众多IT学子就业首选,今天就为大家分享一些Java干货。Java 循环结构 - for, while 及 do...w...
    99+
    2023-06-02
  • 好程序员Java教程分享Vue插件之Axios
    好程序员Java教程分享Vue插件之Axios,环境安装:npm install --save axios vue-axios    //安装axiosNpm install    ...
    99+
    2023-06-02
  • 好程序员Java分享JVM类加载机制
    JVM相关概念jdk<br>jdk(Java Development Kit)Java开发包,是Java开发人员用于编译和调试程序的一套程序的集合。jre<br>jre(Java Runtime Evironment...
    99+
    2023-06-02
  • 好程序员分享java设计模式之享元模式
      好程序员分享java设计模式之享元模式,享元模式有点类似于单例模式,都是只生成一个对象被共享使用。享元模式主要目的就是让多个对象实现共享,减少不必要的内存消耗,将多对同一对象的访问集中起来,不必为每个访问者创建一个单独的对象,以此来降低...
    99+
    2023-06-02
  • 好程序员Java教程分享Java中经常出现的问题
      好程序员Java教程分享Java中经常出现的问题,Java流行了很多年,相信学习Java的小伙伴有很多很多,今天小编总结了关于Java异常的及几大问题,希望对你有所帮助。   1、检查与未检查   简而言之,检查过的...
    99+
    2023-06-02
  • 好程序员Java分享为什么要使用Docker
    好程序员Java培训分享为什么要使用Docker,概述作为一种新兴的虚拟化方式,Docker 跟传统的虚拟化方式相比具有众多的优势。更高效的利用系统资源由于容器不需要进行硬件虚拟以及运行完整操作系统等额外开销,Docker 对系统资源的利用...
    99+
    2023-06-02
  • 好程序员Java教程分享:Java工程师常见面试题
      好程序员Java教程分享:Java工程师常见面试题  一:BigInteger  (1)针对大整数的运算:可以让超过Integer范围内的数据进行运算。  (2)构造方法  A:BigInteger(String s)  (3)成员方法...
    99+
    2023-06-02
  • 好程序员Java培训分享之RMI与RPC的区别
      好程序员Java培训分享之RMI与RPC的区别,随着java技术学习的不断深入,越来越觉得保持初心是多么重要,无论我们学到哪个程度,在学习的时候始终保持初学者的心态,才能在自己的技术之上实现突破!  今天有点像鸡汤,回归正题,继续更新我...
    99+
    2023-06-02
  • 好程序员Java学习路线分享Java-String常用方法
      好程序员Java学习路线分享Java-String常用方法,String类在java.lang包中,java使用String类创建一个字符串变量,字符串变量属于对象。java把String类声明的final类,不能继承。String类对...
    99+
    2023-06-02
  • Java + Kubernetes:程序员的动态二重奏
    Java和Kubernetes的组合为现代软件开发提供了强大的基础设施,它们协作发挥着以下作用: 容器化和微服务: Kubernetes 通过创建和管理容器来简化应用程序的容器化。它允许将应用程序分解为较小的、独立的部分(微服务),从而...
    99+
    2024-02-29
    Java、Kubernetes、云原生、容器、微服务
  • 好程序员Java培训分享Java常见排序算法之插入排序
    好程序员Java培训分享Java常见排序算法之插入排序,之前我们说过排序是算法中的一部分。所以我们学习排序也是算法的入门,为了能让大家感受到排序是算法的一部分,我举个例子证明一下:比如麻 将游戏,发完牌之后需要对手上的牌进行排序,大家想想,...
    99+
    2023-06-02
  • 好程序员Java干货分享Spring框架之IOC原理
    好程序员Java干货分享Spring框架之IOC原理,前言:Spring框架是我们进行企业级开发的最常用框架,本章我们将了解Spring框架,并学习Spring的IOC特性以及IOC的实现原理:注解和反射。Spring框架简介  Sprin...
    99+
    2023-06-02
  • Java 程序员必备!LeetCode 刷题笔记和学习心得分享
    作为一名 Java 程序员,想要提高自己的编码能力,刷 LeetCode 绝对是不可或缺的。LeetCode 是一个在线的编程刷题平台,拥有大量的算法题目,可以帮助程序员提升自己的编程能力和算法思维。 在这篇文章中,我将分享我的 Leet...
    99+
    2023-08-30
    leetcode 学习笔记 同步
  • 好程序员技术分享html5和JavaScript的区别
    好程序员技术分享html5和JavaScript的区别,HTML5广义上讲是前端开发学科的代名词,包含HTML5、CSS3及JavaScript三个重要的部分,是运行在浏览器上应用的统称。如PC端网站、管理系统、手机网页应用(WebApps...
    99+
    2023-06-03
  • 好程序员技术分享浅谈JavaScript中的闭包
    好程序员技术分享浅谈JavaScript中的闭包,js闭包是指有权访问另一个函数作用域中的变量的函数,个人认为js闭包最大的用处就是防止对全局作用域的污染。 试想如果我们把一些仅仅只用到一两次的变量都声明在全局作用域中,最后肯定是容易出错且...
    99+
    2023-06-03
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作