mybatis处理集合和循环数组问题

原创
2012/07/19 12:49
阅读数 2.9W

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

1.     如果传入的是单参数且参数类型是一个List的时候,collection属性值为list

2.     如果传入的是单参数且参数类型是一个array数组的时候,collection的属性值为array

3.     如果传入的参数是多个的时候,我们就需要把它们封装成一个Map了,当然单参数也可以封装成map,实际上如果你在传入参数的时候,在breast里面也是会把它封装成一个Map的,map的key就是参数名,所以这个时候collection属性值就是传入的List或array对象在自己封装的map里面的key.

    我采用mybatis直接将数组当作参数传入总是出现错误,说找不到参数,也按照上述的条件一一尝试结果还是不行,我想可能出现这个问题的原因是mybatis的版本问题。后来采用传入一个实体,在实体里面定义数组的方法。然后操作,这样就不出错了。此方法虽为下册,但也可以应付一些关键问题。

下面看看代码把!

实体bean:

package com.huaat.weibo.vo;

import java.io.Serializable;

/**
 * 我的微博实体
 * @author jing.yue
 * @version 2012/07/17 1.0.0
 */
public class MyWeibo implements Serializable {

	private static final long serialVersionUID = 754681127580984228L;

	private String[] fileNames;
	private String[] fileUrls;

	public String[] getFileNames() {
		return fileNames;
	}
	public void setFileNames(String[] fileNames) {
		this.fileNames = fileNames;
	}
	public String[] getFileUrls() {
		return fileUrls;
	}
	public void setFileUrls(String[] fileUrls) {
		this.fileUrls = fileUrls;
	}

}

下面为mybatis的配置文件[myWeibo为实体]:

<!-- 删除微博 -->
	<delete id="delMyWeibo" parameterType="myWeibo">
		delete from my_weibo where weibo_id in
		<foreach item="item" index="index" collection="fileUrls" open="(" separator="," close=")">
			#{item}
		</foreach>
	</delete>

解释下foreach的参数:

foreach元素的属性主要有 item,index,collection,open,separator,close。

item表示集合中每一个元素进行迭代时的别名.

index指 定一个名字,用于表示在迭代过程中,每次迭代到的位置.

open表示该语句以什么开始,separator表示在每次进行迭代之间以什么符号作为分隔 符.

close表示以什么结束.

至于调用这个方法的代码:

/**
	 * 删除微博
	 * @param myWeibo
	 */
	public abstract void delMyWeibo(MyWeibo myWeibo);

这样就解决这个问题了~

原文来自:https://www.52jingya.com/aid5.html

展开阅读全文
加载中
点击加入讨论🔥(3) 发布并加入讨论🔥
3 评论
9 收藏
3
分享
返回顶部
顶部