栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Mybatis动态SQL,你真的会了吗?,java教程全集百度云盘

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Mybatis动态SQL,你真的会了吗?,java教程全集百度云盘

AND bed_num = #{bedNum}

AND status=1

MyBatis 提供了 choose 元素,按顺序判断 when 中的条件出否成立,如果有一个成立,则 choose 结束。当 choose 中所有 when 的条件都不满则时,则执行 otherwise 中的 sql。类似于 Java 的 switch 语句,choose 为 switch,when 为 case,otherwise 则为default。

where


【一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义】

浏览器打开:qq.cn.hn/FTf 免费领取

举个栗子:对于choose标签的例子中的查询,如果去掉where后的1=1此时的SQL语句会变成什么样子,有三种可能的SQL,如下:

select * from patient_info where AND ipt_num=#{iptNum};

select * from patient_info where AND bed_num = #{bedNum};

select * from patient_info where AND status=1;

发生了什么,以上三条SQL语句对吗?很显然是不对的,显然where后面多了个AND。如何解决呢?此时就要用到where这个标签了。

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

此时的查询改造如下:

resultType=“com.xxx.domain.PatientInfo”>

select * from patient_info

AND ipt_num=#{iptNum}

AND bed_num = #{bedNum}

AND status=1

foreach


foreach是用来对集合的遍历,这个和Java中的功能很类似。通常处理SQL中的in语句。

foreach 元素的功能非常强大,它允许你指定一个集合,声明可以在元素体内使用的集合项(item)和索引(index)变量。它也允许你指定开头与结尾的字符串以及集合项迭代之间的分隔符。这个元素也不会错误地添加多余的分隔符

你可以将任何可迭代对象(如 List、Set 等)、Map 对象或者数组对象作为集合参数传递给 foreach。当使用可迭代对象或者数组时,index 是当前迭代的序号,item 的值是本次迭代获取到的元素。当使用 Map 对象(或者 Map.Entry 对象的集合)时,index 是键,item 是值。

例子如下:

SELECt *

FROM patient_info

WHERe ID in

open="(" separator="," close=")">

#{item}

改标签中的各个属性的含义如下:

set


讲这个标签之前,先看下面这个例子:

UPDATe STUDENT

SET NAME = #{name},

MAJOR = #{major},

HOBBY = #{hobby}

WHERe ID = #{id};

UPDATE STUDENT SET

NAME = #{name},

MAJOR = #{major},

HOBBY = #{hobby}

WHERe ID = #{id};

上面的例子中没有使用 if 标签时,如果有一个参数为 null,都会导致错误。当在 update 语句中使用 if 标签时,如果最后的 if 没有执行,则或导致逗号多余错误。使用 set 标签可以将动态的配置 set 关键字,和剔除追加到条件末尾的任何不相关的逗号。

使用 set+if 标签修改后,如果某项为 null 则不进行更新,而是保持数据库原值。此时的查询如下:

UPDATE STUDENT

NAME = #{name},

MAJOR = #{major},

HOBBY = #{hobby}

WHERe ID = #{id};

include


这个标签和是天仙配,是共生的,include用于引用sql标签定义的常量。比如引用上面sql标签定义的常量,如下:

SELECT

FROM student

refid这个属性就是指定标签中的id值(唯一标识)。

总结


至此,Mybatis动态SQL中常用的标签就已经介绍完了,这部分的内容在实际工作中是必须会用到的,除非你们公司不用Mybatis。

-end

========================================================================

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/489791.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号