MyBatis【多表查询与动态SQL使用】

MyBatis【多表查询与动态SQL使用】

  • 一.MyBatis多表查询
    • 1.1 一对一查询
    • 1.2 一对多查询
  • 二.动态SQL使用
    • 2.1 if 标签使用
    • 2.2 trim 标签使用
    • 2.3 where 标签使用
    • 2.4 set 标签使用(增添)
    • 2.5 foreach 标签使用(集合进行遍历)

一.MyBatis多表查询

我们在进行多表查询的时候,我们需要在数据库创建两个表(作者表,文章表)

<作者表 userinfo>:
MyBatis【多表查询与动态SQL使用】_第1张图片
<文章表 articleinfo>:
MyBatis【多表查询与动态SQL使用】_第2张图片
在项目中创建的对象:
MyBatis【多表查询与动态SQL使用】_第3张图片

MyBatis【多表查询与动态SQL使用】_第4张图片

在userinfo配置文件mybatis.xml配置信息





    
       
        

        
        
        
        
        
        
        
        

        
        
        

    

在aricleinfo配置文件mybatis.xml配置信息




    
        
        

        
        
        
        
        
        
        
        

        
        
        

    

1.1 一对一查询

创建一个ArticleMapper接口方法:
在这里插入图片描述

创建一个ArticleMapper接口对应 aricleinfo 和 userinfo 在maybatis.xml配置文件

ArticleMapper.xml 配置信息:
MyBatis【多表查询与动态SQL使用】_第5张图片

UserMapper.xml 配置信息:
MyBatis【多表查询与动态SQL使用】_第6张图片
配置文件多表查询语句
这是我们在MySQL进行多表一对一查询执行语句

我们发现这两个表都有一个相同的id名称属性,这会使在查询时前面id的值会将后面id的值进行覆盖,
所有我们需要将对被联合查询表进行重命名
在这里插入图片描述


    

在进行单元测试代码:
MyBatis【多表查询与动态SQL使用】_第7张图片
测试结果:
在这里插入图片描述

在这里插入图片描述

1.2 一对多查询

UserMapper接口代码:

   //查询用户及用户发表的所有文章,根据用户uid
    public UserInfo getUserAndArticleByUid(@Param("uid") Integer uid);

UserMapper.xml代码:

   
    

单元测试代码:

   @Test
    void getUserAndArticleByUid() {
        UserInfo userInfo = userMapper.getUserAndArticleByUid(1);
        log.info("用户文章详细"+userInfo);
    }

单元测试结果:
MyBatis【多表查询与动态SQL使用】_第8张图片

二.动态SQL使用

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

2.1 if 标签使用

在注册⽤户的时候,可能会有这样⼀个问题,就是有必选和非必选是,当我们使用传统的SQL语句就会很繁琐,需要大量代码来实现,这时我们就可以使用动态SQL来进行筛选用户所填的非必选信息

 
    
        insert into userinfo(username,password
        
            ,photo
        
        ) values(#{username},#{password}
        
            ,#{photo}
        
        )
    

MyBatis【多表查询与动态SQL使用】_第9张图片
我们在单元测试中假设我们没有填写photo属性信息:
MyBatis【多表查询与动态SQL使用】_第10张图片
结果:
我们看到并没有实现photo属性信息填写,解决了非必要填写信息的选择语句繁琐的难题
MyBatis【多表查询与动态SQL使用】_第11张图片

当我们填写photo信息时:
MyBatis【多表查询与动态SQL使用】_第12张图片

MyBatis【多表查询与动态SQL使用】_第13张图片

2.2 trim 标签使用

标签结合标签,对多个字段都采取动态⽣成的⽅式
标签中有如下属性:
● prefix:表示整个语句块,以prefix的值作为前缀

● suffix:表示整个语句块,以suffix的值作为后缀

● prefixOverrides:表示整个语句块要去除掉的前缀

● suffixOverrides:表示整个语句块要去除掉的后缀

 

        insert into userinfo
        
            
                username,
            
            
                password,
            
            
                photo
            
        
        values
        
            
                #{username},
            
            
                #{password},
            
            
                #{photo}
            
        
    

2.3 where 标签使用

where属性没有输入就默认时全局查找了

传⼊的⽤户对象,根据属性做 where 条件查询,⽤户对象中属性不为 null 的,都为查询条件
如user.username 为 “a”,则查询条件为 where username=“a”:

  
    

以上标签也可以使⽤ 替换

2.4 set 标签使用(增添)

根据传⼊的⽤户对象属性来更新⽤户数据,可以使⽤标签来指定动态内容

 
    
          update userinfo
        
            
                username=#{username},
            
            
                password=#{password},
            
            
                photo=#{photo},
            
        
        where id=#{id}
    

以上标签也可以使⽤ 替换

2.5 foreach 标签使用(集合进行遍历)

 // 删除方法{根据id删除这一条数据
    public int del2(@Param("ids") List ids);
  
    
        delete from userinfo where id in
        
            #{id}
        
    

测试单元代码:
MyBatis【多表查询与动态SQL使用】_第14张图片
测试单元结果:
MyBatis【多表查询与动态SQL使用】_第15张图片
MyBatis【多表查询与动态SQL使用】_第16张图片

你可能感兴趣的:(JavaEE进阶,mybatis,sql,java,动态SQL)