谈一下思考,关于mybatis中<foreach collection="list">中list得来的原因 没看到官方说明
<foreach> 是在sql语句中进行多个id查询 时用到的,因为mybatis代替jdbc和hibernate, 使用 在xml文件中编写sql语句,这是一个标签文件.然后在 dao层?,用sqlSession.来调用这个写好的sql语句.
有时候我想会不会jdbc更简单一些??
然后,在xml中写sql语句,会碰到根据条件或者模糊查询,这个时候需要接收来自dao层的 查询条件参数.此时需要在xml文件中的sql语句中接收,并且应该没有接收,只是确定有几个占位符,等到预编译之后,再在dao层中为占位符传参数值??
不是的,dao层在调用xml中的sql语句的同时就已经传过去条件参数,只不过只能传递一个参数,所以就要用到封装,所以就会产生collection属性 是一个单参数,或者一个集合.
内部是不是预编译 ,不知道.但是反过来jdbc中为什么要预编译再传值呢,好处在哪里,然后再看这里是否内部也需要如此???
DBAccess dbAccess = new DBAccess();
SqlSession sqlSession = null;
try {
sqlSession = dbAccess.getSqlSession();
//通过 sqlSession执行sql语句
sqlSession.delete("Message.deleteBatch",ids);
//为什么DAO层这样就可以
sqlSession.commit();//jdbc是自动提交,但是mybatis中不是自动提交的
<delete id="deleteBatch" parameterType="java.util.List">
DELETE FROM message WHERE id in (
<foreach collection="list" item="item" separator=",">
#{item}
</foreach> )
</delete>
所以此时要用到mybatis中的OGNL语言,也就是 <foreach>语句,接收条件参数放在sql语句中(在xml中)
用在in后的括号里,其实括号都可以不写,看到过相关的文档,因为foreach中有开始和结束的属性,当然有括号简便.
<delete id="deleteOne" parameterType="int">
DELETE FROM message WHERE id = #{_parameter}
</delete> <delete id="deleteBatch" parameterType="java.util.List">
DELETE FROM message WHERE id in (
<foreach collection="list" item="item" separator=",">
#{item}
</foreach> )
</delete>
但是对比只有一个参数的查询sql语句,可以看到<foreach>的作用只是在xml中实现遍历.
但是可以看到,传参数的时候,xml中接收到的参数都是其类型,没有参数,由于只有一个参数,所以不需要写参数,就用默认的_parameter或者item 表示传入的虚参数.完全没有问题.
最大的原因就是只有一个参数,简化所有....原来是一种简化.
#{} 这个是OGNL表达式?,代表传入的参数,那么为什么要用这个表达式呢,表明它是一个参数变量吗,便于区分??
谈一下思考,关于mybatis中<foreach collection="list">中list得来的原因 没看到官方说明的更多相关文章
- mybatis 中 foreach collection的三种用法(转)
文章转自 https://blog.csdn.net/qq_24084925/article/details/53790287 oreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集 ...
- mybatis 中 foreach collection的三种用法
foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合. foreach元素的属性主要有 item,index,collection,open,separator,close. ...
- Mybatis 中 foreach collection 的三种用法
foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合. foreach元素的属性主要有 item,index,collection,open,separator,close. ...
- mybatis中foreach collection的三种用法
foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合. foreach元素的属性主要有 item,index,collection,open,separator,close. ...
- mybatis使用foreach处理List中的Map mybatis-----传入传出多个参数,都是map或list,批量更新
https://nannan408.iteye.com/blog/2170470 https://blog.csdn.net/xingzhishen/article/details/86424395 ...
- javascript中forEach()和jquery中each()的区别
forEach是ES5中操作数组的一种方法,主要功能是遍历数组 1.forEach方法中的function回调有三个参数:第一个参数是遍历的数组内容,第二个参数是对应的数组索引,第三个参数是数组本身 ...
- MyBatis的foreach查询(List、Array、Map)
mybatis 中 foreach collection的三种用法 foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合. foreach元素的属性主要有 item,index ...
- mybatis中foreach的用法(转)
foreach一共有三种类型,分别为List,[](array),Map三种. foreach属性 属性 描述 item 循环体中的具体对象.支持属性的点路径访问,如item.age,item.inf ...
- Mybatis中的collection、association来处理结果映射
前不久的项目时间紧张,为了尽快完成原型开发,写了一段效率相当低的代码. 最近几天闲下来,主动把之前的代码优化了一下:) 标签:Java.Mybatis.MySQL 概况:本地系统从另外一个系统得到 ...
随机推荐
- node.js---sails项目开发(2)
1.安装mongoDB,这里用brew安装 brew install mongodb 2. 启动数据库 mongod 3.再打开一个终端,连接数据库 mongo 4.启动成功后,接下来就是新建一个数据 ...
- 通信—HTTP与HTTPS
HTTP是客户端浏览器或其他程序与Web服务器之间的应用层通信协议.在Internet上的Web服务器上存放的都是超文本信息,客户机需要通过HTTP协议传输所要访问的超文本信息. HTTPS(全称:H ...
- C/C++中浮点数输出格式问题
在C语言中,浮点数的输出格式有三种:%g, %f, %e 首先要说的是%e是采用科学计数法来显示. %g与后两者有一个重要的差别,就是设置输出精度的时候,(C中默认浮点输出精度是6),%g认为,包括整 ...
- beego——错误处理
beego通过Redirect方法来进行跳转: func (this *AddController) Get() { this.Redirect("/", 302) } 如何终止此 ...
- Codeforces Round #305 (Div. 2)
C. Mike and Frog 题意:有一只青蛙和一朵花,分别高度为h1.h2,每浇一次水,h1=(x1*h1+y1)mod m,h2=(x2*h2+y2)mod m.求最少浇多少次后h1=a1,h ...
- php 内存泄漏
所谓内存泄漏是指进称在执行过程中,内存的占有率逐步升高,不释放, 系统所拥有的可用内存越来越少的现象. php-fpm耗光内存,不释放,就是所谓的内存泄漏,内存泄漏对长期运行的程序有威胁,所以应该定期 ...
- C++模板专门化与重载
最近在复习C++有关知识,又重新看<<Effective C++>>,收获颇丰.原来以前看这边书,好多地方都是浅尝辄止.<<Effective C++>> ...
- ActionScript和js交互
新建的ActionScript项目,默认新建会在“默认包”中创建一个和项目名称相同以as结尾的文件,as项目开始执行时要new一个这样的类在类上方加入一些参数可以为生成的swf初始化一些样式 [SWF ...
- Linux安全策略配置-pam_tally2身份验证模块
PAM身份验证安全配置实例 - 强制使用强密码(用户密码安全配置) - 用户SSH登录失败尝试次数超出限制后锁定账户(帐户锁定/解锁和时间设置) - 允许普通用户使用sudo而不是su(限制普通用户登 ...
- Javascript作用域详解。
javascript的作用域 是按照 函数来划分的. 网址:http://www.cnblogs.com/rubylouvre/archive/2009/08/21/1551270.html