`

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示例

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

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

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

    详解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