我们在使用iBATIS时会经常用到#这个符号。

比如:

sql 代码

  1. select * from member where id =#id#

然后,我们会在程序中给id这个变量传递一个值,iBATIS会自动将#id#转成我们传递的内容。

但是我最近碰到一个奇怪的问题。我在批量删除或修改的时候,居然SQL失效了。

SQL如下:

sql 代码

  1. update user set flag=#flag# where id in (#id#)
  2. delete from user where id in (#id#)

传递的id为1,2,3。但是数据却没有任何的修改。

后来查找了半天,原来原因就是这个#的问题。因为iBATIS默认会把“#”中间的变量作为字符串来处理。这样,就会出现这样的SQL

sql 代码

  1. update user set flag='1' where id in ('1,2,3')
  2. 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>

  1. update user set flag=$flag$ where id in ($id$)
  2. update user set flag=1  where id in (1,2,3)
  3. delete from user where id in ($id$)
  4. delete from user where id in (1,2,3)

还可以用ibatis的iterate解决:

SQL:

  1. ﹤select id="test" parameterClass="java.util.List" resultClass="test.Roadline"﹥
  2. select * from SYS_ROAD_LINE_INFO where ROAD_LINE_NO in
  3. ﹤iterate open="(" close=")" conjunction=","﹥
  4. #value[]#
  5. ﹤/iterate﹥
  6. ﹤/select﹥
  1. List list = new ArrayList();
  2. list.add("aaa");
  3. list.add("bbb");
  4. List rsList = sqlMap.queryForList("roadline.test", list);

生成的SQL:

  1. 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使用$和#的一些理解相关推荐

  1. iBatis SqlMap的配置总结

    核心提示:SqlMap的配置是iBatis中应用的核心.这部分任务占据了iBatis开发的70的工作量. 1.命名空间: sqlMap namespace=Account,在此空间外要引用此空间的元素 ...

  2. IBatis.Net学习笔记九--动态选择Dao的设计分析

    在IBatis.Net中可以通过配置文件动态选择数据库.动态选择Dao对象. Dao对象也就是操作数据库的类,通过配置文件我们可以选择DataMapper的方式.Ado的方式.NHibernet的方式 ...

  3. 【转】ibatis的简介与初步搭建应用

    [转]ibatis的简介与初步搭建应用 一.ibatis的简介 ibatis是什么东西就不介绍了,自己去找谷老师. 这里讲下自己的使用体会.之前自己学过Hibernate,是看尚学堂的视频教学的,看完 ...

  4. Mybatis:颠覆你心中对事务的理解

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:祖大俊 my.oschina.net/zudajun/blo ...

  5. 理解什么是MyBatis?

    2019独角兽企业重金招聘Python工程师标准>>> 理解什么是MyBatis? MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache s ...

  6. ibatis动态语句中的prepend

    关于ibatis动态sql的prepend的属性,我们需要理解一下几点 select * from student <dynamic prepend="where"> ...

  7. Ibatis学习随笔

    Ibatis学习随笔 < person >       < id > 1 </ id >     < firstName > Clinton </ ...

  8. iBATIS In Action:使用映射语句(一)

    在前面的章节中,我们了解了iBATIS的sqlMap.config文件的配置,还给出了一个映射语句文件的示例.现在您应该具备了一定基础,可以进一步完善我们的数据访问层了. 本章和下一章(执行非查询语句 ...

  9. 手把手教你搭建微信点餐系统环境(springmvc+ibatis+maven+git)

    2019独角兽企业重金招聘Python工程师标准>>> 1.微信点餐系统简介 首先该系统的设计主要是用来接收移动端IOS/Android的请求, 对于订单将统一由后台进行处理, 系统 ...

  10. mysql的trim动态标签_Mybatis之trim标签的理解

    转自:https://www.cnblogs.com/westward/p/6706570.html 最近在学Mybatis,在学到动态sql的trim标签时,很迷惑.不知所以然.看别人的博客和论坛里 ...

最新文章

  1. android 手机推荐,2018年安卓机皇推荐,这几款是真的不错
  2. 矩阵专职_新的篇章开始了-我将以专职技术作家的身份加入RunCloud
  3. Gentoo - X11 forwarding request failed on channel 0
  4. Linux下进程的建立
  5. 计算机弹奏两只老虎爱跳舞,原神风物之诗琴乐谱大全
  6. 方法级权限控制-基于表达式操作
  7. [HDOJ5327]Olympiad
  8. a href='NewsShow.aspx?id=%#Eval(id) %' class=red%#Eval(title) %/a页面传值
  9. 封装常用的js(base.js)——【05】自定义弹出框.封装水平垂直居中center(),和resize() ....
  10. 计算机绘图国标规定,机械制图教程(1.1)国家标准关于制图的一般规定
  11. h5调用手机相机和录音机_html5 调用手机摄像头以及录音的方法
  12. Tara APP隐私政策
  13. Python爬取足球网站赛况
  14. 手机端网页技术--使自己做的asp.net网页适应手机浏览
  15. 常用的java工具类
  16. django Using the URLconf defined in test02.urls, Django tried these URL patterns, in this order:
  17. 【Jetpack篇】LiveData取代EventBus,flutter安装
  18. 2022年终总结:给心一个立住的理由【失败后自我恢复、压力中自我拯救】
  19. 基于Kaldi的语音识别
  20. Vundle ,Vim Bundle

热门文章

  1. python3.8-运行jupyter 报raise NotImplementedError
  2. Windows下VB6.0开发——关于String类型数据的思考
  3. python 实例对象 浅拷贝_Python 对象的深拷贝与浅拷贝 -- (转)
  4. 【数据库原理实验(openGauss)】交互式SQL语句
  5. clickhouse HDFS引擎
  6. 基于Opencv的手写字识别
  7. 实现左侧固定宽度, 右侧自适应的两栏布局常见方法
  8. 招聘网站数百万条敏感数据泄露,简历、×××扫描件统统曝光
  9. CentOS_6.x安装VNC_Server
  10. 带checkbox的ListView实现(一)——数据与渲染完全分离的传统实现方式