foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合。foreach元素的属性主要有item,index,collection,open,separator,close。item表示集合中每一个元素进行迭代时的别名,index指定一个名字,用于表示在迭代过程中,每次迭代到的位置,open表示该语句以什么开始,separator表示在每次进行迭代之间以什么符号作为分隔符,close表示以什么结束,在使用foreach的时候最关键的也是最容易出错的就是collection属性,该属性是必须指定的,但是在不同情况下,该属性的值是不一样的,主要有一下3种情况:
- 如果传入的是单参数且参数类型是一个List的时候,collection属性值为list .
- 如果传入的是单参数且参数类型是一个array数组的时候,collection的属性值为array .
- 如果传入的参数是多个的时候,我们就需要把它们封装成一个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>`标签是一个非常重要的元素,它主要用于动态SQL语句的构建,尤其是在处理集合数据类型如List、Array、Map时。`<foreach>`标签的使用可以极大地提高代码的可读性和可维护性,避免了传统的字符...
Mybatis批量foreach merge into的用法 Mybatis批量foreach merge into的用法是通过Mybatis的动态SQL语法foreach循环插入实现的,这种方法可以批量插入时间价格表数据。如果某个套餐的某天的价格存在,则更新,不...
问题的根源在于,foreach 标签在生成 SQL 语句时,会将集合对象的每个元素用逗号分隔,并且在每个元素之间添加空格、换行、回车符号。这些符号会导致 SQL 语句执行失败或返回错误的结果。 解决方案是使用 replace ...
MyBatis 中的 foreach Collection 用法小结(三种) MyBatis 中的 foreach 语句是用来迭代一个集合,以便在 SQL 语句中生成相应的条件语句。foreach 语句的主要用途是在构建 in 条件中,例如 select * from blog ...
MyBatis是一个优秀的Java持久层框架,它支持定制化SQL、存储过程以及高级映射。在本示例中,我们将深入探讨MyBatis的核心概念、基本操作和与Spring MVC的集成。...掌握MyBatis的用法对于提升Java后端开发能力至关重要。
if 、where、set、trim、choose 、foreach等在mybatis中的具体用法,有具体实例可供参考,玩转mybatis
如何在Mybatis和XML中的foreach中批处理Sqlsession 应用于mybatis批处理测试的技术如下: 使用开源 版本 Java 1.7 春天 4.1.5 摇动 2.2.1 Mybatis 3.2.8 功能细节 mybatis-batch-test在test_book表中堆积了...
7. **动态SQL**:Mybatis的动态SQL功能非常强大,可以使用`if`, `choose`, `when`, `otherwise`, `trim`, `where`, `set`, `foreach`等标签编写条件语句,使得SQL更具灵活性。 8. **缓存**:Mybatis提供了本地缓存...
- `Main`类:示例程序,用于测试和演示Mybatis的用法。 通过这个源码学习,你可以了解到如何配置Mybatis,如何编写Mapper接口和XML文件,以及如何在实际项目中应用Mybatis进行数据库操作。同时,还可以结合提供的...
1.Configuration.xml 是 mybatis 用来建立 sessionFactory 用的,里面主要包含了数据库连接相关东西,还有 java 类所对应的别名,比如 <typeAlias alias="User" type="com.yihaomen.mybatis.model.User"/> 这个别名...
例如,使用if、choose、when、otherwise等元素可以实现条件判断,使用foreach可以进行循环操作,这些功能使得Mybatis在处理复杂查询时显得游刃有余。 此外,Mybatis还提供了强大的缓存机制,分为一级缓存和二级缓存...
MyBatis 是一款著名的Java持久层框架,它简化了数据库操作与Java对象之间的映射,提供了灵活的SQL构建和执行机制。...通过阅读《MyBatis 基础笔记》的源代码,你可以更深入地了解MyBatis的工作原理和用法。
这个离线文档是开发者学习和查阅MyBatis功能和用法的重要资源,无需网络连接即可随时查阅。 1. **MyBatis简介**:MyBatis的起源、设计理念以及它如何简化数据库操作。它强调了与Spring框架的集成,使得事务管理和...
8. **MyBatis的动态SQL**:`MyBatis-02-Blog`可能涉及更复杂的查询,利用MyBatis的动态SQL特性,如if、choose、where、foreach等标签,实现灵活的SQL拼接。 9. **嵌套查询与关联映射**:`MyBatis-03-Nesting`可能...
Mybatis的新特性包括支持注解方式的SQL语句编写,动态SQL(如果-else、foreach等),以及更强大的参数映射和结果映射机制,使得SQL语句的编写更加灵活和简洁。 6、mybatis-config.xml中的元素介绍 mybatis-config....
总的来说,MyBatis的学习需要理解其基本架构,熟悉配置文件的编写,掌握Mapper接口和XML映射文件的用法,了解动态SQL和对象映射,以及事务和日志的管理。这个入门级资源包应该包含了这些方面的实例和教程,是初学者...
在"01课前资料"这个压缩包中,可能包含了Mybatis的基础教程、示例代码、配置文件等内容,帮助学习者理解Mybatis的基本用法和高级特性。通过学习这些资料,你可以掌握如何创建Mapper接口和XML配置文件,如何编写SQL...
MyBatis是一个优秀的Java持久层框架,它支持定制化SQL、存储过程以及高级映射。在3.2.7版本中,MyBatis提供了一...通过深入理解和实践,你可以更好地掌握MyBatis的用法,从而提高数据库操作的效率和代码的可维护性。