初识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>
- golang 函数定义及其接口实例
- 分享两种圣诞节雪花特效JS代码(网站下雪效果)
- React 移动 web 极致优化
- golang 高效字符串拼接
- Linux+Nginx/Apache/Tomcat新增SSL证书,开启https访问教程
- golang 使用时间通过md5生成token
- golang中对map操作类
- Nginx在线服务状态下平滑升级或新增模块的详细操作记录
- 【Dev Club分享】微信读书iOS性能优化
- [svn: E155004]svn update报database is locked错误的解决办法
- WordPress高亮插件:Crayon Syntax Highlighter加载优化
- 深入理解 ButterKnife,让你的程序学会写代码
- JS+CSS让网站嗨起来,博客要被玩坏了!
- Linux系统zip压缩命令详细参数,附文件排除选项的正确用法
- 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 文档注释
- 从零搭建Spring Boot脚手架(1):开篇以及技术选型
- 盘点 Python 10 大常用数据结构(下篇)
- 「干货」你需要了解的六种渲染模式
- 分享两个操作Java枚举的实用方法
- 从零开始强化学习:在Python笔记本中设计和解决一个任务
- 基于深度学习的新闻推荐算法(1)
- 以复现图表的方式来学习一篇文章
- 盘点 Python 10 大常用数据结构(上篇)
- (长文预警) 你还在烦工作中碰到的拖拽问题?一个框架jiejue
- 重磅 | 青藤与腾讯安全隆重举办容器安全平台新品战略合作发布会
- 如何使用强化学习玩21点?
- 这3个Scikit-learn的特征选择技术,能够有效的提高你的数据预处理能力
- 使用神经网络解决拼图游戏
- 用机器学习预测收益
- 一种基于深度学习的低成本细胞生物学研究方法