首页 > 数据库 >动态sql语句

动态sql语句

时间:2024-02-03 21:55:08浏览次数:26  
标签:语句 name 标签 age 查询 sql 动态 public 不为

MyBatis的动态sql语句

sql语句是根据查询条件动态的变化

mybatis提供一些动态sql的标签

常用的动态sql标签:

 IF标签使用

 如果查询条件不为空则按照查询条件查询。(可以使用多个IF标签,当IF标签满足时添加where条件)

可以满足多个条件

语法:

<if test="条件语句">
     
</if>

举个例子:如果name查询条件不为空则根据name查询,否则查询所有

(1)dao接口

public interface StudentDao {
    //如果name查询条件不为空,则根据name查询,如果为空则查询所有  
    public List<Student> select(String name);
}

(2)mapper文件内容

(3)效果展示

①当我输入一个不为空的name查询时结果:

②当我输入一个空字符串name查询时结果:

根据日志中发现查询的结果为查询所有学生。

choose标签使用

当多个<when>标签中满足最先匹配的一个时,则不再继续匹配,如果所有的<when>都不匹配时,则匹配<otherwise>

最多只能匹配一个条件

语法:

<choose>
       <when test="">
      
       </when>
       <when test="">
       
       </when>
       .............
       <otherwise>
       
       </otherwise>
</choose>

举个例子:如果name不为空则按照name查询,如果age不为空则按照age查询,如果都为空则默认profession查询

(1)dao接口

public interface StudentDao {
public List<Student> selectByNameOrAge(@Param("name") String name,@Param("age") Integer age); }

(2)mapper文件

效果展示:

①如果name和age不为空时:

name和age不为空,但是执行到第一个<when>时由于name不为空所以根据name查询。

②如果name为空,但age不为空时:

 ③当name和age都为空时:

where标签使用

上面都使用where 1=1 使用where标签。作用:添加where关键字并且会去除第一个and或or

举个例子:

 mapper文件内容:

效果展示:

如果name不为空,age为空时:

如果name和age不为空时:

foreach标签使用

foreach标签循环标签,批量操作,比如批量删除,批量添加

举个例子:批量删除操作

(1)dao接口内容

public  interface StudentDao {

    //由于集合数组在mybatis中会出现默认的名字。
    //所以一般推荐起别名
    public int deleteByIds(@Param("ids") Integer[] ids);
}

(2)mapper文件内容

(3)测试:

 

标签:语句,name,标签,age,查询,sql,动态,public,不为
From: https://www.cnblogs.com/gzyhrc/p/17997675

相关文章

  • pid文件未生成:mysqld_safe mysqld from pid file /usr/local/mysql/data/mysql.pid en
    问题/usr/local/mysql/bin/mysqld_safe--defaults-file=/usr/local/mysql/conf/my.cnf--user=mysql该命令启动mysql时,未启动成功,终端输出下列报错:2024-02-03T02:56:51.449040Zmysqld_safeLoggingto'/usr/local/mysql/mysqllog/logfile/mysql-err.log'.2024-02-03T02:......
  • mysql触发器 更新大数据
    在学习MySQL的过程中,可能你了解过触发器的概念,不清楚各位是否有详细的去学习过触发器,最近看了几篇关于触发器的文档,分享下MySQL触发器相关知识。1.触发器简介触发器即triggers,它是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合。它的执行不是由程序......
  • SqlServer的日期相减datediff函数
    SqlServer的日期相减datediff函数selectdatediff(year,开始日期,结束日期);--两日期间隔年 selectdatediff(quarter,开始日期,结束日期);--两日期间隔季 selectdatediff(month,开始日期,结束日期);--两日期间隔月 selectdatediff(day,开始日期,结束日期)......
  • SqlServer substring()函数
    SqlServersubstring()函数例子:substring('98765',-1,3)结果:9substring('98765',0,3)结果:98substring('98765',1,3)结果:987在操作sqlserver时候用到了substring函数SUBSTRING(expression,start,length)参数expression字符串、二进制字符串、文本、图像、列或包含......
  • SqlServer日期格式化
    SqlServer日期格式化0或100(*)默认值monddyyyyhh:miAM(或PM)1101美国mm/dd/yyyy2102ANSIyy.mm.dd3103英国/法国dd/mm/yy4104德国dd.mm.yy5105意大利dd-mm-yy6106-ddmonyy7107......
  • SqlServer中charindex函数
    SqlServer中charindex函数CHARINDEX作用写SQL语句我们经常需要判断一个字符串中是否包含另一个字符串,但是SQLSERVER中并没有像C#提供了Contains函数,不过SQLSERVER中提供了一个叫CHAEINDX的函数,顾名思义就是找到字符(char)的位置(index),既然能够知道所在的位置,当然就可以判断......
  • 微信小程序如何实现动态显示和隐藏某个控件
    Hello大家好!我是咕噜铁蛋!微信小程序作为一种轻量级的应用开发平台,越来越受到开发者和用户的关注。在微信小程序的开发过程中,控制元素的显示和隐藏是一个常见的需求。通过动态显示和隐藏某个控件,我们可以根据用户的操作或特定的条件来提供更好的用户体验。本文铁蛋将为为大家详细介......
  • 创建表并且迁移表数据的SQL
    --创建目标表CREATETABLEtarget_table(idINTPRIMARYKEY,nameVARCHAR(50),ageINT);--迁移表数据到目标表INSERTINTOtarget_table(id,name,age)SELECTid,name,ageFROMsource_table;这里使用CREATETABLE创建了一个名为target_table的目......
  • 在Vue中如何动态绑定class和style属性
    在Vue中,动态绑定class和style属性是我们经常遇到的需求。这个功能允许我们根据不同的条件来动态改变元素的样式,让我们的应用更加灵活和富有交互性。在本篇博客文章中,我将带你深入探索在Vue中如何实现这一功能。首先,让我们了解一下Vue中的class绑定。Vue提供了一种简洁而强大的语法......
  • SqlServer使用GroupBy分组时, 设置当查询不到某个分组时, 默认赋值一个0
    现在有个需求,需要将分组查询并统计个数后返回数据,但是当数据中没有对应的分组时就查询不到对应的数据,比如使用下面的Sql语句查询(State为Table1的字段,值为int类型)点击查看代码select caseState when0then'开工' when1then'等待' when2then'完工' ......