`

Mybatis 示例之 foreach (下)

 
阅读更多

 

 

 

 

 

这节讲的是foreach中map的用法。

 

 

 

map和List,array相比,map是用K,V存储的,在foreach中,使用map时,index属性值为map中的Key的值。

 

 

 

因为map中的Key不同于list,array中的索引,所以会有更丰富的用法。

 

 

 

第一个简单例子:

 

 
  1. <insert id="ins_string_string">  
  2.         insert into string_string (key, value) values  
  3.         <foreach item="item" index="key" collection="map"  
  4.             open="" separator="," close="">(#{key}, #{item})</foreach>  
  5.     </insert>  


可以看到这个例子相当简单,表中需要两个值,正好和K,V对应,因而map中的一个K,V就对应一条数据,如果map中有多个K,V,就会保存多个结果。

如果map中有两对K,V,那么执行SQL如下:

 

 
  1. DEBUG [main] - ==>  Preparing: insert into string_string (key, value) values (?, ?) , (?, ?)   
  2. DEBUG [main] - ==> Parameters: key 1(String), value 1(String), key 2(String), value 2(String)  
  3. DEBUG [main] - <==    Updates: 2  


大部分数据库是支持values()()这种形式的插入语句,可以插入多条。

 

 

下面再看一个select的例子:

 

 
  1. <select id="sel_key_cols" resultType="int">  
  2.         select count(*) from key_cols where  
  3.         <foreach item="item" index="key" collection="map"  
  4.             open="" separator="AND" close="">${key} = #{item}</foreach>  
  5.     </select>  


可以看到这里用key=value来作为查询条件,对于动态的查询,这种处理方式可以借鉴。一定要注意到$和#的区别,$的参数直接输出,#的参数会被替换为?,然后传入参数值执行。

 

 

上述SQL执行日志如下:

 

 
  1. DEBUG [main] - ==>  Preparing: select count(*) from key_cols where col_a = ? AND col_b = ?   
  2. DEBUG [main] - ==> Parameters: 22(Integer), 222(Integer)  
  3. DEBUG [main] - <==      Total: 1  

 

最后,如果不考虑元素的顺序和map中Key,map和list,array可以拥有一样的效果,都是存储了多个值,然后循环读取出来。

 

 

 

 
 
分享到:
评论

相关推荐

    Mybatis批量foreach merge into的用法

    Mybatis批量foreach merge into的用法 Mybatis批量foreach merge into的用法是通过Mybatis的动态SQL语法foreach循环插入实现的,这种方法可以批量插入时间价格表数据。如果某个套餐的某天的价格存在,则更新,不...

    mybatis 示例

    - MyBatis 的强大之处在于其动态 SQL 功能,可以在 XML 映射文件中使用 if、choose、when、otherwise、where、trim、foreach 等标签编写灵活的 SQL。 9. **日志**: - 为了便于调试,MyBatis 提供了日志功能,...

    MyBatis动态SQL foreach标签实现批量插入的方法示例

    MyBatis 动态 SQL foreach 标签实现批量插入的方法示例 MyBatis 动态 SQL foreach 标签是 MyBatis 框架中的一种动态 SQL 语句,能够实现批量插入、批量删除、批量更新等操作。在本文中,我们将详细介绍使用 foreach...

    Mybatis中foreach标签带来的空格\换行\回车问题及解决方案

    "Mybatis foreach标签带来的空格、换行、回车问题及解决方案" Mybatis 中的 foreach 标签是一个功能强大的工具,允许开发者在 SQL 语句中循环遍历集合对象。但是,在使用 foreach 标签时,经常会遇到空格、换行、...

    mybatis示例

    在"Mybatis示例"中,我们可以深入探讨以下几个关键知识点: 1. **MyBatis架构**:MyBatis的核心组件包括SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession以及Mapper接口。SqlSessionFactoryBuilder用于...

    详解mybatis foreach collection示例

    详解MyBatis foreach collection示例 MyBatis foreach collection是一个非常强大的功能,它允许开发者动态构建In集合条件查询。该功能可以指定一个集合,声明集合项和索引变量,这些变量可以在元素体内使用。此外,...

    mybatis示例代码

    在"Mybatis示例代码"中,我们可以深入学习MyBatis的核心概念和关键组件。以下是一些主要的知识点: 1. **配置文件**:MyBatis的配置文件(mybatis-config.xml)是整个框架的起点,它定义了数据源、事务管理器、环境...

    Oracle+Mybatis的foreach insert批量插入报错的快速解决办法

    在Oracle数据库中使用MyBatis的`&lt;foreach&gt;`标签进行批量插入时,可能会遇到“SQL命令未正确结束”的错误。这个问题通常由于Oracle数据库对批量插入语句的语法要求与MySQL等其他数据库系统不同所导致。以下是对这个...

    mybatis开发示例

    9. **动态SQL**:MyBatis的动态SQL功能非常强大,可以在XML中使用`&lt;if&gt;`, `&lt;choose&gt;`, `&lt;when&gt;`, `&lt;otherwise&gt;`, `&lt;where&gt;`, `&lt;set&gt;`, `&lt;foreach&gt;`等标签实现条件判断、循环等复杂逻辑,使得SQL语句更加灵活。...

    MyBatis的foreach语句详解

    MyBatis的`foreach`语句是其动态SQL功能中的一个重要组成部分,主要用于处理SQL语句中的循环和集合数据。在数据库操作中,特别是在构建`IN`条件时,`foreach`非常实用,它可以避免手动拼接SQL字符串,提高代码的...

    mybatis代码示例

    7. **动态SQL**:MyBatis的动态SQL功能强大,可以在XML映射文件中使用`&lt;if&gt;`, `&lt;choose&gt;`, `&lt;when&gt;`, `&lt;otherwise&gt;`, `&lt;where&gt;`, `&lt;set&gt;`, `&lt;foreach&gt;`等标签实现条件判断和循环。 8. **缓存**:MyBatis内置了第一...

    mybatis入门学习资料

    在MyBatis学习的过程中,需要注重实践,阅读示例代码,并且可以参考社区提供的示例和单元测试。若在文档阅读过程中发现错误或遗漏之处,应记录下来并反馈给社区,以帮助改进文档内容。同时,对于文档的翻译和校对,...

    springmybatis

    mybatis实战教程mybatis in action之一开发环境搭建 mybatis实战教程mybatis in action之二以接口的方式编程 mybatis实战教程mybatis in action之三实现数据的增删改查 mybatis实战教程mybatis in action之四实现...

    Mybatis系列学习源码

    - Mybatis的动态SQL功能强大,可以通过`if`, `choose`, `when`, `otherwise`, `trim`, `where`, `set`, `foreach`等标签实现条件判断、循环、去除冗余SQL等复杂逻辑。 7. **缓存机制** - Mybatis提供了本地缓存和...

    MyBatis 中动态 SQL 的示例

    在本示例中,我们将深入探讨MyBatis中的动态SQL,以及如何利用它来提高代码的灵活性和可维护性。 首先,动态SQL主要通过`&lt;if&gt;`、`&lt;choose&gt;`(相当于Java中的switch语句)、`&lt;when&gt;`、`&lt;otherwise&gt;`、`&lt;where&gt;`、`...

    01_mybatis.rar

    在"01_mybatis.rar"这个压缩包中,我们可以预见到包含的内容可能与MyBatis的基本使用、配置、映射文件以及相关的示例代码有关。下面我们将详细探讨MyBatis的一些关键知识点。 1. **MyBatis简介**: MyBatis是一个...

    mybatis源码分析视频

    MyBatis的动态SQL功能非常强大,可以通过if、choose(when/otherwise)、foreach等元素实现条件拼接,灵活生成不同情况下的SQL语句。 6. **缓存机制** MyBatis提供了一级缓存和二级缓存,一级缓存是SqlSession...

    mybatis入门项目代码

    8. **MyBatis的动态SQL**:`MyBatis-02-Blog`可能涉及更复杂的查询,利用MyBatis的动态SQL特性,如if、choose、where、foreach等标签,实现灵活的SQL拼接。 9. **嵌套查询与关联映射**:`MyBatis-03-Nesting`可能...

    Mybatis相关

    在"01课前资料"这个压缩包中,可能包含了Mybatis的基础教程、示例代码、配置文件等内容,帮助学习者理解Mybatis的基本用法和高级特性。通过学习这些资料,你可以掌握如何创建Mapper接口和XML配置文件,如何编写SQL...

    MyBatis官方中文参考手册

    MyBatis是目前流行的Java持久层框架之一,它支持普通SQL查询、存储过程以及高级映射,能够将Java对象映射到数据库记录中。MyBatis通过简单的XML或注解配置,允许开发者编写SQL语句,将其映射到接口和POJOs(普通Java...

Global site tag (gtag.js) - Google Analytics