这节讲的是foreach中map的用法。
map和List,array相比,map是用K,V存储的,在foreach中,使用map时,index属性值为map中的Key的值。
因为map中的Key不同于list,array中的索引,所以会有更丰富的用法。
第一个简单例子:
- <insert id="ins_string_string">
- insert into string_string (key, value) values
- <foreach item="item" index="key" collection="map"
- open="" separator="," close="">(#{key}, #{item})</foreach>
- </insert>
可以看到这个例子相当简单,表中需要两个值,正好和K,V对应,因而map中的一个K,V就对应一条数据,如果map中有多个K,V,就会保存多个结果。
如果map中有两对K,V,那么执行SQL如下:
- DEBUG [main] - ==> Preparing: insert into string_string (key, value) values (?, ?) , (?, ?)
- DEBUG [main] - ==> Parameters: key 1(String), value 1(String), key 2(String), value 2(String)
- DEBUG [main] - <== Updates: 2
大部分数据库是支持values()()这种形式的插入语句,可以插入多条。
下面再看一个select的例子:
- <select id="sel_key_cols" resultType="int">
- select count(*) from key_cols where
- <foreach item="item" index="key" collection="map"
- open="" separator="AND" close="">${key} = #{item}</foreach>
- </select>
可以看到这里用key=value来作为查询条件,对于动态的查询,这种处理方式可以借鉴。一定要注意到$和#的区别,$的参数直接输出,#的参数会被替换为?,然后传入参数值执行。
上述SQL执行日志如下:
- DEBUG [main] - ==> Preparing: select count(*) from key_cols where col_a = ? AND col_b = ?
- DEBUG [main] - ==> Parameters: 22(Integer), 222(Integer)
- DEBUG [main] - <== Total: 1
最后,如果不考虑元素的顺序和map中Key,map和list,array可以拥有一样的效果,都是存储了多个值,然后循环读取出来。
相关推荐
Mybatis批量foreach merge into的用法 Mybatis批量foreach merge into的用法是通过Mybatis的动态SQL语法foreach循环插入实现的,这种方法可以批量插入时间价格表数据。如果某个套餐的某天的价格存在,则更新,不...
- MyBatis 的强大之处在于其动态 SQL 功能,可以在 XML 映射文件中使用 if、choose、when、otherwise、where、trim、foreach 等标签编写灵活的 SQL。 9. **日志**: - 为了便于调试,MyBatis 提供了日志功能,...
MyBatis 动态 SQL foreach 标签实现批量插入的方法示例 MyBatis 动态 SQL foreach 标签是 MyBatis 框架中的一种动态 SQL 语句,能够实现批量插入、批量删除、批量更新等操作。在本文中,我们将详细介绍使用 foreach...
在"Mybatis示例"中,我们可以深入探讨以下几个关键知识点: 1. **MyBatis架构**:MyBatis的核心组件包括SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession以及Mapper接口。SqlSessionFactoryBuilder用于...
"Mybatis foreach标签带来的空格、换行、回车问题及解决方案" Mybatis 中的 foreach 标签是一个功能强大的工具,允许开发者在 SQL 语句中循环遍历集合对象。但是,在使用 foreach 标签时,经常会遇到空格、换行、...
详解MyBatis foreach collection示例 MyBatis foreach collection是一个非常强大的功能,它允许开发者动态构建In集合条件查询。该功能可以指定一个集合,声明集合项和索引变量,这些变量可以在元素体内使用。此外,...
在"Mybatis示例代码"中,我们可以深入学习MyBatis的核心概念和关键组件。以下是一些主要的知识点: 1. **配置文件**:MyBatis的配置文件(mybatis-config.xml)是整个框架的起点,它定义了数据源、事务管理器、环境...
在Oracle数据库中使用MyBatis的`<foreach>`标签进行批量插入时,可能会遇到“SQL命令未正确结束”的错误。这个问题通常由于Oracle数据库对批量插入语句的语法要求与MySQL等其他数据库系统不同所导致。以下是对这个...
9. **动态SQL**:MyBatis的动态SQL功能非常强大,可以在XML中使用`<if>`, `<choose>`, `<when>`, `<otherwise>`, `<where>`, `<set>`, `<foreach>`等标签实现条件判断、循环等复杂逻辑,使得SQL语句更加灵活。...
MyBatis的`foreach`语句是其动态SQL功能中的一个重要组成部分,主要用于处理SQL语句中的循环和集合数据。在数据库操作中,特别是在构建`IN`条件时,`foreach`非常实用,它可以避免手动拼接SQL字符串,提高代码的...
7. **动态SQL**:MyBatis的动态SQL功能强大,可以在XML映射文件中使用`<if>`, `<choose>`, `<when>`, `<otherwise>`, `<where>`, `<set>`, `<foreach>`等标签实现条件判断和循环。 8. **缓存**:MyBatis内置了第一...
在MyBatis学习的过程中,需要注重实践,阅读示例代码,并且可以参考社区提供的示例和单元测试。若在文档阅读过程中发现错误或遗漏之处,应记录下来并反馈给社区,以帮助改进文档内容。同时,对于文档的翻译和校对,...
mybatis实战教程mybatis in action之一开发环境搭建 mybatis实战教程mybatis in action之二以接口的方式编程 mybatis实战教程mybatis in action之三实现数据的增删改查 mybatis实战教程mybatis in action之四实现...
- Mybatis的动态SQL功能强大,可以通过`if`, `choose`, `when`, `otherwise`, `trim`, `where`, `set`, `foreach`等标签实现条件判断、循环、去除冗余SQL等复杂逻辑。 7. **缓存机制** - Mybatis提供了本地缓存和...
在本示例中,我们将深入探讨MyBatis中的动态SQL,以及如何利用它来提高代码的灵活性和可维护性。 首先,动态SQL主要通过`<if>`、`<choose>`(相当于Java中的switch语句)、`<when>`、`<otherwise>`、`<where>`、`...
在"01_mybatis.rar"这个压缩包中,我们可以预见到包含的内容可能与MyBatis的基本使用、配置、映射文件以及相关的示例代码有关。下面我们将详细探讨MyBatis的一些关键知识点。 1. **MyBatis简介**: MyBatis是一个...
MyBatis的动态SQL功能非常强大,可以通过if、choose(when/otherwise)、foreach等元素实现条件拼接,灵活生成不同情况下的SQL语句。 6. **缓存机制** MyBatis提供了一级缓存和二级缓存,一级缓存是SqlSession...
8. **MyBatis的动态SQL**:`MyBatis-02-Blog`可能涉及更复杂的查询,利用MyBatis的动态SQL特性,如if、choose、where、foreach等标签,实现灵活的SQL拼接。 9. **嵌套查询与关联映射**:`MyBatis-03-Nesting`可能...
在"01课前资料"这个压缩包中,可能包含了Mybatis的基础教程、示例代码、配置文件等内容,帮助学习者理解Mybatis的基本用法和高级特性。通过学习这些资料,你可以掌握如何创建Mapper接口和XML配置文件,如何编写SQL...
MyBatis是目前流行的Java持久层框架之一,它支持普通SQL查询、存储过程以及高级映射,能够将Java对象映射到数据库记录中。MyBatis通过简单的XML或注解配置,允许开发者编写SQL语句,将其映射到接口和POJOs(普通Java...