在使用ibatis时,我们有时会需要单字段多个值的条件进行查询水貔藻疽,如传入的可以是数组或者list形式,那么在这种情况可以聍铝遒灰有两个方式解决,第一个是在代码中以该参数作基准进行循环查询,第二个是在ibatis的sql中标签循环;那么针对第二个方法,该如何实现呢?以下做简要说明。
工具/原料
java
ibatis,maysql,ItellijIDEA
方法/步骤
1、首先,使用如下韦蛾拆篮经验引用中的建表及基础代码;在这个基础上,我们以查询多个特定学生成绩信息为例进行说明,如下传入数组ids={1,2魈胺闹臣},其中1和2代表某一学生的id值,并将该ids数组放入Map中作为ibatis查询的参数。
2、重新书写调取的sql,如下图中getScoreByIds查询方法,我们以常用的map传入参数,以一个实体类进行接收;而在查询sql中,我们以一个迭代器作做循环,读取ids数组中的值;
3、说明此处sql的意义:首先,iterate标签证明该处使用一个迭代器对property进行循环,此处property赋值为ids,ids是我们传入的数组。
4、iterate标签还具有open和end这一对属性,如下面图中所示,左括号和右括号的赋值,代表该对属性的值是放在iterate循环的最外层,包住整个生成的sql。
5、conjunction属性,如下图所示,赋值为逗号,表示每次循环后,都加上该属性中的符号。
6、最后在iterate正负标签间填上金泫险缋取值,使用##进行取值,该处注意ids为数组,需要进行声明,因此该处赋值为#足毂忍珩ids[]#。主要的原因是我是用map进行传参,map中参数为Object的泛型。因此该处需要再次声明类型。
7、通过ibatis的解析,生成的sql为如下所示。
8、通过第一步中写好的测试main方法,使用debug方式运行,为了展示查询出的结果,在如下图的位置打上断点。目的是为了让程序停在该处,在控制台查看查询结果。
9、debug方式运行main方法,从如下控制台中可以看到,查询的数据scoreSumList中,证明该方法可行。
10、因数组可以与List可以相互转换,掌握了这种方式,即使传入的参数是List,也可以转换为数组再进行操作,当然直接传List进ibatis也是可行的,只需要将入参改为List类型,即用直接声明参数类型。