foreach怎么在mybatis中使用

  介绍

这篇文章将为大家详细讲解有关foreach怎么在mybatis中使用,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

foreach元素的属性主要有项目,索引,收集、开放、分离器、接近。

<李>

项目:集合中元素迭代时的别名,该参数为必选。

<李>

指数:在列表和数组中,索引是元素的序号,在地图中,索引是元素的关键,该参数可选

<李>

开放:foreach代码的开始符号,一般是(和关闭=?“合用。常用在在(),()时,该值参数可选

<李>

分隔符:元素之间的分隔符,例如在在()的时候,分离器=?“会自动在元素中间用“,”隔开,避免手动输入逗号导致sql错误,如在(1、2)这样。该参数可选。

<李>

关闭:foreach代码的关闭符号,一般是)和开放=?“合用。常用在在(),()时,该值参数可选。

<李>

集合:要做foreach的对象,作为入参时,列表对象默认用“list"代替作为键,数组对象有“array"代替作为键,地图对象没有默认的键。当然在作为入参时可以使用@Param (“keyName")来设置键,设置keyName后,列表中,数组将会失效。除了入参这种情况外,还有一种作为参数对象的某个字段的时候。举个例子:如用户有果属性id列表。入参是用户对象,那么这个集合=癷ds"。如用户有果属性Ids id;其中id是个对象,Ids有个属性id列表;入参是用户对象,那么=凹蟟ds.id"

在使用foreach的时候最关键的也是最容易出错的就属是集合性,该属性是必须指定的,但是在不同情况下,该属性的值是不一样的,主要有一下3种情况:

<李>

如果传入的是单参数且参数类型是一个列表的时候,属集合性值为列表。

<李>

如果传入的是单参数且参数类型是一个数组数组的时候,收集的属性值为数组。

<李>

如果传入的参数是多个的时候,我们就需要把它们封装成一个地图了,当然单参数也可以封装成地图,实际上如果你在传入参数的时候,在MyBatis里面也是会把它封装成一个地图的,映射的键就是参数名,所以这个时候属集合性值就是传入的列表或数组对象在自己封装的地图里面的关键。

针对最后一条,我们来看一下官方说法:

注意你可以将一个列表实例或者数组作为参数对象传给MyBatis,当你这么做的时候,MyBatis会自动将它包装在一个图中并以名称为键.List实例将会以“列表”作为键,而数组实例的键将是“数组”。

所以,不管是多参数还是单参数的列表、数组类型,都可以封装为地图进行传递。如果传递的是一个列表,则MyBatis会封装为一个列表为关键,列表值为对象的映射,如果是数组,则封装成一个数组为关键,数组的值为对象的映射,如果自己封装呢,则colloection里放的是自己封装的地图里的关键值。

<强>源码分析

由于官方文档对这块的使用,描述的比较简短,细节上也被忽略掉了(可能是开源项目文档一贯的问题吧),也使用不少同学在使用中遇到了问题。特别是foreach这个函数中,属集合性做什么用,有什么注意事项。由于文档不全,这块只能通过源代码剖析的方式来分析一下各个属性的相关要求。

属集合性的用途是接收输入的数组或列表是接口实现。但对于其名称的要求,MyBatis在实现中还是有点不好理解的,所以需要特别注意这一点。

下面开始分析源代码(笔记使用的是MyBatis 3.0.5版本)

先找到MyBatis执行SQL配置解析的入口

MapperMethod。java类中publicObject执行(Object [] args)该方法是执行的入口。

针在集对合查询,对应用就是selectForList或SelctForMap方法。

 foreach怎么在mybatis中使用“> <br/> </p> <p>但不管调用哪个方法,都会对原来JDK传入的参数对象[]类型,通过getParam方法转换成一个对象,那这个方法是做什么的呢?分析源码如下:</p> <p> <img src=foreach怎么在mybatis中使用