文档章节

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

岳静
 岳静
发布于 2012/07/19 12:49
字数 688
阅读 25392
收藏 10

   在使用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

© 著作权归作者所有

岳静

岳静

粉丝 45
博文 19
码字总数 8678
作品 0
深圳
高级程序员
私信 提问
加载中

评论(3)

岳静
岳静 博主

引用来自“aiyouaa”的评论

亲,myWeibo 这个参数如果空指针的话怎么处理?我是说在xml里有办法容错处理吗?
可以先用if来判断是否为空哦
岳静
岳静 博主

引用来自“aiyouaa”的评论

亲,myWeibo 这个参数如果空指针的话怎么处理?我是说在xml里有办法容错处理吗?
可以先用来判断是否为空哦
绿妖精
绿妖精
亲,myWeibo 这个参数如果空指针的话怎么处理?我是说在xml里有办法容错处理吗?
mybatis(九)强大的动态SQL

上篇文章简单介绍了mybatis的查询,至此,CRUD都已讲完。本文将介绍mybatis强大的动态SQL。 那么,问题来了: 什么是动态SQL? 动态SQL有什么作用?   传统的使用JDBC的方法,相信大家在组合...

LCZ777
2014/12/20
56
0
深入了解MyBatis参数

深入了解MyBatis参数 相信很多人可能都遇到过下面这些异常: "Parameter 'xxx' not found. Available parameters are [...]" "Could not get property 'xxx' from xxxClass. Cause: "The exp......

Liuzh_533
2015/03/02
19.6K
12
MyBatis动态SQL(认真看看, 以后写SQL就爽多了)

作者:阿进的写字台 cnblogs.com/homejim/p/9909657.html 0 一起来学习 mybatis PRIMARY KEY ()) ENGINE=InnoDB AUTOINCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb40900aici COMMENT=......

程序员小灰
02/21
0
0
springMVC 接收数组参数,mybatis 接收数组参数,mybatis批量插入/批量删除案例

案例是给一个用户赋予多个权限,多个权限用其对应的主键 id 为参数,组成了 一个id数组,传给springMVC,然后springMVC传给mybatis,然后mybatis批量插入。其实类似的场景还有批量删除多个,...

清城北苑
2016/07/20
0
0
MyBatis动态SQL之foreach用法

首先简单说下foreach六个属性 item 每一次迭代结果 collection 循环集合成指定类型 separator 元素之间的分隔符,可选 open 开始符号,可选 close 关闭符号,可选 index list和数组的序号,可...

IT-Mamba
2015/08/24
11K
1

没有更多内容

加载失败,请刷新页面

加载更多

Mybatis Plus删除

/** @author beth @data 2019-10-17 00:30 */ @RunWith(SpringRunner.class) @SpringBootTest public class DeleteTest { @Autowired private UserInfoMapper userInfoMapper; /** 根据id删除......

一个yuanbeth
今天
4
0
总结

一、设计模式 简单工厂:一个简单而且比较杂的工厂,可以创建任何对象给你 复杂工厂:先创建一种基础类型的工厂接口,然后各自集成实现这个接口,但是每个工厂都是这个基础类的扩展分类,spr...

BobwithB
今天
5
0
java内存模型

前言 Java作为一种面向对象的,跨平台语言,其对象、内存等一直是比较难的知识点。而且很多概念的名称看起来又那么相似,很多人会傻傻分不清楚。比如本文我们要讨论的JVM内存结构、Java内存模...

ls_cherish
今天
4
0
友元函数强制转换

友元函数强制转换 p522

天王盖地虎626
昨天
5
0
js中实现页面跳转(返回前一页、后一页)

本文转载于:专业的前端网站➸js中实现页面跳转(返回前一页、后一页) 一:JS 重载页面,本地刷新,返回上一页 复制代码代码如下: <a href="javascript:history.go(-1)">返回上一页</a> <a h...

前端老手
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部