MyBatis学习笔记:映射器中的<foreach>标签

2023-12-28 20:18

本文主要是介绍MyBatis学习笔记:映射器中的<foreach>标签,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这片文章是对自己学习的总结,学习材料来源网上。


<foreach>标签用于在映射器中,定义sql逻辑时,需要遍历集合内元素的场景。

很常见的一个情况是,传入一个List<Integer>集合,里面是userId,要求返回这个id集合的所有用户信息。

那么定义sql语句就如下所示。

<select id="findUsersByIds" parameterType="list" result="com.luckincoffee.domain.User">select * from users where user_id in<foreach index="index" open="(" close=")" separator="," collection="list" item="item">#{item}</foreach>
</select>

这样就能达到我们的目的。接下来就详细讲解foreach标签各个属性的意义。

 

  • index属性:未知,网上都说是用来标记遍历到哪个元素了,没研究。

 

  • open属性:用于表示这段字符串开始之前先加上些什么。刚才的例子,如果传进来的参数list包含的元素是{1,2,3},那么例子中的sql语句就变成
select * from users where user_id in (1,2,3)

foreach就是后面的(1,2,3),他其实也就是字符串而已。那么open="("意思就是在1,2,3之前加上'('。

 

  • close属性:和open相反,它是用来表示在字符串最后应该加上什么。

 

  • separator属性:因为foreach其实就是遍历元素然后把值写成sql,那么遍历元素写上值,值与值之间要有分隔的,所以一般来说separator=","。这表示值与值之间要用逗号分开。如果separator=" ",那么例子中的sql语句就变成了
select * from users where user_id in (1 2 3)

 

  • item属性:item是集合内元素的一个别称。例子中item="item",所以用#{item}动态表示list中的userId。如果item="userId",那代码就应该写成
<select id="findUsersByIds" parameterType="list" result="com.luckincoffee.domain.User">select * from users where user_id in<foreach index="index" open="(" close=")" separator="," collection="list" item="userId">#{userId}</foreach>
</select>
  • collection标签:表示选择参数中的哪个属性来遍历

如果我们的参数传的是User类,User类中有classIdList这么一个列表,我们需要用foreach对这个列表遍历。这个时候,foreach中的collection标签就是用来指明对classIdList来进行遍历,否则计算机会不知道应该把哪个属性来当做集合遍历。

<select id="select" parameterType="com.company.domain.User" resultType="com.company.domain.User">select * from t_user where t_user.class_id in <foreach collection="classIdList" open="(" close=")" separator="," item="item"> #{item}</foreach>
</select>

当然,如果传进来的参数就是一个集合,那collection可以省略。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

这篇关于MyBatis学习笔记:映射器中的<foreach>标签的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/547170

相关文章

利用Python快速搭建Markdown笔记发布系统

《利用Python快速搭建Markdown笔记发布系统》这篇文章主要为大家详细介绍了使用Python生态的成熟工具,在30分钟内搭建一个支持Markdown渲染、分类标签、全文搜索的私有化知识发布系统... 目录引言:为什么要自建知识博客一、技术选型:极简主义开发栈二、系统架构设计三、核心代码实现(分步解析

Spring Boot项目中结合MyBatis实现MySQL的自动主从切换功能

《SpringBoot项目中结合MyBatis实现MySQL的自动主从切换功能》:本文主要介绍SpringBoot项目中结合MyBatis实现MySQL的自动主从切换功能,本文分步骤给大家介绍的... 目录原理解析1. mysql主从复制(Master-Slave Replication)2. 读写分离3.

Mybatis 传参与排序模糊查询功能实现

《Mybatis传参与排序模糊查询功能实现》:本文主要介绍Mybatis传参与排序模糊查询功能实现,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、#{ }和${ }传参的区别二、排序三、like查询四、数据库连接池五、mysql 开发企业规范一、#{ }和${ }传参的

CSS去除a标签的下划线的几种方法

《CSS去除a标签的下划线的几种方法》本文给大家分享在CSS中,去除a标签(超链接)的下划线的几种方法,本文给大家介绍的非常详细,感兴趣的朋友一起看看吧... 在 css 中,去除a标签(超链接)的下划线主要有以下几种方法:使用text-decoration属性通用选择器设置:使用a标签选择器,将tex

基于SpringBoot+Mybatis实现Mysql分表

《基于SpringBoot+Mybatis实现Mysql分表》这篇文章主要为大家详细介绍了基于SpringBoot+Mybatis实现Mysql分表的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可... 目录基本思路定义注解创建ThreadLocal创建拦截器业务处理基本思路1.根据创建时间字段按年进

将Mybatis升级为Mybatis-Plus的详细过程

《将Mybatis升级为Mybatis-Plus的详细过程》本文详细介绍了在若依管理系统(v3.8.8)中将MyBatis升级为MyBatis-Plus的过程,旨在提升开发效率,通过本文,开发者可实现... 目录说明流程增加依赖修改配置文件注释掉MyBATisConfig里面的Bean代码生成使用IDEA生

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

MyBatis 动态 SQL 优化之标签的实战与技巧(常见用法)

《MyBatis动态SQL优化之标签的实战与技巧(常见用法)》本文通过详细的示例和实际应用场景,介绍了如何有效利用这些标签来优化MyBatis配置,提升开发效率,确保SQL的高效执行和安全性,感... 目录动态SQL详解一、动态SQL的核心概念1.1 什么是动态SQL?1.2 动态SQL的优点1.3 动态S

Python基于wxPython和FFmpeg开发一个视频标签工具

《Python基于wxPython和FFmpeg开发一个视频标签工具》在当今数字媒体时代,视频内容的管理和标记变得越来越重要,无论是研究人员需要对实验视频进行时间点标记,还是个人用户希望对家庭视频进行... 目录引言1. 应用概述2. 技术栈分析2.1 核心库和模块2.2 wxpython作为GUI选择的优

Spring Boot结成MyBatis-Plus最全配置指南

《SpringBoot结成MyBatis-Plus最全配置指南》本文主要介绍了SpringBoot结成MyBatis-Plus最全配置指南,包括依赖引入、配置数据源、Mapper扫描、基本CRUD操... 目录前言详细操作一.创建项目并引入相关依赖二.配置数据源信息三.编写相关代码查zsRArly询数据库数