什么是动态sql

mybatis核心对sql语句进行灵活操作,通过表达式进行判断,对sql进行灵活拼接、组装。

标签介绍

1.if标记if是动态sql中最最常用的标记

动态 SQL 通常要做的事情是有条件地包含 where 子句的一部分。常用形式:

<select id="**" resultType="**"     parameterType="**">select * from table where 1=1<if test="attr!=null">and attrColumn>#{attr}</if></select>

2.choose, when, otherwise标记

有些时候,我们不想用到所有的条件语句,而只想从中择其一二。针对这种情况,MyBatis 提供了 choose 元素。常用形式:

select * from table where 1=1
<choose><when test="attr1!=null">and attrColumn like #{attr}</when>……      <otherwise>and attr2 is not null</otherwise>
</choose>

3.where标记

select * from table
<where><if test="attr1!=null">attr1Column like #{attr1}</if><if test="attr2!=null">and attr2Column =#{attr2}</if>
</where>

可以看到,使用where标记有两个好处:

  •  不再需要在where后面加上1=1这个条件
  • 会智能处理and

4.foreach标记

foreach标记是最为强大的一个标记,最基本的功能是用来实现对一个集合进行遍历查询,循环赋值。通常是在构建 IN 条件语句的时候使用。

foreach标记主要是使用一下一些属性标记来实现:

  •   item:迭代的内容
  •   collection:循环的集合或指定的类型
  •   separator:元素之间的分隔符
  •   open:开始符,可选属性
  •   close:闭合符,可选属性,一般与open联合使用
  •   index:list的序号,可选属性

使用foreach进行遍历查询的常用形式:

select * from table
<where>id in<foreach item="item" index="index"  collection="list"open="(" separator="," close=")">#{item}</foreach></where>

需求

用户信息综合查询列表和用户信息查询列表总数这两个statement的定义使用动态sql。对查询条件进行判断,如果输入参数不为空才进行查询条件拼接。

mapper.xml

测试代码

sql片段

1.需求

将上边实现的动态sql判断代码块抽取出来,组成一个sql片段。其它的statement中就可以引用sql片段。方便程序员进行开发。

2.定义sql片段

3.引用sql片段

在mapper.xml中定义的statement中引用sql片段:

foreach(了解)

向sql传递数组或List,mybatis使用foreach解析

1.需求

在用户查询列表和查询总数的statement中增加多个id输入查询。

sql语句如下:

两种方法:

  • SELECT * FROM USER WHERE id=1 OR id=10 OR id=16
  • SELECT * FROM USER WHERE id IN(1,10,16)

2.在输入参数类型中添加List<Integer> ids传入多个id

3.修改mapper.xml

WHERE id=1 OR id=10 OR id=16

在查询条件中,查询条件定义成一个sql片段,需要修改sql片段。

4.测试代码

5.另外一个sql的实现

java元婴期(24)----java进阶(mybatis(3)---动态sql(重点))相关推荐

  1. java day55【 Mybatis 连接池与事务深入 、 Mybatis 的动态 SQL 语句、 Mybatis 多表查询之一对多 、 Mybatis 多表查询之多对多】...

    第1章 Mybatis 连接池与事务深入 1.1 Mybatis 的连接池技术 1.1.1 Mybatis 连接池的分类 1.1.2 Mybatis 中数据源的配置 1.1.3 Mybatis 中 D ...

  2. MyBatis的动态SQL详解

    MyBatis的动态SQL是基于OGNL表达式的,它可以帮助我们方便的在SQL语句中实现某些逻辑. MyBatis中用于实现动态SQL的元素主要有:   if choose(when,otherwis ...

  3. mybatis的动态sql的一些记录

    动态sql的作用:传统的使用JDBC的方法,相信大家在组合复杂的的SQL语句的时候,需要去拼接,稍不注意哪怕少了个空格,都会导致错误.Mybatis的动态SQL功能正是为了解决这种问题, 其通过 if ...

  4. MyBatis(三)——动态SQL

    文章目录 1. 简介 2. 搭建环境 2.1 在MySQL中创建blog表 2.2 编写实体类 2.3 编写实体类对应Mapper接口 2.4 编写Mapper接口对应的Mapper.xml文件 2. ...

  5. 9、mybatis中动态sql的使用

    对于初学者,如何进行mybatis的学习呢?我总结了几点,会慢慢的更新出来.首先大家需要了解mybatis是什么.用mybatis来做什么.为什么要用mybatis.有什么优缺点:当知道了为什么的时候 ...

  6. 利用MyBatis的动态SQL特性抽象统一SQL查询接口

    1. SQL查询的统一抽象 MyBatis制动动态SQL的构造,利用动态SQL和自定义的参数Bean抽象,可以将绝大部分SQL查询抽象为一个统一接口,查询参数使用一个自定义bean继承Map,使用映射 ...

  7. 2022/5/1 Mybatis框架动态SQL

    目录 1丶动态 SQL 2丶if标签 3丶choose.when.otherwise 4丶trim.where.set 5丶foreach 6丶script 7丶bind 8丶多数据库支持 9丶动态 ...

  8. MyBatis 一个动态sql的问题(动态SQL基于OGNL表达式)<if test=“state == ‘0‘“>单个的字符要使用双引号,改为<if test=‘state == “1“‘>或

    MyBatis 一个动态sql的问题(动态SQL基于OGNL表达式) <if test="state == '0'"> 单个的字符要使用双引号,改为<if tes ...

  9. MyBatis 03 动态SQL

    MyBatis 03 动态SQL 文章目录 MyBatis 03 动态SQL 一.学习目标 二.动态SQL if 标签2-1 if 标签2-2 where标签2-1 where 标签2-2 choos ...

最新文章

  1. 机器学习_生成式模型与判别式模型
  2. 用户选择屏幕搜索帮助的代码实现
  3. oracle 数据库的非指令备份方法
  4. 征战蓝桥 —— 2016年第七届 —— C/C++A组第3题——方格填数
  5. Zookeeper_zkClientAPI讲解
  6. mysql升级后乱码_Mysql转换或者升级以后出现乱码情况的说明
  7. c语言 变参函数的使用方法,c语言变参函数的vsprintf与va_list的用法
  8. mysql sqlserver 拷贝_SQLyog工具进行SQLSERVER表结构或数据拷贝到MySQL数据库
  9. python atm详解_python基础之ATM-1
  10. vue之仿网易严选详解
  11. 下载firebug网站
  12. catia三边倒角_CATIA课时:操作工具栏创建倒角倒圆角视频教程_翼狐网
  13. 姓氏头像制作生成头像组合微信小程序源码
  14. 六、假设检验:使用Python进行两个正态总体均值的假设检验
  15. 生成带参数微信公众号二维码
  16. 你需要TrustedInstaller提供的权限才能对此文件进行更改
  17. 揭秘:顶级产品经理是如何写产品需求文档(PRD)的
  18. 介绍几个常用的Chrome谷歌浏览器插件
  19. 小程序中input标签没有反应_解决微信小程序弹出层中input无法聚焦的问题
  20. matlab用牛顿差值计算三次差值多项式,计算方法用Newton插值多项式求函数的近似值.docx...

热门文章

  1. ubuntu19 安装git_如何在Ubuntu 20.04上安装Git
  2. java socket绑定ip_ServerSocket 默认邦定IP
  3. 普平数据招聘:数据中心建设项目经理(工程部 )2人
  4. 数据中心背后的地缘政治学
  5. SDN教育城域网解决方案
  6. 解决数据中心管综难题:管线避让的十七个原则!
  7. 深度linux win7分区,怎么安装Win7深度操作系统?
  8. 口令红包 java,[1.7.2]Gifts — 我的世界服务器在线礼物和登陆奖励插件
  9. mysql linux selected_MySQL的查询语句--SELECT
  10. CV:计算机视觉技术之图像基础知识(一)—以python的cv2库来了解计算机视觉图像基础(傅里叶变换-频域-时域/各种滤波器-线性-非线性-均值-中值-高斯-双边)