谈一下思考,关于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 概况:本地系统从另外一个系统得到 ...
随机推荐
- linux一路填坑...
1.安装ubuntu 从ubuntu9.0开始,一路更新,越来越垃圾,更可恶的是工作上经常指定特定的版本,于是乎,我电脑里装了n个版本的ubuntu. Win7 + Ubuntu 15.10 1)装完 ...
- beego——高级查询
ORM以QuerySeter来组织查询,每个返回QuerySeter的方法都会获得一个新的QuerySeter对象. 基本使用方法: o := orm.NewOrm() // 获取 QuerySete ...
- image_Magic
http://www.charry.org/docs/linux/ImageMagick/ImageMagick.html mogrify -sample 25% *.jpg 批量处理图片 conv ...
- Java技术学习路线
转载 作者:David 链接:https://www.zhihu.com/question/25255189/answer/86898400来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商 ...
- Spring Data Jpa示例(IntelliJ maven项目)
1. 在IntelliJ中新建maven项目 给出一个建好的示例,(本示例中省略了业务逻辑组件UserService) 2. 在pom.xml中配置依赖 包括: spring-context spri ...
- 一个linux命令(6/13):traceroute命令
通过traceroute 我们可以知道信息从你的计算机到互联网另一端的主机是走的什么路径.当然每次数据包由某一同样的出发点(source)到达某一同样的目的地(destination)走的路径可能会不 ...
- 重置root密码后仍然不能登陆
一.忘记密码:二.输入正确用户名和密码时依旧无法登录. 一.忘记密码 进入单用户模式重置密码: 开机启动时,按‘E’键(倒计时结束前)进入界面 选择第二项,按‘E’键再次进入 在最后一行添加‘ 1’( ...
- Mysql:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
Mysql:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) Linux: MyS ...
- Python3.x:日期库dateutil简介
Python3.x:日期库dateutil简介 安装 pip install python-dateutil 关于parser #字符串可以很随意,可以用时间日期的英文单词,可以用横线.逗号.空格等做 ...
- js异步获取数据的问题
最近做js开发的时候发现了很多哥们不能区分同步和异步的区别,典型的在ajax部分,在该ajax为异步操作的时候,获取不到success之后的data的值,于是产生了各种奇葩的写法.比如创建一个局部变量 ...