Mybatis的动态SQL~

        MyBatis有一个强大特性就是它的动态SQL。在实际项目开发中,经常需要根据不同条件拼接SQL语句,拼接时还要确保不能忘了必要的空格,有时候还要注意省掉列名列表最后的逗号...等等。在使用JDBC 或其他类似持久层框架操作数据库时,处理这种情况是非常麻烦的,甚至可以用痛苦来形容,而在MyBatis中利用动态SQL这一特性可以很简单地解决这个问题。

        动态SQL元素和使用JSTL或其他类似基于XML的文本处理器相似,MyBatis采用功能强大的基于OGNL的表达式来完成动态SQL。OGNL 的表达式可以被用在任意的SQL 映射语句中。


如上,假设有如上一张表,我们想查询如下条件:

  • status=1
  • 公司名包含【华为】
  • 品牌名包含【华为】

则在映射文件中书写如下sql语句:

    <select id="selectByCondition" resultMap="brandResultMap">select * from tb_brand where status=#{status} and company_name like #{companyName}and brand_name like #{brandName}</select>

接口中的方法名:

    List<Brand> selectByCondition(@Param("status") int status,@Param("companyName")String companyName,@Param("brandName")String brandName);

测试类如下:

public void testselectByCondition() throws IOException {int status=1;String companyName="华为";String brandName="华为";companyName="%"+companyName+"%";brandName="%"+brandName+"%";
//        1.获取SqlSessionFactoryString resource ="mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
//        2.获取SqlSession对象SqlSession sqlSession= sqlSessionFactory.openSession();
//        3.获取Mapper接口的代理对象BrandMapper brandMapper=sqlSession.getMapper(BrandMapper.class);
//        4.执行方法List<Brand> brands=brandMapper.selectByCondition(status,companyName,brandName);System.out.println(brands);
//        5.释放资源sqlSession.close();}

 查询结果:

但是在实际场景中,可能并不需要同时查询3个条件,这样的话,参数值无法传入给sql中的占位符,后台会发生语法错误~

 

此时用到Mybatis中的动态sql技术:

 

 修改sql语句如下:

    <select id="selectByCondition" resultMap="brandResultMap">select * from tb_brand where<if test="status!=null">status=#{status}</if><if test="company_name!=null and company_name!=''">and company_name like #{companyName}</if><if test="brand_name!=null and brand_name!=''">and brand_name like #{brandName}</if></select>

如上,当有条件不存在时,会直接省略对该条件的判断。

    <select id="selectByCondition" resultMap="brandResultMap">select * from tb_brand<where><if test="status!=null">status=#{status}</if><if test="companyName!=null and companyName!=''">and company_name like #{companyName}</if><if test="brandName!=null and brandName!=''">and brand_name like #{brandName}</if></where></select>

但是还存在bug,当第一个条件不存在时会直接导致关键字where和and相连接导致语法错误,将where标签嵌到外面即可解决~ 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/776428.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

tcpdump 抓包

tcpdump Tcpdump抓取http GET/POST requests - 无知是恶 - 博客园 抓取post 参数 tcpdump -i eth0 -A tcp dst port 80 or tcp dst port 443 and tcp[((tcp[12:1] & 0xf0) >> 2):4] 0x504F5354 -w 2.cap tcpdump 抓包 mysql tcpdump -i ens192 -s 0 -l -w - …

全国美食博主都在天水:一碗麻辣烫,如何在互联网热辣滚烫?

从淄博到哈尔滨&#xff0c;地方文旅此前从未想到过&#xff0c;自己与“一夜爆火”的距离居然这么近&#xff1b; 而等到从哈尔滨再到天水时&#xff0c;地方文旅的应对甚至已经开始轻车熟路了起来。 热闹之下&#xff0c;难免有几个问题需要细思&#xff1a;为什么从2023年到…

【探索C++】友元

(꒪ꇴ꒪ )&#xff0c;Hello我是祐言QAQ我的博客主页&#xff1a;C/C语言&#xff0c;数据结构&#xff0c;Linux基础&#xff0c;ARM开发板&#xff0c;网络编程等领域UP&#x1f30d;快上&#x1f698;&#xff0c;一起学习&#xff0c;让我们成为一个强大的攻城狮&#xff0…

nvm 报错 Could not retrieve https://npm.taobao.org/mirrors/node/index.json.

报错信息如下 原因 因为淘宝的镜像域名更换&#xff0c;npm.taobao.org域名HTTPS证书到期更换为npmmirror.com&#xff0c;故此导致安装依赖报错 解决 1、进入nvm安装目录&#xff08;例如&#xff1a;C:\Users\默认账户\AppData\Roaming\nvm&#xff09;中找到settings.txt…

第八届信息系统与数据采集国际会议(ICISDM 2024)即将召开!

第八届信息系统与数据采集国际会议&#xff08;ICISDM 2024&#xff09;将于2024年6月24日至6月26日在美国第二大城市——洛杉矶召开。此次会议不仅展现了世界各地的科研专家们围绕着信息系统和数据采集所展开的最新的科学研究结果&#xff0c;而且也为来自不同地区的代表们提供…

红外弱小目标检测与跟踪

红外弱小目标检测与跟踪 1,红外弱小目标检测1.1 检测方法基于深度学习(数据驱动)基于传统方法(模型驱动)背景抑制局部对比度:最优化:1.2代码实现top-hat代码实现2,红外弱小目标跟踪根据国际光学工程学会的定义,在256256的图像中,红外小目标的像素面积不超过99。典型的…

如何进行 SEO 竞争对手分析

SEO &#xff08;搜索引擎优化&#xff09;的世界是一个庞大、复杂且竞争激烈的地方。如此之多&#xff0c;以至于你可能会觉得自己永远无法超越你的竞争对手。 但不要绝望&#xff1a;对竞争对手的 SEO 策略进行一些监视会大有帮助。 它涉及评估他们的关键字定位、反向链接配…

【论文阅读】Faster Neural Networks Straight from JPEG

Faster Neural Networks Straight from JPEG 论文链接&#xff1a;Faster Neural Networks Straight from JPEG (neurips.cc) 作者&#xff1a;Lionel Gueguen&#xff0c;Alex Sergeev&#xff0c;Ben Kadlec&#xff0c;Rosanne Liu&#xff0c;Jason Yosinski 机构&#…

redis的设计与实现(四)——单机数据库特性

1. 前言 我们前面了解了redis的数据结构&#xff0c;对象。但是redis对于这些对象的使用和管理策略需要也熟记于心&#xff0c;这篇文章我们就了解一下吧。 2. 类型检查和命令多态 DEL,EXPIRE,RENAME,TYPE,OBJECT 可以对任何数据类型执行SET,GET,APPEND,STRLEN&#xff0c;等…

【nodejs ubuntu】nodejs版本过老的更新方法

使用apt方法安装的node.js版本过于老了&#xff0c;以至于我没法用npm下载hexo 下面是更新方法 参考了这篇文章 然后就可以成功安装了

蓝桥杯算法赛(二进制王国)

问题描述 二进制王国是一个非常特殊的国家&#xff0c;因为该国家的居民仅由 0 和 1 组成。 在这个国家中&#xff0c;每个家庭都可以用一个由 0 和 1 组成的字符串 S 来表示&#xff0c;例如 101、 000、 111 等。 现在&#xff0c;国王选了出 N 户家庭参加邻国的庆典…

请保持你的核心竞争力

关于程序员35岁是否会失业的问题&#xff0c;坊间的确存在一种普遍担忧&#xff0c;尤其是在互联网行业&#xff0c;许多人担心程序员这个职业存在“35岁现象”&#xff0c;即35岁以上的程序员可能面临职业发展瓶颈、职位晋升困难或是被年轻程序员取代的风险。然而&#xff0c;…

PMP考试难不难,通过率怎样?

PMP考试自从新考纲调整后有几次考试难度是非常高的&#xff0c;那段时间我也看网上好多机构通过率都不咋地&#xff0c;当时也是因为官方的出题难度稍高&#xff0c;还组织了免费的重考&#xff0c;也是后来逐渐开始归于平常了吧&#xff0c;直到现在都是我认为比较简单的选择题…

机场数据治理系列介绍(4):业务流程架构对需求分析有什么作用?

目录 一、背景&#xff1a;需求调研分析面对的困局 二、具体做法 一、背景&#xff1a;需求调研分析面对的困局 一般而言&#xff0c;针对管理系统进行用户侧调研&#xff0c;用户会给你一大堆制度、手册&#xff0c;这些制度手册&#xff0c;对于理解并消化成用户需求说明书…

【WEEK5】学习目标及总结【SpringMVC+MySQL】【中文版】

学习目标&#xff1a; 彻底完成SpringMVC的学习 两周完成MySQL的学习——第一周 学习内容&#xff1a; 参考视频教程【狂神说Java】SpringMVC最新教程IDEA版通俗易懂拦截器文件的上传和下载 学习时间及产出&#xff1a; 第五周 MON~Fri 2024.3.25【WEEK5】 【DAY1】拦截器【…

go | struct、pointer、strings runes、interfaces

go 的结构体 不用多说&#xff0c;和c/c 类似 可以定义然后直接使用&#xff0c;注意给的实参 用 , 分隔 func main(){fmt.Println("zhangsan ", person{"zhangsan", 22})fmt.Println(newPerson("zhangsan", 22))s : person{name: "lisi&qu…

【Qt】QDialog对话框

目录 一、概念 二、对话框的分类 2.1 模态对话框 2.2 非模态对话框 2.3 混合属性对话框 三、消息对话框QMessageBox 四、颜色对话框QColorDialog 五、文件对话框QFileDialog 六、字体对话框QFontDialog 七、输入对话框QInputDialog 一、概念 对话框是GUI程序中不可或…

Java中HashMap底层数据结构及主要参数?

在Java中&#xff0c;HashMap的底层数据结构主要基于数组和链表&#xff0c;同时在Java 8及以后的版本中&#xff0c;当链表长度超过一定阈值时&#xff0c;链表会转换为红黑树来优化性能。这种结构结合了数组和链表的优点&#xff0c;既提供了快速的随机访问&#xff0c;又允许…

Unity角色多人同步

1.位置同步和状态同步&#xff1a;需要同步的节点上挂载脚本&#xff1a; gameObject.AddComponent<SyncTransform>(); ; //同步gameObject.GetComponent<SyncTransform>().syncId SyncUtilFunc.GetRoleSyncId(PlayerData.Instance.PlayerId); //同步gameObject.G…

电子元器件批发商城对供应链管理的影响与创新

电子元器件批发商城对供应链管理的影响与创新是十分重要的&#xff0c;以下是其主要影响和创新&#xff1a; 提高供应链效率&#xff1a;电子元器件批发商城通过将多个供应商的产品整合在一个平台上&#xff0c;简化了采购流程&#xff0c;降低了采购成本。采购人员可以通过一个…