iBatis in 语句参数传入方法
刚刚开始在工作中用到iBatis 在用到in去查询或者删除 我本来是传递一个String的参数,但是总是报以下的错误
上网查询有一下解决方案,本人已验证是可以的。
1、第一种:传入参数仅有数组
<select id="GetEmailList_Test" resultClass="EmailInfo_">
select *
from MailInfo with (nolock)
where ID in
<iterate open="(" close=")" conjunction="," >
#[]#
</iterate>
</select>
调用
string[] strValue = new string[] { "1", "2", "3" };
Reader.QueryForList<EmailInfoModel>("WebApp_Ibatisnet.dao.GetEmailList_Test", strValue );
第二种:传入参数有数组,且有其他数据
<select id="GetEmailList_Test3" parameterClass="TestIn" resultClass="EmailInfo_">
select top(#Count#)*
from MailInfo with (nolock)
where ID in
<iterate open="(" close=")" conjunction="," property="ArrValue" >
#ArrValue[]#
</iterate>
</select>
调用
TestIn ti = new TestIn();
ti.Count = 1;
ti.ArrValue = strValue;
return Reader.QueryForList<EmailInfoModel>("WebApp_Ibatisnet.dao.GetEmailList_Test3", ti);
实体类:
public class TestIn
{
private int count;
public int Count
{
get { return count; }
set { count = value; }
}
private string[] arrValue;
public string[] ArrValue
{
get { return arrValue; }
set { arrValue = value; }
}
}
第三种:in后面的数据确定,使用string传入
<select id="GetEmailList_Test2" parameterClass="TestIn" resultClass="EmailInfo_">
select *
from MailInfo with (nolock)
where ID in
($StrValue$)
</select>
调用
Reader.QueryForList<EmailInfoModel>("WebApp_Ibatisnet.dao.GetEmailList_Test2", "1,2,3");
其他信息:
Iterate的属性:
prepend -可被覆盖的SQL语句组成部分,添加在语句的前面(可选)
property -类型为java.util.List的用于遍历的元素(必选)
open -整个遍历内容体开始的字符串,用于定义括号(可选)
close -整个遍历内容体结束的字符串,用于定义括号(可选)
conjunction -每次遍历内容之间的字符串,用于定义AND或OR(可选)
<iterate>遍历类型为java.util.List的元素。
以上引用地址:http://www.blogjava.net/yuhaibo736/archive/2012/02/03/369304.html
在这里还说明一下MyBatis 和 iBatis 用in的情况不是一样的 下面是MyBatis 用in查询的MXL设置
2、上面的那种方法是用id数组来传递参数的,我还找到另一种方法(已测试过),就是通过传递一个ids字符串来批量删除
ids="1,2,3" 参数字符串
<delete id="delete" parameterClass="java.lang.String">
<![CDATA[
delete from table_name where keyid in(#ids#)
]]>
</delete>
3,大于号小于号特殊字符处理
直接在xml 文件中写 < 号会提示错误,而加上 <![CDATA[<=]]> 就不会了
转载于:https://www.cnblogs.com/laotan/p/4330269.html
iBatis in 语句参数传入方法相关推荐
- java接口作为参数_JAVA:将类、抽象类、接口当成方法的参数传入
将类当成参数传入方法,其实就是将类的对象传入方法,如果是抽象类,其实就是将抽象类的子类的对象传入方法,如果是接口,其实就是将接口实现类的对象传入方法. 因为抽象类和接口是不能实例化成对象的,所以必须找 ...
- python一个函数调用另一个函数_在Python中将函数作为另一个函数的参数传入并调用的方法...
在Python中,函数本身也是对象,所以可以将函数作为参数传入另一函数并进行调用 在旧版本中,可以使用apply(function, *args, **kwargs)进行调用,但是在新版本中已经移除, ...
- Python把函数作为参数传入的高阶编程方法
map:接受两个参数(函数,Iterable),map将传入的函数依次作用于Iterable的每个元素,并且返回新的Iterable def f(x):return x*x r = map(f,[1, ...
- python sql语句换行_python一行sql太长折成多行并且有多个参数的方法
python一行sql太长折成多行并且有多个参数 sql语句本身就支持多行, 你可以用两种方法断行 注意: 第一种会带入换行符(\n), 第二种只是一行 a='''xxxx本身也可以作为注释使用xxx ...
- Java基础知识之方法的通用格式、注意事项与带参数的方法
文章目录 一.方法调用过程 二.带参数的方法 三.方法的通用格式 一.方法调用过程 1.方法定义 public static void 方法名(){//方法体 } 2.方法调用过程 图片:@黑马程序员 ...
- ibatis 动态语句拼写心得
ibatis 动态语句拼写心得 文章分类:Java编程 项目中用到了ibatis.看了很多篇在XML 里动态编写sql 的文章! 我突然有了疑问,在一个statement 中可以包含多个 dynami ...
- fixture详细介绍-作为参数传入,error和failed区别
前言 fixture是pytest的核心功能,也是亮点功能,熟练掌握fixture的使用方法,pytest用起来才会得心应手! fixture简介 fixture的目的是提供一个固定基线,在该基线上测 ...
- java方法的参数_Java方法参数
Java方法参数 在程序设计语言中如何将参数传给方法(或函数): 按值调用:方法接受的是调用者提供的值 按引用调用:方法接受的是调用者提供的地址 Java程序设计语言总是采用按值调用(方法得到的是所有 ...
- 积神经网络的参数优化方法——调整网络结构是关键!!!你只需不停增加层,直到测试误差不再减少....
积神经网络(CNN)的参数优化方法 from:http://blog.csdn.net/u010900574/article/details/51992156 著名: 本文是从 Michael Nie ...
最新文章
- Python应用实战系列(一)-正则表达式大全
- java 高级数据类型_java 数据类型(上):分类
- SQL Server 数据库所有者
- python依赖注入_什么是依赖注入?
- C++ 函数重载的实现原理
- Itext学习(二)----实现把图片转化为pdf
- 【渝粤教育】国家开放大学2018年春季 0550-21T素描(一) 参考试题
- 辞职信格式模板和范文参考
- idea的导包快捷键+自动导包设置
- Git 下载与安装教程
- 算法 | 生命游戏 (Game of Life)
- MySQL-innobackupex备份工具
- 电子基础知识:测判三极管的口诀
- #1024程序员节#活动勋章获取方式
- mysql查询和更改时区
- c语言读心术原理,无聊的时候写的读心术小程序
- oracle-ORA-22922: 不存在的 LOB 值
- (弹性布局)justify-content的属性案例
- 智慧医疗中人工智能的7大应用|数据标注
- 【Mac小白必备】MacOS中Dock栏的设置和使用技巧