初识Mybatis中的动态sql
时间:2022-07-23
本文章向大家介绍初识Mybatis中的动态sql,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
##Mybatis中的动态sql
根据用户提供的数据动态决定查询语句依赖的查询条件或者sql语句的内容
if标签
选择标签,if会自动的把第一个条件执行的逻辑运算符去掉(or,and)
//如果传递了名字就根据名字查询,如果没传递就查询全部
<select id="findAll3" resultType="com.mb.pojo.account">
select * from account where 1=1
<if test="name!=null">
and name like '%${name}%'
</if>
</select>
where标签
相当于sql中的where后面跟条件,需要注意的是where和if一样也是会把第一个条件执行的逻辑运算符去掉
例如:
<!-- where标签-->
<select id="findMoney" resultType="com.mb.pojo.account">
select * from account
<where>
<if test="minMoney!=null">
money>#{minMoney}
</if>
<!-- 转义字符:<![CDATA[转义字符]]>-->
<if test="maxMoney!=null">
and money<![CDATA[<]]>#{maxMoney}
</if>
</where>
</select>
需要注意的是在mybatis中"<"符号需要进行转义,因为在xmL中标签是“<”开头的
set标签
set标签可以将动态的配置 SET 关键字,并剔除追加到条件末尾的任何不相关的逗号。使用 if+set 标签修改后,在进行表单更新的操作中,哪个字段中有值才去更新,如果某项为 null 则不进行更新,而是保持数据库原值。
<!-- 修改表中指定得信息-->
<update id="updateById">
update account
<set>
<if test="name!=null">name=#{name},</if>
<if test="money!=null">money=#{money}</if>
</set>
where id=#{id}
</update>
foreach标签
item :循环体中的具体对象。支持属性的点路径访问,如item.age,item.info.details,在list和数组中是其中的对象,在map中是value。 index :在list和数组中,index是元素的序号,在map中,index是元素的key,该参数可选。 open :表示该语句以什么开始 close :表示该语句以什么结束 separator :表示元素之间的分隔符
<!-- 查询多个id(foreach的使用)-->
<select id="findByIds" resultType="com.mb.pojo.account">
select * from account where id in
<foreach collection="array" open="(" close=")" item="id" separator=",">
#{id}
</foreach>
</select>
- iOS自动布局——Masonry详解
- BZOJ 3450: Tyvj1952 Easy
- [编程经验] TensorFlow实现线性支持向量机SVM
- TensorFlow从0到1 - 2 - TensorFlow核心编程
- BZOJ 4318: OSU!
- 讨厌算法的程序员 5 - 合并算法
- 洛谷 P2679 子串
- [编程经验] CVPR2017论文全集下载代码脚本分享
- 讨厌算法的程序员 6 - 归并排序
- [编程经验] Tensorflow中的共享变量机制小结
- 洛谷 P1313 计算系数
- 一文搞懂浏览器自动化测试框架selenium!
- 三分钟Python充电-解压序列赋值给多个变量
- 三分钟Python充电-解压可迭代对象赋值给多个变量
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- java多线程关键字volatile、lock、synchronized
- 操作系统基础 - 线程级并发
- SpringBoot使用ActiveMq同时支持点对点推送和发布订阅
- 《内网安全攻防》学习笔记,第二章-域内信息收集
- 献给每一位母亲
- JUC学习之生产者和消费者
- 在 WSL 2 中基于 Docker 编排 LNMP 运行环境
- PHP 魔术方法、序列化与对象复制
- PHP 静态属性和静态方法
- 通过 Trait 水平扩展 PHP 类功能
- 通过对象组合水平扩展 PHP 类功能
- DO,DTO,VO,POJO 你知道吗?
- Python 爬虫进阶必备 | AES-CBC 的 Pyhon 实现要怎么写?给代码就完事了
- Babel:下一代Javascript语法编译器
- 如何定位及优化SQL语句的性能问题