首页 > 其他分享 >MyBatis学习笔记之Mapper文件的foreach标签详解

MyBatis学习笔记之Mapper文件的foreach标签详解

时间:2022-10-26 17:24:49浏览次数:65  
标签:语句 Mapper 迭代 USERID myItem foreach MyBatis array

0x00 概述

MyBatis的Mapper文件的foreach标签用来迭代用户传递过来的Lise或者Array,让后根据迭代来拼凑或者批量处理数据。如:使用foreach来拼接in子语句。

 在学习MyBatis Mapper文件的foreach标签时我们先看看DTD是如何定义的,DTD代码如下: 

<!-- 定义foreach元素 -->
<!ELEMENT foreach (#PCDATA | include | trim | where | set | foreach | choose | if | bind)*>
<!-- 定义foreach元素的属性 -->
<!ATTLIST foreach
    collection CDATA #REQUIRED
    item CDATA #IMPLIED
    index CDATA #IMPLIED
    open CDATA #IMPLIED
    close CDATA #IMPLIED
    separator CDATA #IMPLIED>

 

0x01 collection

该属性指定你要遍历的集合名称,然后在调用该方法的时候,通过参数的方式传递过来。

定义了一个用来获取用户信息的方法,然后使用foreach元素来构建in子语句。这里使用了默认的array,因此可以传递一个数组给这个方法,如下:

userMapper.getUserInfo(new String[]{"val01", "val02", "val03", "val04"});

注意:

(1)List默认的名称为“list”。

(2)数组(Array)的默认名称为“array”。如:

复制代码
<select id="getUserInfo" resultType="hashmap">
    SELECT N_USERID, C_NAME, C_SEX, N_AGE
      FROM T_USER
     WHERE N_USERID IN
    <foreach item="myItem" index="index" collection="array"
        open="(" separator="," close=")" >
        #{myItem}
    </foreach>
</select>
复制代码

(3)如果指定的名称不是“list”和“array”,则你需要通过Map<String,List>或Map<String,new Object[]>的方式来指定该名称。

Map<String,List<String>> params = new HashMap<String,List<String>>();
params.put("params", Arrays.asList(new String[]{"val01", "val02", "val03", "val04"}) );
userMapper.getUserInfo(params );

上面定义了一个getUserInfo方法用来获取用户信息,然后使用foreach元素来构造in子语句,这里我们使用自定义的myList作为集合参数。

复制代码
<select id="getUserInfo" parameterType="hashmap" resultType="hashmap">
    SELECT N_USERID, C_NAME, C_SEX, N_AGE
      FROM T_USER
     WHERE N_USERID IN
    <foreach item="myItem" index="index" collection="myList"
        open="(" separator="," close=")" >
        #{myItem}
    </foreach>
</select>
复制代码

 

0x02 item

用来临时存放迭代集合中当前元素的值,便于在foreach中使用。如:

复制代码
<select id="getUserInfo" parameterType="hashmap" resultType="hashmap">
    SELECT N_USERID, C_NAME, C_SEX, N_AGE
      FROM T_USER
     WHERE N_USERID IN
    <foreach item="myItem" index="index" collection="myList"
        open="(" separator="," close=")" >
        #{myItem}
    </foreach>
</select>
复制代码

在上面的语句中item="myItem",这个值在#{myItem}被使用。

 

0x03 index

这个属性用来指定用来访问迭代集合下标的名称。如:index="myIndex",则#{myIndex}用来访问当前迭代的下标。下标从0开始。

 

0x04 open

将该属性指定的值添加到foreach迭代后拼出字符串的开始。如:拼凑in子语句的开始部分“(”。

 

0x05 close

将该属性指定的值添加到foreach迭代拼出字符串的结尾。如:拼凑in子语句的介绍部分")"。

 

0x06 seperator

用来分割foreach元素迭代的每个元素。如:val1,val2,val3

复制代码
<select id="getUserInfo" parameterType="hashmap" resultType="hashmap">
    SELECT N_USERID, C_NAME, C_SEX, N_AGE
      FROM T_USER
     WHERE N_USERID IN
    <foreach item="myItem" index="index" collection="myList"
        open="(" separator="," close=")" >
        #{myItem}
    </foreach>
</select>
复制代码

如果传递给上面方法的数组是

String[] array = new String[]{"val1", "val2", "val3"};
userMapper.getUserInfo(array);
// 拼凑出的字符串:(val1,val2,val3)

 

0x07 foreach属性概览

 

 

标签:语句,Mapper,迭代,USERID,myItem,foreach,MyBatis,array
From: https://www.cnblogs.com/JetpropelledSnake/p/16829015.html

相关文章

  • springboot mybatis-plus dao层调用异常 Invalid bound statement (not found)
    记录一次打包事故。  和同事共同开发项目。开发时访问都是ok。打包后再访问一直报org.apache.ibatis.binding.BindingException:Invalidboundstatement(notfound......
  • springboot使用mybatis连接oracle简单使用
    建表createtablepublic_memo(idsvarchar2(32)notnull,titlevarchar2(255)notnull,contentsclobnotnull,addressvarchar(255)notnull,......
  • mybatis 分析
     jdbcjdbc主要作用是获取数据源,获得查询结果。存在的问题是需要手写sql,对结果集处理麻烦,mybatis主要解决这个两个问题//1.加载类,并注册驱动器(Driver会注册到Driver......
  • MyBatis学习笔记--wsdchong
    前言:学编程和学绘画一样,都是从模仿开始。初识mybatis、mybatis的核心配置、动态SQL、mybatis的关联映射、与spring的整合。 一、初识mybatis概念:1mybatis是一个支持普通SQL......
  • MyBatis 从入门到放弃 ( MyBatis基础总结 )
    目录MyBatis历史Mybatis特性MyBatis下载和其它持久化层技术对比开发环境创建maven工程创建MyBatis的核心配置文件创建mapper接口创建MyBatis的映射文件通过junit测试功能加......
  • Mybatis学习
    Mybatis环境:JDK1.8Mysql5.7maven3.6.1IDEA回顾:JDBCMysqlJavaMavenJunit框架:配置文件!!方式:看官网!!网址:mybatis–MyBatis3|Introduction1、简介1.1......
  • Javaweb基础复习------EL表达式+JSTL-if&foreach
    EL表达式------简化JSP页面的Java代码主要功能是------获取数据(语法:${data})举例://ServletDemo1.javapackagecom.example.servlet;importcom.example.pojo.User;i......
  • mapper.xml中查询(+动态查询)的一些笔记
    1.参数占位符1.#{}:执行SQL时,会将#{}占位符替换为?,将来自动设置参数值2.${}:拼SQL,会存在SQL注入问题3.使用时机:参数传递都用#{},如果要对表名、列名进行动态......
  • MyBatis+Mapper代理 学习
    MyBatis一、什么是MyBatisMyBatis是一款优秀的持久层框架,用于简化JDBC开发的。持久层:负责将数据保存到数据库的那一层代码JavaEE三层架......
  • Javaweb知识复习--MyBatis+Mapper代理开发
    一种持久层框架,主要用于简化JDBCMyBatis应用步骤1、在数据库里面创建一个表2、创建模块,导入坐标就是新建一个Maven项目,在pom.xml里面导入mybatis相应导包依赖代码:3、......