iBATIS使用$和#的一些理解
我们在使用iBATIS时会经常用到#这个符号。
比如:
sql 代码
- select * from member where id =#id#
然后,我们会在程序中给id这个变量传递一个值,iBATIS会自动将#id#转成我们传递的内容。
但是我最近碰到一个奇怪的问题。我在批量删除或修改的时候,居然SQL失效了。
SQL如下:
sql 代码
- update user set flag=#flag# where id in (#id#)
- delete from user where id in (#id#)
传递的id为1,2,3。但是数据却没有任何的修改。
后来查找了半天,原来原因就是这个#的问题。因为iBATIS默认会把“#”中间的变量作为字符串来处理。这样,就会出现这样的SQL
sql 代码
- update user set flag='1' where id in ('1,2,3')
- delete from user where id in ('1,2,3')
这样的SQL数据库当然是不会执行的。那我们只有绕开iBATIS了吗?
其实不用,iBATIS其实还提供了另外一种方式,那就是使用$来传递值。你使用$将你的变量括起来,iBATIS不会给这个变量做任何的处理,直接生成你要的SQL
SQL代码
如下面代码从后台传入的参数为String="1,2,3,4";但是通过$value$获取到的是1,2,3,4
<delete id="deleteEntities" parameterType="java.lang.String">DELETE FROM INFO_TERMINALPRIVILEGES WHERE ID in ($value$)</delete>
- update user set flag=$flag$ where id in ($id$)
- update user set flag=1 where id in (1,2,3)
- delete from user where id in ($id$)
- delete from user where id in (1,2,3)
还可以用ibatis的iterate解决:
SQL:
- ﹤select id="test" parameterClass="java.util.List" resultClass="test.Roadline"﹥
- select * from SYS_ROAD_LINE_INFO where ROAD_LINE_NO in
- ﹤iterate open="(" close=")" conjunction=","﹥
- #value[]#
- ﹤/iterate﹥
- ﹤/select﹥
- List list = new ArrayList();
- list.add("aaa");
- list.add("bbb");
- List rsList = sqlMap.queryForList("roadline.test", list);
生成的SQL:
- select * from SYS_ROAD_LINE_INFO where ROAD_LINE_NO in (?,?)
$中间的变量就是直接替换成值的
#会根据变量的类型来进行替换
比如articleTitle的类型是string, 值是"标题"的时候
$articleTitle$ = 标题
#articleTitle# = '标题'
如果一个字段的名字不规范带有#,那么在﹤select ...﹥ select name# from reader where id=#id#...﹤/select﹥语句中会报错,我看过有人问过这个问题,说是name####但是还是不能解决无法对带#的字段的查询。 解决办法肯定是有的。比如,你可以把这个字段当做一个参数来传递给ibatis。然后用$$把这个变量括起来。
转载于:https://www.cnblogs.com/a8457013/p/7839275.html
iBATIS使用$和#的一些理解相关推荐
- iBatis SqlMap的配置总结
核心提示:SqlMap的配置是iBatis中应用的核心.这部分任务占据了iBatis开发的70的工作量. 1.命名空间: sqlMap namespace=Account,在此空间外要引用此空间的元素 ...
- IBatis.Net学习笔记九--动态选择Dao的设计分析
在IBatis.Net中可以通过配置文件动态选择数据库.动态选择Dao对象. Dao对象也就是操作数据库的类,通过配置文件我们可以选择DataMapper的方式.Ado的方式.NHibernet的方式 ...
- 【转】ibatis的简介与初步搭建应用
[转]ibatis的简介与初步搭建应用 一.ibatis的简介 ibatis是什么东西就不介绍了,自己去找谷老师. 这里讲下自己的使用体会.之前自己学过Hibernate,是看尚学堂的视频教学的,看完 ...
- Mybatis:颠覆你心中对事务的理解
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:祖大俊 my.oschina.net/zudajun/blo ...
- 理解什么是MyBatis?
2019独角兽企业重金招聘Python工程师标准>>> 理解什么是MyBatis? MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache s ...
- ibatis动态语句中的prepend
关于ibatis动态sql的prepend的属性,我们需要理解一下几点 select * from student <dynamic prepend="where"> ...
- Ibatis学习随笔
Ibatis学习随笔 < person > < id > 1 </ id > < firstName > Clinton </ ...
- iBATIS In Action:使用映射语句(一)
在前面的章节中,我们了解了iBATIS的sqlMap.config文件的配置,还给出了一个映射语句文件的示例.现在您应该具备了一定基础,可以进一步完善我们的数据访问层了. 本章和下一章(执行非查询语句 ...
- 手把手教你搭建微信点餐系统环境(springmvc+ibatis+maven+git)
2019独角兽企业重金招聘Python工程师标准>>> 1.微信点餐系统简介 首先该系统的设计主要是用来接收移动端IOS/Android的请求, 对于订单将统一由后台进行处理, 系统 ...
- mysql的trim动态标签_Mybatis之trim标签的理解
转自:https://www.cnblogs.com/westward/p/6706570.html 最近在学Mybatis,在学到动态sql的trim标签时,很迷惑.不知所以然.看别人的博客和论坛里 ...
最新文章
- android 手机推荐,2018年安卓机皇推荐,这几款是真的不错
- 矩阵专职_新的篇章开始了-我将以专职技术作家的身份加入RunCloud
- Gentoo - X11 forwarding request failed on channel 0
- Linux下进程的建立
- 计算机弹奏两只老虎爱跳舞,原神风物之诗琴乐谱大全
- 方法级权限控制-基于表达式操作
- [HDOJ5327]Olympiad
- a href='NewsShow.aspx?id=%#Eval(id) %' class=red%#Eval(title) %/a页面传值
- 封装常用的js(base.js)——【05】自定义弹出框.封装水平垂直居中center(),和resize() ....
- 计算机绘图国标规定,机械制图教程(1.1)国家标准关于制图的一般规定
- h5调用手机相机和录音机_html5 调用手机摄像头以及录音的方法
- Tara APP隐私政策
- Python爬取足球网站赛况
- 手机端网页技术--使自己做的asp.net网页适应手机浏览
- 常用的java工具类
- django Using the URLconf defined in test02.urls, Django tried these URL patterns, in this order:
- 【Jetpack篇】LiveData取代EventBus,flutter安装
- 2022年终总结:给心一个立住的理由【失败后自我恢复、压力中自我拯救】
- 基于Kaldi的语音识别
- Vundle ,Vim Bundle
热门文章
- python3.8-运行jupyter 报raise NotImplementedError
- Windows下VB6.0开发——关于String类型数据的思考
- python 实例对象 浅拷贝_Python 对象的深拷贝与浅拷贝 -- (转)
- 【数据库原理实验(openGauss)】交互式SQL语句
- clickhouse HDFS引擎
- 基于Opencv的手写字识别
- 实现左侧固定宽度, 右侧自适应的两栏布局常见方法
- 招聘网站数百万条敏感数据泄露,简历、×××扫描件统统曝光
- CentOS_6.x安装VNC_Server
- 带checkbox的ListView实现(一)——数据与渲染完全分离的传统实现方式