如果我在接口中定义的事一个list集合类型,xml中parameterType应该怎么写

时间:2019.03.07 发布人:北葵向暖丶_260

如果我在接口中定义的事一个list集合类型,xml中parameterType应该怎么写

已解决问题

谷歌北葵向暖丶_260用户在2019.03.07提交了关于“心理罪如果我在接口中定义的事一个list集合类型,xml中parameterType应该怎么写”的提问,欢迎大家涌跃发表自己的观点。目前共有1个回答,最后更新于2024-09-07T13:00:18。希望大家能够帮助她。

详细问题描述及疑问:期待您的答案,谢谢你帮我,祝你快乐,愿你事事如意 !

希望以下的回答,能够帮助你。

第1个回答

用户名:贝尔梅尔娜美  

众所周知,mybatis的传入参数可以是各种J**a的基本**类型:包含int,String,Dat德民e等。基本**类型作为传参,只能传入一个。通过#{参数名}即可获取传入的值,复杂**类型:包含J**A实体类、Map。通过#{属性名}或#{map的KeyName}即可获取传入的值,但是如果想传入一个collection怎么办呢?经查找后发现可以使用mapper配置文件中的foreach语句,借用别人写的文章:问答3.7foreach对于责省前胡久家局必见动态SQL非常必须乙红老志占镇从的,主是要迭代一个集合,通常是用于IN条件。Lis映感才期兴术呼t实例将使用“list”限根字套台密服细做为键,数组实例以“array”做为键。foreach元素是非常强大的,它允许你指定一个集合,声明集合项和索引变量,它们可以用在元素体内。它也允许你指定**和关闭的字符串,在迭代之间放置分隔符。这个元素是很智能的,它不会偶然地附加多余的分隔符。注意:你可以传递一个List实例或者数组作为参数对象传给MyBatis。当你这么做的时候,MyBatis会自动将它包装在一个Map中,用名称在作为键。List实例将会以“list”作为键,而数组实例将会以“array”作为键。这个部分是对关于XML配置文件和XML映射文件的而讨论的。下一部分将详细讨论J**aAPI,所以你可以得到你已经创建的最有效的映射。3.7.1参数为array示例的写法略3.7.2参数为list示例的写法接口的方法声明:J**a代码publicList<StudentEntity>getStuden电将tListByClassIds_foreach_list(List<String>classIdList);动态SQL语句:Xml代队振还响火案齐米码<!--7.2foreach(循环List<String>参数)-作为where中in的条件--><selectid="getStudentListByClassIds_forea案操兴族敌ch_list"resultMap="resultMap_studentEntity">**LECTS观T.STUDENT_ID,ST.STUDENT_NA映南它丰欢供ME,ST.STUDENT_**,ST.STUDENT_BIRTh**DAY,ST.STUDENT_Ph**OTO,ST.CLASS_ID,***.PLAC行汉E_IDFROMSTUDENT_TBLSTWh**EREST.CLASS_IDIN<foreachcollection="list"ite放取吃者理分右装更化算m="class又居灯五迅IdList"open="("separator=","close=")">#{classIdList}</foreach></select>测试代码,查询学生中,在20000001、20000002这两个班级的学生:J**a代码@Testpublicvoidtest7_2_foreach(){ArrayList<S销检报述口酸tring>classIdList=newArrayList<String>();classIdList.a还镇饭交谓木角动原dd("20000001");classIdList.add("20000002");Lis采息艺令日引零宜超t<StudentEntity>list=this.dynamicSqlMapper.getStudentListB轴白会紧缺尽标氧yClassIds_foreach_list(classIdList);for(StudentEntitye:list){System.out.println(e.toString());}}这个是ItEye上的一篇文章,其中配置文件中的parameterType是可以不配置的,mybatis会自动传入的。当您想传入collection时,并不能直接传入collection对象,要将其先转换为list,然后才能传入。因为mybatis生成SQL语句遍历list时是需要用到get()方法的,而这个方法只在List中才有,Collection里是没有的。以上的配置在Mybitis官方文档中的“动态SQL〔可以找到。参数示例:根据班级ID查询教师列表xml文件[html]viewplaincopy<selectid="selectTeacher"parameterType="int"resultType="com.myapp.domain.Teacher">select*fromTeacherwherec_id=#{id}</select>j**a代码[j**a]viewplaincopyList<Teacher>tList=teacherMapper.selectTeacher(2);for(TeacherentityTemp:tList){System.out.println(entityTemp.toString());}J**A实体类型参数示例:[html]viewplaincopy<selectid="selectTeacher"parameterType="com.myapp.domain.Teacher"resultType="com.myapp.domain.Teacher">select*fromTeacherwherec_id=#{id}</select>[j**a]viewplaincopyj**a代码TeacherqueryTeacher=newTeacher();queryTeacher.setId(2);List<Teacher>tList=teacherMapper.selectTeacher(queryTeacher);for(TeacherentityTemp:tList){System.out.println(entityTemp.toString());}Map参数示例:[html]viewplaincopy<selectid="selectTeacher"parameterType="Map"resultType="com.myapp.domain.Teacher">select*fromTeacherwherec_id=#{id}and**=#{**}</select>[j**a]viewplaincopyj**a代码Map<String,String>map=newh**asMap<String,String>();map.put("id","2");map.put("**","男");List<Teacher>tList=teacherMapper.selectTeacher(map);for(TeacherentityTemp:tList){System.out.println(entityTemp.toString());}另外MyBatis还提供了一个使用注解来参入多个参数的方式。这种方式需要在接口的参数上添加@Param注解示例:接口方法[j**a]viewplaincopypublicList<Teacher>selectTeacher(@Param(value="id")Stringid,@Param(value="**")String**);XML文件[html]viewplaincopy<selectid="selectTeacher"resultType="com.myapp.domain.Teacher">select*fromTeacherwherec_id=#{id}and**=#{**}</select>测试代码[j**a]viewplaincopyList<Teacher>tList=teacherMapper.selectTeacher("2","男");for(TeacherentityTemp:tList){System.out.println(entityTemp.toString());