【Mybatis】动态 SQL:代码与数据的灵动共舞,奏响数据库查询的华丽乐章

【Mybatis】动态 SQL:代码与数据的灵动共舞,奏响数据库查询的华丽乐章_第1张图片

前言

???本期讲解关于Spring IOC&DI的详细介绍~~~

??感兴趣的小伙伴看一看小编主页:-CSDN博客

?? 你的点赞就是小编不断更新的最大动力

??那么废话不多说直接开整吧~~

目录

???1.动态SQL

1.1标签>标签

1.2标签

1.3标签

1.4标签>标签

1.5标签

1.6标签

???2.总结


**??**1.动态SQL

动态 SQL 是Mybatis的强特性之,能够完成不同条件下不同的 sql 拼接可以参考官档:

网址在这里:动态 SQL_MyBatis中文网

1.1标签

我们在平时登录的时候会出现如下的情况:

【Mybatis】动态 SQL:代码与数据的灵动共舞,奏响数据库查询的华丽乐章_第2张图片

注册分为两种字段:必填字段和必填字段,那如果在添加的时候有不确定的字段传,程序应该如何实现呢?
这个时候就需要使动态标签 来判断了,如添加的时候性别 gender 为必填字段,具体实现如
下:


解释:

这里加另一个标签,这里小编后面进行解释,具体的意思就是,where条件后,如果这里的user_name没有进行输入就不按照这里的user_name进行查询,其他几个也是一样的,若存在这里对应的参数,那么就按照这里的条件,没有就不会存在这里的参数;

我们在test类中进行测试:

 @Test
    void select4() {
        UserInfo userInfo=new UserInfo();
        userInfo.setAge(19);
        userInfoXMLMapper.select4(userInfo);
    }

解释:

这里设置的就是Age存在参数,其他的没有那么这里的查询的条件就是age=19的数据,然后进行查询,可以看到前面存在and,若username为空,那么后面就会多出来一个and,那么如何进行处理呢?

1.2标签

之前的插功能,只是有个 gender 字段可能是选填项,如果有多个字段,般考虑使标签结合标签,对多个字段都采取动态成的式。
标签中有如下属性:

prefix:表整个语句块,以prefix的值作为前缀
suffix:表整个语句块,以suffix的值作为后缀
prefixOverrides:表整个语句块要去除掉的前缀
suffixOverrides:表整个语句块要去除掉的后缀

例如下面的插入的操作:


        insert into user_info
        
            
                username,
            
            
                password,
            
            
                age
            
        
        values
        
            
                #{username},
            
            
                #{password},
            
            
                #{age}
            
        
    

解释:

1.insert id=“”,这里的名字就是表示的进行数据接收的方法名,

2.在进行insert into user_info后就是进行动态SQL的操作,以标签开始:

基于 prefix 配置,开始部分加上 (
基于 suffix 配置,结束部分加上 )
多个 组织的语句都以 , 结尾,在最后拼接好的字符串还会以 , 结尾,会基于
suffixOverrides 配置去掉最后个 ,

3.if标签开始,进行判断输入的参数是否为空,如果存在就进行条件的添加,如果没有,那么就不会添加这里的条件;

4.每个test里的属性就表示的就是对象传入的属性,注意不是数据库的字段

1.3标签

咱们还是先试用,然后进行讲解,具体的代码如下所示:

 

解释:

这里小编这里只列举了几个属性,那么where标签的使使用就是可以代替上述的标签

只会在元素有内容的情况下才插where句,且会动去除句的开头的AND或
OR
以上标签也可以使 替换, 但是此种情况下, 当元素都没有内容时, where关键字也会保留

1.4标签

具体的实例代码如下所示:

 
        update user_info
                  
                
                    username=#{username},
                
                
                    password=#{password},
                
                
                    age=#{age}
                 
        
        where id=#{id}
    

解释:标签的作用:

:动态的在SQL语句中插set关键字,并会删掉额外的逗号. (于update语句中)
以上标签也可以使 替换;

1.5标签

对集合进遍历时可以使该标签。标签有如下属性:

collection:绑定法参数中的集合,如 List,Set,Map或数组对象
item:遍历时的每个对象
open:语句块开头的字符串
close:语句块结束的字符串
separator:每次遍历之间间隔的字符串

具体的代码实例就是如下的:


        delete from user_info
        where id in
        
            #{id}
        
    

解释:

这里就是SQL的意思就是

delete from user_info where id in (11, 12, 13)

instanc就是列表的名字,id可以理解为数据库字段,id= #{id};

1.6标签

在我们编写SQL的时候存在,重复的语句,就会有很多冗余的代码。例如:

【Mybatis】动态 SQL:代码与数据的灵动共舞,奏响数据库查询的华丽乐章_第3张图片

我们可以对重复的代码段进抽取,将其通过 标签封装到个SQL段,然后再通过
标签进引。

:定义可重的SQL段
:通过属性refid,指定包含的SQL段


     id, username, age, gender, phone, delete_flag, create_time, update_time

然后在进行使用时:


解释:

此时即时我们将这里的查询的数据库字段进行了封装,取名叫做allcolumn,然后再使用的时候使用标签进行SQL片段的使用;

**??**2.总结

本期小编主要讲解了动态SQL的使用,具体包括标签,主要还是使用,概念不是很重要

???~~~~最后希望与诸君共勉,共同进步!!!


???以上就是本期内容了, 感兴趣的话,就关注小编吧。

???期待你的关注~~~

你可能感兴趣的:(面试,学习路线,阿里巴巴,数据库,mybatis,sql)