热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

MyBatis多表查询与动态SQL使用

本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。


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>:
在这里插入图片描述
<文章表 articleinfo>:
在这里插入图片描述
在项目中创建的对象:
在这里插入图片描述

在这里插入图片描述

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

















property&#61;"artlist"
resultMap&#61;"com.example.demo.mapper.ArticleMapper.BaseMap"
columnPrefix&#61;"a_">



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
















resultMap&#61;"com.example.demo.mapper.UserMapper.BaseMap"
columnPrefix&#61;"u_">




&#x1f352;1.1 一对一查询

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

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

ArticleMapper.xml 配置信息:
在这里插入图片描述

UserMapper.xml 配置信息:
在这里插入图片描述
配置文件多表查询语句
这是我们在MySQL进行多表一对一查询执行语句

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



在进行单元测试代码:
在这里插入图片描述
测试结果:
在这里插入图片描述

在这里插入图片描述


&#x1f352;1.2 一对多查询

UserMapper接口代码:

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

UserMapper.xml代码:



单元测试代码:

&#64;Test
void getUserAndArticleByUid() {
UserInfo userInfo &#61; userMapper.getUserAndArticleByUid(1);
log.info("用户文章详细"&#43;userInfo);
}

单元测试结果:
在这里插入图片描述


&#x1f34e;二.动态SQL使用

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


&#x1f352;2.1 if 标签使用

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



insert into userinfo(username,password

,photo

) values(#{username},#{password}

,#{photo}

)

在这里插入图片描述
我们在单元测试中假设我们没有填写photo属性信息:
在这里插入图片描述
结果:
我们看到并没有实现photo属性信息填写,解决了非必要填写信息的选择语句繁琐的难题
在这里插入图片描述

当我们填写photo信息时:
在这里插入图片描述

在这里插入图片描述


&#x1f352;2.2 trim 标签使用

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

● suffix&#xff1a;表示整个语句块&#xff0c;以suffix的值作为后缀

● prefixOverrides&#xff1a;表示整个语句块要去除掉的前缀

● suffixOverrides&#xff1a;表示整个语句块要去除掉的后缀



insert into userinfo


username,


password,


photo


values


#{username},


#{password},


#{photo}




&#x1f352;2.3 where 标签使用

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

传⼊的⽤户对象&#xff0c;根据属性做 where 条件查询&#xff0c;⽤户对象中属性不为 null 的&#xff0c;都为查询条件
如user.username 为 “a”&#xff0c;则查询条件为 where username&#61;“a”&#xff1a;



以上标签也可以使⽤ 替换


&#x1f352;2.4 set 标签使用(增添)

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



update userinfo


username&#61;#{username},


password&#61;#{password},


photo&#61;#{photo},


where id&#61;#{id}

以上标签也可以使⽤ 替换


&#x1f352;2.5 foreach 标签使用(集合进行遍历)

// 删除方法{根据id删除这一条数据
public int del2(&#64;Param("ids") List ids);



delete from userinfo where id in

#{id}


测试单元代码:
在这里插入图片描述
测试单元结果:
在这里插入图片描述
在这里插入图片描述







推荐阅读
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文详细介绍了如何解决Uploadify插件在Internet Explorer(IE)9和10版本中遇到的点击失效及JQuery运行时错误问题。通过修改相关JavaScript代码,确保上传功能在不同浏览器环境中的一致性和稳定性。 ... [详细]
  • 本文详细介绍了如何使用 Yii2 的 GridView 组件在列表页面实现数据的直接编辑功能。通过具体的代码示例和步骤,帮助开发者快速掌握这一实用技巧。 ... [详细]
  • 本文深入探讨 MyBatis 中动态 SQL 的使用方法,包括 if/where、trim 自定义字符串截取规则、choose 分支选择、封装查询和修改条件的 where/set 标签、批量处理的 foreach 标签以及内置参数和 bind 的用法。 ... [详细]
  • 在当前众多持久层框架中,MyBatis(前身为iBatis)凭借其轻量级、易用性和对SQL的直接支持,成为许多开发者的首选。本文将详细探讨MyBatis的核心概念、设计理念及其优势。 ... [详细]
  • RecyclerView初步学习(一)
    RecyclerView初步学习(一)ReCyclerView提供了一种插件式的编程模式,除了提供ViewHolder缓存模式,还可以自定义动画,分割符,布局样式,相比于传统的ListVi ... [详细]
  • 本文详细分析了JSP(JavaServer Pages)技术的主要优点和缺点,帮助开发者更好地理解其适用场景及潜在挑战。JSP作为一种服务器端技术,广泛应用于Web开发中。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 本文详细介绍了如何通过多种编程语言(如PHP、JSP)实现网站与MySQL数据库的连接,包括创建数据库、表的基本操作,以及数据的读取和写入方法。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • Python自动化处理:从Word文档提取内容并生成带水印的PDF
    本文介绍如何利用Python实现从特定网站下载Word文档,去除水印并添加自定义水印,最终将文档转换为PDF格式。该方法适用于批量处理和自动化需求。 ... [详细]
  • 将Web服务部署到Tomcat
    本文介绍了如何在JDeveloper 12c中创建一个Java项目,并将其打包为Web服务,然后部署到Tomcat服务器。内容涵盖从项目创建、编写Web服务代码、配置相关XML文件到最终的本地部署和验证。 ... [详细]
  • XNA 3.0 游戏编程:从 XML 文件加载数据
    本文介绍如何在 XNA 3.0 游戏项目中从 XML 文件加载数据。我们将探讨如何将 XML 数据序列化为二进制文件,并通过内容管道加载到游戏中。此外,还会涉及自定义类型读取器和写入器的实现。 ... [详细]
  • Android LED 数字字体的应用与实现
    本文介绍了一种适用于 Android 应用的 LED 数字字体(digital font),并详细描述了其在 UI 设计中的应用场景及其实现方法。这种字体常用于视频、广告倒计时等场景,能够增强视觉效果。 ... [详细]
author-avatar
moses_945_5e245a
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有