当前位置:网站首页 > 技术博客 > 正文

sql动态拼接查询条件



      🧸安清h:个人主页

   🎥个人专栏:【计算机网络】

🚦作者简介:一个有趣爱睡觉的intp,期待和更多人分享自己所学知识的真诚大学生。

文章目录

🎯一.动态SQL简单介绍

🚦动态SQL的基本概念

🎯二.条件查询操作

🚦数据库准备

🚦POJO类准备

🚦创建映射文件(元素)

🚦修改核心配置文件

🚦创建MybatisUtil工具类

🚦创建接口类 

🚦修改测试类

✨,,元素

✨更新操作 

✨复杂查询操作 

🍔元素简单介绍

🍔元素迭代List

 🍔元素迭代数组

 🍔元素迭代Map

🎯总结


动态SQL是MyBatis框架中一个非常强大的特性,它允许开发者在构建SQL语句时根据条件动态地生成不同的SQL片段。这样做的好处是可以避免硬编码查询逻辑,简化数据库查询的复杂度,同时提高代码的可读性和维护性。

动态SQL并不是一个新的概念,它指的是在运行时根据条件构建SQL语句,而不是使用静态的SQL语句。MyBatis通过一系列的动态SQL标签来实现这一功能,这些标签包括:

  • :根据条件动态拼接SQL。
  • 、、:类似于Java中的switch-case语句。
  • 、、:用于处理SQL语句的不同部分,如自动添加WHERE,并去除多余的AND。
  • :用于处理集合,生成IN查询。

在数据库mybatis下,创建一个customer表,并向其中插入几条数据,代码如下:

 

一般放在pojo包里,这里我直接在java包中建立了,类中声明id,username,jobs,phone属性,以及属性相对应get/set方法。

 

if元素中的test属性多用于条件判断语句中,用于判断真假,在此处,我们对用户姓名和工作都做了非空判断,如果传入的查询条件非空就进行动态SQL组装。

 

在核心配置文件mybatis-config.xml中引入CustomerMapper.xml映射文件,代码如下:

 

这段代码的目的是为了封装MyBatis的初始化过程,并提供一个全局访问点来获取,使得在应用的其他部分可以很方便地使用MyBatis进行数据库操作,而不需要关心的创建和配置细节。这样做可以减少代码重复,提高代码的可维护性。

 
 

在测试类MybatisTest中,编写测试方法testQuery,该方法用于通过姓名和工作查询客户信息。

 

在MyBatis的动态SQL中,, , 元素组合用于条件分支选择,类似于Java中的或语句。这些元素允许在SQL语句中根据不同的条件执行不同的SQL片段。

以下是这些元素的基本用法:

  • 元素表示一个条件选择块的开始,它本身不生成任何SQL语句。
  • 元素表示一个条件分支,它内部包含一个属性,该属性用于指定条件表达式。如果属性中的表达式计算为,则该分支内的SQL会被包含在最终的SQL语句中。
  • 元素表示在所有条件都不满足时执行的分支。它类似于语句中的分支。

(1)在映射文件CustomerMapper.xml中,添加使用 <choose>,<when>,<otherwise>实现以下场景:

  • 在客户名称不为空时,只根据客户名称查找。
  • 客户名称为空,客户职业不为空时,只根据客户职业查找。
  • 客户名称和客户职业都为空时,查询出所有电话不为空的客户信息。
 

 上述使用<choose>元素进行SQL拼接,当第一个<when>元素中的条件为真时,只动态组装第一个<when>元素内的SQL片段并执行,否则就继续向下判断第二个<when>元素中的条件是否为真,以此类推,直到某个<when>元素中的条件为真,结束判断。当前面所有的<when>元素中的条件都不为真时,则动态组装<otherwise>元素内的SQL片段并执行。

(2)在测试类MybatisTest中,编写测试方法findByWhere(),具体代码如下:

 

不同的查询结果如下:

1.客户姓名不为空时

2.客户姓名为空,客户职业不为空时

3.客户姓名和客户职业都为空时

在MyBatis中,标签用于构建动态SQL语句中的操作,它允许根据条件动态地更新表中的列。标签会自动地为你插入的每个列添加逗号分隔,并且会忽略空格,使得构建动态更新语句更加方便。

标签通常与标签结合使用,以便在运行时根据条件动态地构建更新的列和值。以下是一个基本的示例:

(1)在映射文件CustomerMapper.xml中,使用<set>元素执行更新操作的动态SQL:

 

  (2)在CustomerMapper接口中添加如下操作:

 

(3)在测试类MybatisTest中编写测试方法testUpdate(),具体实现代码如下:

 

(4)修改成功后就可以看到:

在表中的数据如下图:

 

🍔<foreach>元素简单介绍

在MyBatis中,标签用于遍历集合,常用于构建条件子句或批量操作(如批量插入、更新、删除)。标签可以处理集合或数组类型的参数,为每个元素生成SQL片段,并将这些片段组合起来。

属性描述

collection

指定要遍历的集合或数组

item

指定集合中每个元素的别名,可以在遍历块内部使用

index

指定集合中每个元素的索引或键的别名,可以在遍历块内部使用

open

指定遍历输出的开始符号

close

指定遍历输出的结束符号

separator

指定遍历元素之间的分隔符

nullable

指定是否允许collection为空值

 

🍔<foreach>元素迭代List

(1)在映射文件CustomerMapper.xml中,添加使用<foreach>元素迭代List执行批量查询操作,具体代码如下:

 

(2)在测试类MybatisTest中编写测试方法testforeach(),具体实现代码如下:

 

(3)在接口CustomerMapper 中添加以下代码:

 

(4)查询结果如下图:

 🍔<foreach>元素迭代数组

(1)在映射文件CustomerMapper.xml中,添加使用<foreach>元素迭代数组执行批量查询操作,具体代码如下:

 

(2)在测试类MybatisTest中编写测试方法testforeach(),具体实现代码如下:

 

 🍔<foreach>元素迭代Map

由于Mybatis传入参数均为一个参数,如果传入参数为多个参数,例如,查询出性别为男性且职业为教师的所有客户信息,此时,需要把这些参数封装成一个Map集合进行处理。

(1)在映射文件CustomerMapper.xml中,添加使用<foreach>元素迭代Map执行批量查询操作,具体代码如下:

 

(2)在测试类MybatisTest中编写测试方法testforeach(),具体实现代码如下:

 

版权声明


相关文章:

  • wordpress如何防止被采集2024-11-16 23:30:01
  • fork 函数2024-11-16 23:30:01
  • java数据库员工管理系统2024-11-16 23:30:01
  • 输出格式化字符的基本形式2024-11-16 23:30:01
  • linux移植步骤2024-11-16 23:30:01
  • java线程池讲解2024-11-16 23:30:01
  • 线程之间怎么通信2024-11-16 23:30:01
  • v4l2架构2024-11-16 23:30:01
  • iic的通信协议2024-11-16 23:30:01
  • 适配器模式例子2024-11-16 23:30:01