什么?面试被问到MyBatis,升职加薪绝招!看完一招搞懂动态SQL!

mybatis面试常见题之动态sql—foreach 前言 相信大家在面试的时候,如果面试官问有关mybatis框架的问题时,经常会遇到这个问题,“说下动态sql”,而大部分人还是能够轻而易举的把动态sql介绍清楚的,其实mybatis的sql一般都是写在mapper中(也可以用注解方式),那么在遇到一些复杂的sql,比如需要加一些判断条件或者是循环之类的,那么这个时候,mybatis 提示:以下是本篇文章正文内容,下面案例可供参考 一、pandas是什么? 示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。 二 阅读详情

什么?面试被问到MyBatis,升职加薪绝招!看完一招搞懂动态SQL!

MyBatis——动态SQL

在这里插入图片描述

什么是动态SQL

简单的来说就是可以根据实时的业务需求动态的改变SQL语句。在程序还未编译的情况下SQL语句不能确定,而是在程序运行阶段并在执行过程中才能确定SQL语句,这就叫动态SQL语句。


为什么要使用动态SQL

在初级阶段我们的程序进行数据库操作时,书写的SQL语句都是确定的,就在程序运行前就已经写死了,我们不能根据实时业务对SQL进行实时更改,这样可能导致我们需要为业务编写的SQL语句繁多,举个例子:现在我需要根据10个不同的数据库表字段名进行查询,其中每个字段名都是可选的,如果不用动态SQL,使用静态SQL我们需要实现的SQL语句有多少?数学好的可以使用全排看看需要多少?【获取资料】

想想如果可以在SQL中来个if语句该有多好?那只需要编写一条SQL语句就可以满足需求了(美滋滋),所以动态SQL的重要性不言而喻,在如今的大数据时代,如果没有动态SQL,业务的开发周期可想而知有多长!


MyBatis的动态SQL

接下来就看官方文档吧!应该没有什么是博客加官方文档解决不了的。如果有那就再看几遍!
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FdCFHDjX-1626962244641)(https://jq.qq.com/?_wv=1027&k=jYRaGbBI)]](https://img-blog.csdnimg.cn/e03de534bbff4e0c9a01c217f769dd57.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0RlbGlsYWhfamF2YQ==,size_16,color_FFFFFF,t_70#pic_center)

动态SQL小结

  • if:
    条件判断,是最常用的,也是最有效的。

  • where:
    where 元素只会在子元素返回任何内容的情况下才插入 “WHERE” 子句。而且,若子句的开头为 “AND” 或 “OR”,where 元素也会将它们去除。

  • set:
    set 元素会动态地在行首插入 SET 关键字,并会删掉额外的逗号(这些逗号是在使用条件语句给列赋值时引入的)。通过介绍得知,set元素只能用在修改操作。

  • foreach:
    这个也是比较重要的元素,重点在于理解collection属性!

  • choose、when、otherwise:
    这个就是Java中的switch-case,分支选择。choose类似于switch代码块,when类似于一个一个条件,otherwise则为最后默认的条件。

  • trim:
    这个元素千万别以为他是简单“去空格”(一开始我也是这样认为的),他的功能非常强大,但是却不常用,我们可以通过自定义 trim 元素来定制其他动态SQL元素的功能,比如where、set…等,也许就因为太强大了,平常业务中并不需要,所以使用的不多(这就是无敌太寂寞?)。

  • include、sql:
    这两个是搭配来使用的。

    • sql:这个元素申请在<mapper>标签的根下,作用是用来定义公共的SQL代码片段,一般是表的字段名,字段名过多的话,用sql元素定义并搭配include元素使用减少代码量。【参考资料】
    • include:包含,含有的意思,在代码中我们使用这个元素可以让指定让使用了sql元素定义的代码片段插入到SQL语句中。
  • bind:
    元素允许你在 OGNL 表达式以外创建一个变量,并将其绑定到当前的上下文。一般我们常用于模糊查询,像模糊查询我们写SQL时如果直接使用占位符来传参是不行的,所以需要使用字符串拼接的方式来传参,但是有可能导致sql注入,所以bind元素无疑是一种较好的选择。
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XUUun4HQ-1626962016452)(https://img-blog.csdnimgW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0RlbGlsYWhfamF2YQ==,size_16,color_FFFFFF,t_70#pic_center)]
    在这里插入图片描述

当然,每个动态SQL的元素只要我们合理搭配,可以节省我们对SQL语句的开发时间以及代码量,让数据库开发更加高效,我们也只有在更多的实际业务或项目中使用动态SQL进行开发才能真正的体会到其便利性,高效性,也能更深刻的理解它,加油!!!。

分类: [MyBatis]

最后,祝大家早日学有所成,拿到满意offer,快速升职加薪,走上人生巅峰。

可以的话请给我一个三连支持一下我哟???

面试java开发被问最多的“cookie、session、token”问题,安排! 面试java开发被问最多的“cookie、session、token”问题,安排!前言发展历程Cookie1.什么是Cookie2.Cookie的机制3.Cookie的属性Expires修改或者删除CookieCookie的域名Cookie的路径4.应用Session1.什么是Session2.Session实现原理3.session创建和销毁Token1.什么是Token2.Token的原理3.Token的使用项目依赖 pom.xml自定义注解用户实体类、及查询serviceToken生成拦截器拦截to. 阅读详情

相关推荐

关于Springboot集成Swagger到底是什么?请看这篇分说!

关于Springboot集成Swagger到底是什么?请看这篇分说!集成SwaggerSwagger简介springboot集成Swagger1、新建一个springboot项目,添加web框架2、添加相关依赖3、编写controller层编写Swagger的配置类4、编写Swagger的配置类配置Swagger信息1、编写Swagger配置类配置Swagger扫描接口1、配置扫描的接口2、配置是否启动SwaggerSwagger配置多环境1、新建application-dev.properties新建a.

Delilah_java的博客 1888

MyBatis基础篇九:动态SQL

My动态SQL 1、if if标签可通过test属性的表达式进行判断,若表达式的结果为true,则标签中的内容会执行;反之标签中的内容不会执行 <!--List<Emp> getEmpListByMoreTJ(Emp emp);--> <select id="getEmpListByMoreTJ" resultType="Emp"> select * from t_emp where 1=1 <if test="ename != ''

czj66666666666的博客 442

无聊的时候怎么办?教你用java写一个简单挂机打金币小游戏吧!

无聊的时候怎么办?教你用java写一个超简单挂机打金币小游戏吧!Java写一个挂机打金币程序1.Java的面向对象2.基础打金的分析3. Robot介绍以及Demo演示4.挂机打金程序如何去实现 Java写一个挂机打金币程序 [图片上传失败…(image-529a95-1627970545922)] 1.Java的面向对象 就是万事万物皆对象; 2.基础打金的分析 初级: 我们去模拟人类的按键和鼠标点击 ; 完成刷金币的一个行为; 按键精灵 3. Robot介绍以及Demo演示 4.挂机打金程序如.

Delilah_java的博客 800

Java面试题(16)-mybatis动态sql

if set where choose when foreach

weixin_65549694的博客 373

智能车竞赛疯狂电路组:Altium Designer赛道设计与计分策略全解析

本文全面解析智能车竞赛疯狂电路组中,如何利用Altium Designer进行专业赛道设计。从软件基础操作、图层管理与封装库调用,到赛道拓扑绘制、核心尺寸规范,详细拆解设计全流程。文章深入结合计分策略,指导如何在设计阶段植入策略点,优化路径与元器件布局,以在比赛中获得时间优势,并提供了从图纸输出到实地测试的完整避坑指南。

beta5的博客 586

GPU资源池化:技术原理与应用场景全解析

GPU资源池化技术已成为AI时代高效利用算力的关键方案。该技术通过硬件虚拟化、容器化编排和智能调度三个核心层面,实现GPU资源的共享与优化,可将平均利用率从不足30%提升至60-80%。主流方案包括NVIDIA全栈解决方案、云原生Kubernetes生态及开源工具,适用于企业AI平台、大模型训练和边缘推理等场景。虽然面临性能隔离、资源碎片等挑战,但随着硬件虚拟化细化和AI驱动调度算法的发展,GPU池化正向着智能化、自动化方向演进,推动实现"算力如水电"的愿景。

技术引领业务创新 1352

一篇JVM详细图解,坚持看完!带你真正搞懂Java虚拟机!

一篇JVM详细图解,坚持看完!带你真正搞懂Java虚拟机!Java虚拟机1、JVM简介2、JVM内存区域2.1、程序计数器(线程私有)2.2、虚拟机栈(线程私有)2.3、本地方法区(线程私有)2.4、堆(Heap-线程共享)2.5、方法区/永久代(线程共享)3、JVM类加载器4、双亲委派机制5、沙箱安全机制6、GC垃圾回收算法6.1、如何确定垃圾6.2、标记清除算法(Mark-Sweep)6.3、复制算法(copying)6.4、标记整理算法(Mark-Compact)6.5、分代收集算法 Java虚拟机.

Delilah_java的博客 1万+

别再只当代码阅读器了!手把手教你用Understand的实体定位器和信息浏览器,5分钟精准定位代码逻辑

本文深入解析Understand代码分析工具的高级功能,重点介绍实体定位器和信息浏览器的实战应用。通过5分钟快速定位代码逻辑的技巧,帮助开发者从代码阅读者升级为逻辑侦探,提升大型代码库的分析效率。文章包含过滤搜索、调用链追踪等实用方法,是掌握Understand核心功能的必备指南。

weixin_28745821的博客 293

什么?学java这么久了,你对“SpringMVC-JSON“真的了解吗?

什么?学java这么久了,你对"SpringMVC-JSON"真的了解吗?SpringMVC--JSON1、JSON简介2、JavaScript中使用JSON3、Jackson4、Jackson日期工具类5、FastJson SpringMVC–JSON 1、JSON简介 什么是 JSON JSON(JavaScript Object Notation,JS 对象标记)是一种轻量级的数据交换格式,目前使用特别广泛。 采用完全独立于编程语言的文本格式来存储和表示数据。 简洁和清晰的层次结构使得 JSO.

Delilah_java的博客 2202

ardupilot开发 --- mavlink签名加密 篇

ardupilot开发 --- mavlink签名加密

记录老板的每次pua,分享领导每天的毒鸡汤... 1241

热力学仿真软件:Fluent_(13).燃烧与化学反应仿真

燃烧模型在热力学仿真软件中扮演着至关重要的角色。Fluent 提供了多种燃烧模型,包括层流预混燃烧模型、湍流预混燃烧模型、非预混燃烧模型、部分预混燃烧模型等。这些模型可以帮助用户模拟不同的燃烧过程,从而更好地理解燃烧现象和优化燃烧系统设计。

kkchenjj的博客 1253

字节架构师:来说说Java异步调用的几种方式你都搞懂了吗?

字节架构师:来说说Java异步调用的几种方式你都搞懂了吗?一、通过创建新线程二、通过线程池三、通过@Async注解四、通过CompletableFuture 日常开发中,会经常遇到说,前台调服务,然后触发一个比较耗时的异步服务,且不用等异步任务的处理结果就对原服务进行返回。这里就涉及的Java异步调用的一个知识。下面本文尝试将Java异步调用的多种方式进行归纳。 一、通过创建新线程 首先的我们得认识到,**异步调用的本质,其实是通过开启一个新的线程来执行。**如以下例子: public static.

Delilah_java的博客 2082

深度解析 Android 开发工程师岗位:技术栈、职责与面试全攻略

本文深度剖析Android开发工程师职位要求,从核心技术栈到面试准备进行全面解读。关键点包括:1)掌握Kotlin语言特性和Jetpack组件;2)具备UI开发、性能优化和逆向分析能力;3)理解MVVM架构和Room数据库;4)熟悉常用工具链和开发流程。文章提供了详细的面试题库及解析,涵盖基础概念、UI优化、架构设计等方向,并给出职业发展建议:夯实基础、拓展技术广度、培养工程素养。旨在帮助开发者系统性地准备Android岗位求职,把握移动开发领域的技术趋势。

郑伟强dev的专栏 176

零基础学java,其实没有那么难!先从java基础之Object类开始吧!

零基础学java,其实没有那么难!先从java基础之Object类开始吧!java基础之Object类2、代码演示2.1、Demo12.2、Demo23、克隆方法 java基础之Object类 Object类是是所有类的父类,对于java中的任意一个类来说,都是Object类的子类。 Object类中的源码: public class Object { // 本地注册一些必要信息 private static native void registerNatives(); st.

Delilah_java的博客 1593

3. NVIDIA GPU Xid 常见错误码全解析、故障定位与标准化处理方案

摘要: Xid是NVIDIA显卡驱动记录的硬件/软件异常日志,通过dmesg等工具可获取,包含PCI总线、GPU编号、故障码等信息,是诊断显卡问题的核心依据。Xid故障分为四类:应用程序类(如代码错误,Xid13/31)、显存ECC硬件类(如显存损坏,Xid48/63)、链路/供电温控类(如PCIe故障,Xid74/79)和GSP固件类(如静电干扰,Xid119/154)。排查流程包括日志采集、软件修复(如重启进程、升级驱动)、硬件检查(如PCIe链路状态)及断电复位(针对GSP故障)。预防措施包括监控EC

jundao1997的专栏 715

YOLOv13添加DRB模块map暴涨12.33!准确率提升8.56!召回率提升15.66

本文介绍了在YOLOv13模型中添加DRB模块的改进方法。实验结果显示,添加DRB模块后模型性能显著提升,mAP暴涨12.33%,准确率提升8.56%。文章详细说明了移植过程,包括创建yolov13-DRB.yaml配置文件、修改tasks.py和__init__.py文件,以及引入UniRepLKNet模块的具体实现。其中重点描述了GRNwithNHWC、NCHWtoNHWC等核心组件的实现细节,并提供了完整的模型结构配置代码。这些改进使得YOLOv13模型在保持原有架构优势的同时,获得了更强大的特征提取

FJN110的博客 2822

关于什么是Maven“依赖传递”、“依赖冲突”,Java程序员有话说!

关于什么是Maven“依赖传递”、“依赖冲突”,Java程序员有话说!什么是依赖传递?什么是依赖冲突?如何解决依赖冲突1. 使用maven提供的依赖调解原则2.排除依赖3.锁定版本 什么是依赖传递? 在maven中,依赖是可以传递的,假设存在三个项目,分别是项目A,项目B以及项目C,假设C依赖B,B依赖A,那么我们可以根据maven项目依赖的特征不难推出项目C也依赖A。 什么是依赖冲突? 大家都要用到一个工具包,由于依赖传递大家都会导入,发现大家导入的工具包版本不统一,就产生了冲突 eg: spring.

Delilah_java的博客 1401

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

为什么越来越多程序员使用Netty编程框架,这些原因你都知道吗?

为什么越来越多程序员使用Netty框架,这些原因你都知道吗?一、传统的BIO编程二、伪异步的I/O编程三、NIO编程四、AIO编程五、I/O模型对比六、主流NIO框架七、为什么学习Netty7.1 不选择Java原生NIO的原因7.2 选择Netty的理由八、Netty开发环境搭建8.1 Netty 的官网8.2 Maven仓库地址8.3 Maven依赖8.4 Gradle依赖 一、传统的BIO编程 ​ 网络编程的基本模型是Client/Server 模型,也就是两个进程之间进行相互通信,其中服务端提供位.

Delilah_java的博客 1345

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

面试被问到如何用Springboot 进行 web开发,看完这篇!怒怼面试官!

面试被问到如何用Springboot 进行 web开发,看完这篇!怒怼面试官!web开发静态资源首页一、在静态资源目录下新建index.html二、编写controller层三、运行测试 web开发 静态资源 四个目录存放的静态资源可以被我们识别,用来存放我们的html、css、js、图片等文件 "classpath:/META-INF/resources/" "classpath:/resources/" "classpath:/static/" "classpath:/public/" 他们的.

Delilah_java的博客 915

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Java程序员都会碰到的Mysql索引失效问题,看完收获满满!

Java程序员都会碰到的Mysql失效问题,看完收获满满!准备Explain关键字索引普通索引唯一索引使用ALTER 命令添加和删除索引使用ALTER 命令添加和删除主键索引失效违反最左前缀法则在索引列上操作范围索引右边的列失效使用不等于like以通配符开头("%abc")字符串不加单引号使用or连接order bygroup by 准备 为了进行Mysql失效的实践,我们首先创建一个表,执行以下 sql 语句: mysql> create table staff( -> id int.

Delilah_java的博客 732

面试被问java线程状态,一脸茫然?莫慌!看完这篇 从容应对!

面试被问java线程状态,一脸茫然?莫慌!看完这篇 从容应对!Java的线程状态线程方法停止线程线程休眠线程礼让线程强制执行线程状态观测线程的优先级守护(deamon)线程 Java的线程状态 线程方法 方法 说明 setPriority(int newPriority) 更改线程的优先级 static void sleep(long millis) 在指定的毫秒数内让当前正在执行的线程休眠 void join() 等待该线程终止 static void yield() 暂停当.

Delilah_java的博客 712

阿里架构师带你入门Springboot!三分钟学写“Hello,World”程序!

阿里架构师带你入门Springboot!三分钟学写“Hello,World”程序!第一个springboot程序Hello,World**一、创建Springboot项目****二、添加SpringWeb框架,再点击完成****三、可以选择删除多余文件****四、等待项目下载完成****五、springboot主启动类,springboot从这里开始跑****六、新建controller包****七、在controller包下新建HelloWorld类****八、在Springboot主启动类启动项目**.

Delilah_java的博客 605

想要入门自学Java?先从必须学习的Maven基础知识开始吧!

想要入门自学Java?先从必须学习的Maven基础知识开始吧!Maven是什么以及核心特性Maven是什么?Maven特性Maven安装配置Maven项目的标准结构利用ide创建一个maven工程maven项目目录结构maven坐标介绍Maven的依赖管理Maven仓库 Maven是什么以及核心特性 Maven是什么? Maven是项目管理工具对软件项目提供构建与依赖管理 Maven是Apache下的Java开源项目 Maven为Java项目提供了统一的管理方式,已成为业界标准 Maven特性 项目.

Delilah_java的博客 540

看完这篇!教你三分钟学会Java项目主机启停脚本运用!

在这里插入图片描述](https://img-blog.csdnimg.cn/2ed603270b314f18912764429d6861c2.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0RlbGlsYWhfamF2YQ==,size_16,color_FFFFFF,t_70#pic_center) 看完这篇!教你三分钟学会Java项目主机启停脚

Delilah_java的博客 528

InnoDB 内存结构总览:Change Buffer、AHI 与 Log Buffer

本文系统梳理InnoDB内存结构中的ChangeBuffer、Adaptive Hash Index(AHI)与LogBuffer。ChangeBuffer缓存二级索引页不在内存时的变更,减少随机IO,仅在页加载时合并;聚簇索引修改立即执行,因数据本身不可延后。AHI基于高频等值查询自动构建哈希索引,加速定位,仅支持等值操作。LogBuffer为redo log内存缓冲,配合磁盘日志实现崩溃恢复。三者均服务于性能优化,其中ChangeBuffer与AHI共享BufferPool空间,而LogBuffer独立

bksczm的博客 303

第三篇 第 6 课

前置:第三篇第 1 课(stdx 引入),第二篇第 1 课(std.regex)。环境:仓颉 SDK 1.2.0。本文所有代码与输出均逐行实测。

weixin_41618057的博客 527
上一篇: 面试被问到JAVA垃圾回收机怎么办?搞懂JVM !大厂Offer手到擒来!
下一篇: 应届生想要取得大厂Offer?!华为架构师建议你先搞懂 Aop 面向方面编程!
Danny_java
博客等级 码龄5年 9粉丝 64原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值