`

Mybatis foreach用法

阅读更多

foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合。foreach元素的属性主要有item,index,collection,open,separator,close。item表示集合中每一个元素进行迭代时的别名,index指定一个名字,用于表示在迭代过程中,每次迭代到的位置,open表示该语句以什么开始,separator表示在每次进行迭代之间以什么符号作为分隔符,close表示以什么结束,在使用foreach的时候最关键的也是最容易出错的就是collection属性,该属性是必须指定的,但是在不同情况下,该属性的值是不一样的,主要有一下3种情况: 

  1. 如果传入的是单参数且参数类型是一个List的时候,collection属性值为list .
  2. 如果传入的是单参数且参数类型是一个array数组的时候,collection的属性值为array .
  3. 如果传入的参数是多个的时候,我们就需要把它们封装成一个Map了,当然单参数也可以封装成map,实际上如果你在传入参数的时候,在MyBatis里面也是会把它封装成一个Map的,map的key就是参数名,所以这个时候collection属性值就是传入的List或array对象在自己封装的map里面的key.
下面我们通过代码实践:
数据表:
采用Oracle的HR.Employees表
        实体:Employees
public class Employees {
    private Integer employeeId;
    private String firstName;
    private String lastName;
    private String email;
    private String phoneNumber;
    private Date hireDate;
    private String jobId;
    private BigDecimal salary;
    private BigDecimal commissionPct;
    private Integer managerId;
    private Short departmentId;
}  
 映射文件:
<!--List:forech中的collection属性类型是List,collection的值必须是:list,item的值可以随意,Dao接口中参数名字随意 -->
    <select id="getEmployeesListParams" resultType="Employees">
        select *
        from EMPLOYEES e
        where e.EMPLOYEE_ID in
        <foreach collection="list" item="employeeId" index="index"
            open="(" close=")" separator=",">
            #{employeeId}
        </foreach>
    </select>

    <!--Array:forech中的collection属性类型是array,collection的值必须是:list,item的值可以随意,Dao接口中参数名字随意 -->
    <select id="getEmployeesArrayParams" resultType="Employees">
        select *
        from EMPLOYEES e
        where e.EMPLOYEE_ID in
        <foreach collection="array" item="employeeId" index="index"
            open="(" close=")" separator=",">
            #{employeeId}
        </foreach>
    </select>

    <!--Map:不单单forech中的collection属性是map.key,其它所有属性都是map.key,比如下面的departmentId -->
    <select id="getEmployeesMapParams" resultType="Employees">
        select *
        from EMPLOYEES e
        <where>
            <if test="departmentId!=null and departmentId!=''">
                e.DEPARTMENT_ID=#{departmentId}
            </if>
            <if test="employeeIdsArray!=null and employeeIdsArray.length!=0">
                AND e.EMPLOYEE_ID in
                <foreach collection="employeeIdsArray" item="employeeId"
                    index="index" open="(" close=")" separator=",">
                    #{employeeId}
                </foreach>
            </if>
        </where>
    </select>
 
Mapper类:
public interface EmployeesMapper { 

    List<Employees> getEmployeesListParams(List<String> employeeIds);

    List<Employees> getEmployeesArrayParams(String[] employeeIds);

    List<Employees> getEmployeesMapParams(Map<String,Object> params);
}
 
分享到:
评论

相关推荐

    测试mybatis里foreach用法

    在MyBatis中,`&lt;foreach&gt;`标签是一个非常重要的元素,它主要用于动态SQL语句的构建,尤其是在处理集合数据类型如List、Array、Map时。`&lt;foreach&gt;`标签的使用可以极大地提高代码的可读性和可维护性,避免了传统的字符...

    Mybatis批量foreach merge into的用法

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

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

    问题的根源在于,foreach 标签在生成 SQL 语句时,会将集合对象的每个元素用逗号分隔,并且在每个元素之间添加空格、换行、回车符号。这些符号会导致 SQL 语句执行失败或返回错误的结果。 解决方案是使用 replace ...

    mybatis 中 foreach collection的用法小结(三种)

    MyBatis 中的 foreach Collection 用法小结(三种) MyBatis 中的 foreach 语句是用来迭代一个集合,以便在 SQL 语句中生成相应的条件语句。foreach 语句的主要用途是在构建 in 条件中,例如 select * from blog ...

    MyBatis用法

    MyBatis是一个优秀的Java持久层框架,它支持定制化SQL、存储过程以及高级映射。在本示例中,我们将深入探讨MyBatis的核心概念、基本操作和与Spring MVC的集成。...掌握MyBatis的用法对于提升Java后端开发能力至关重要。

    mybatis动态SQL语句

    if 、where、set、trim、choose 、foreach等在mybatis中的具体用法,有具体实例可供参考,玩转mybatis

    mybatis-batch-test:Mybatis中sqlSession和foreach部署之间的区别

    如何在Mybatis和XML中的foreach中批处理Sqlsession 应用于mybatis批处理测试的技术如下: 使用开源 版本 Java 1.7 春天 4.1.5 摇动 2.2.1 Mybatis 3.2.8 功能细节 mybatis-batch-test在test_book表中堆积了...

    Mybatis进阶详细用法可运行代码

    7. **动态SQL**:Mybatis的动态SQL功能非常强大,可以使用`if`, `choose`, `when`, `otherwise`, `trim`, `where`, `set`, `foreach`等标签编写条件语句,使得SQL更具灵活性。 8. **缓存**:Mybatis提供了本地缓存...

    Mybatis系列学习源码

    - `Main`类:示例程序,用于测试和演示Mybatis的用法。 通过这个源码学习,你可以了解到如何配置Mybatis,如何编写Mapper接口和XML文件,以及如何在实际项目中应用Mybatis进行数据库操作。同时,还可以结合提供的...

    springmybatis

    1.Configuration.xml 是 mybatis 用来建立 sessionFactory 用的,里面主要包含了数据库连接相关东西,还有 java 类所对应的别名,比如 &lt;typeAlias alias="User" type="com.yihaomen.mybatis.model.User"/&gt; 这个别名...

    Mybatis资料

    例如,使用if、choose、when、otherwise等元素可以实现条件判断,使用foreach可以进行循环操作,这些功能使得Mybatis在处理复杂查询时显得游刃有余。 此外,Mybatis还提供了强大的缓存机制,分为一级缓存和二级缓存...

    《MyBatis 基础笔记》源代码

    MyBatis 是一款著名的Java持久层框架,它简化了数据库操作与Java对象之间的映射,提供了灵活的SQL构建和执行机制。...通过阅读《MyBatis 基础笔记》的源代码,你可以更深入地了解MyBatis的工作原理和用法。

    mybatis中文离线文档

    这个离线文档是开发者学习和查阅MyBatis功能和用法的重要资源,无需网络连接即可随时查阅。 1. **MyBatis简介**:MyBatis的起源、设计理念以及它如何简化数据库操作。它强调了与Spring框架的集成,使得事务管理和...

    mybatis入门项目代码

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

    mybatis实战

    Mybatis的新特性包括支持注解方式的SQL语句编写,动态SQL(如果-else、foreach等),以及更强大的参数映射和结果映射机制,使得SQL语句的编写更加灵活和简洁。 6、mybatis-config.xml中的元素介绍 mybatis-config....

    mybatis入门级资源

    总的来说,MyBatis的学习需要理解其基本架构,熟悉配置文件的编写,掌握Mapper接口和XML映射文件的用法,了解动态SQL和对象映射,以及事务和日志的管理。这个入门级资源包应该包含了这些方面的实例和教程,是初学者...

    Mybatis相关

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

    mybatis3.2.7开发架包

    MyBatis是一个优秀的Java持久层框架,它支持定制化SQL、存储过程以及高级映射。在3.2.7版本中,MyBatis提供了一...通过深入理解和实践,你可以更好地掌握MyBatis的用法,从而提高数据库操作的效率和代码的可维护性。

Global site tag (gtag.js) - Google Analytics