养生 装修 购物 美食 感冒 便秘 营销 加盟 小吃 火锅 管理 创业 搭配 减肥 培训 旅游

ibatis中传入的参数为数组的处理方法

时间:2024-10-31 13:18:31

在使用ibatis时,我们有时会需要单字段多个值的条件进行查询水貔藻疽,如传入的可以是数组或者list形式,那么在这种情况可以聍铝遒灰有两个方式解决,第一个是在代码中以该参数作基准进行循环查询,第二个是在ibatis的sql中标签循环;那么针对第二个方法,该如何实现呢?以下做简要说明。

工具/原料

java

ibatis,maysql,ItellijIDEA

方法/步骤

1、首先,使用如下韦蛾拆篮经验引用中的建表及基础代码;在这个基础上,我们以查询多个特定学生成绩信息为例进行说明,如下传入数组ids={1,2魈胺闹臣},其中1和2代表某一学生的id值,并将该ids数组放入Map中作为ibatis查询的参数。

ibatis中传入的参数为数组的处理方法

2、重新书写调取的sql,如下图中getScoreByIds查询方法,我们以常用的map传入参数,以一个实体类进行接收;而在查询sql中,我们以一个迭代器作做循环,读取ids数组中的值;

ibatis中传入的参数为数组的处理方法

3、说明此处sql的意义:首先,iterate标签证明该处使用一个迭代器对property进行循环,此处property赋值为ids,ids是我们传入的数组。

ibatis中传入的参数为数组的处理方法

4、iterate标签还具有open和end这一对属性,如下面图中所示,左括号和右括号的赋值,代表该对属性的值是放在iterate循环的最外层,包住整个生成的sql。

ibatis中传入的参数为数组的处理方法

5、conjunction属性,如下图所示,赋值为逗号,表示每次循环后,都加上该属性中的符号。

ibatis中传入的参数为数组的处理方法

6、最后在iterate正负标签间填上金泫险缋取值,使用##进行取值,该处注意ids为数组,需要进行声明,因此该处赋值为#足毂忍珩ids[]#。主要的原因是我是用map进行传参,map中参数为Object的泛型。因此该处需要再次声明类型。

ibatis中传入的参数为数组的处理方法

7、通过ibatis的解析,生成的sql为如下所示。

ibatis中传入的参数为数组的处理方法

8、通过第一步中写好的测试main方法,使用debug方式运行,为了展示查询出的结果,在如下图的位置打上断点。目的是为了让程序停在该处,在控制台查看查询结果。

ibatis中传入的参数为数组的处理方法

9、debug方式运行main方法,从如下控制台中可以看到,查询的数据scoreSumList中,证明该方法可行。

ibatis中传入的参数为数组的处理方法

10、因数组可以与List可以相互转换,掌握了这种方式,即使传入的参数是List,也可以转换为数组再进行操作,当然直接传List进ibatis也是可行的,只需要将入参改为List类型,即用直接声明参数类型。

© 一点知识