iBATIS使用$和#的一些理解
我们在使用ibatis时会经常用到#这个符号。
比如:
sql 代码
select * from member where id =#id#
[/pre]
然后,我们会在程序中给id这个变量传递一个值,ibatis会自动将#id#转成我们传递的内容。
但是我最近碰到一个奇怪的问题。我在批量删除或修改的时候,居然sql失效了。
sql如下:
sql 代码
update user set flag=#flag# where id in (#id#)
delete from user where id in (#id#)
[/pre]
传递的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')
[/pre]
这样的sql数据库当然是不会执行的。那我们只有绕开ibatis了吗?
其实不用,ibatis其实还提供了另外一种方式,那就是使用$来传递值。你使用$将你的变量括起来,ibatis不会给这个变量做任何的处理,直接生成你要的sql
sql代码
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)
[/pre]
还可以用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﹥
[/pre]
list list = new arraylist();
list.add("aaa");
list.add("bbb");
list rslist = sqlmap.queryforlist("roadline.test", list);
[/pre]
生成的sql:
select * from sys_road_line_info where road_line_no in (?,?)
[/pre]
$中间的变量就是直接替换成值的
#会根据变量的类型来进行替换
比如articletitle的类型是string, 值是"标题"的时候
$articletitle$ = 标题
#articletitle# = '标题'
如果一个字段的名字不规范带有#,那么在﹤select ...﹥ select name# from reader where id=#id#...﹤/select﹥语句中会报错,我看过有人问过这个问题,说是name####但是还是不能解决无法对带#的字段的查询。 解决办法肯定是有的。比如,你可以把这个字段当做一个参数来传递给ibatis。然后用$$把这个变量括起来。
本贴来自天极网群乐社区--http://q.yesky.com/group/review-18217235.html
分享到:
相关推荐
在使用iBATIS(现已被MyBatis取代)进行数据库操作时,我们常常需要传递参数到SQL语句中。在iBATIS中,有两种主要的方式来处理这些参数:使用`$`和`#`。这两种方式在不同的场景下有不同的效果。 首先,让我们来看看...
### ibatis中 $ 与 # 的区别 在ibatis(现称为MyBatis)框架中,$ 和 # 是两种不同的动态SQL元素标记,用于处理参数传递的问题。它们各自有着独特的功能和应用场景,对于理解这两者的差异是十分重要的,因为这会...
### ibatis中输入输出各种类型的参数分析及#与$区别 #### iBatis简介与特点 ...通过对参数类型、`#`与`$`的区别以及`namespace`和`resultMap`的理解,可以帮助开发者更好地利用iBatis框架构建高效稳定的数据库访问层。
### ibatis SQL语句对条件中特殊字符% # 处理 在开发过程中,经常会遇到SQL查询时需要处理字符串中的特殊字符的情况。特别是在使用类似`LIKE`这样的操作符时,如果用户输入的数据中含有`%`、`_`或`#`等特殊字符,...
iBatis 是一款轻量级的Java持久层框架,它主要负责将数据库操作与业务逻辑解耦,使得开发者可以更加专注于SQL和业务代码的编写。本文档将详细讲解iBatis的核心概念、快速入门以及高级特性。 ### iBatis 快速启动 #...
### J2EE学习:Ibatis开发资料概要 #### 一、Ibatis简介与特点 Ibatis是一款半自动化的ORM(Object ...通过对Ibatis的学习和实践,开发者不仅可以提高数据库操作的效率,还能更好地理解和掌握ORM技术的本质。
**Ibatis基础知识详解** Ibatis,全称MyBatis,是一个优秀的开源持久层框架,它支持定制化SQL、存储过程以及高级映射。在Java应用中,Ibatis可以帮助开发者将数据库操作与业务逻辑分离,从而简化开发工作,提高代码...
《ibatis开发指南》经典教材深入讲解了ibatis框架的核心概念和高级应用,为开发者提供了全面的指导。ibatis,作为一款“半自动化”的对象关系映射(Object-Relational Mapping,简称ORM)工具,其设计理念与传统的...
iBatis中文版教程:深入理解与应用 iBatis是一个开源的数据持久层框架,它在Java开发领域中占有重要地位,尤其对于那些倾向于手动编写SQL语句而非使用ORM(对象关系映射)自动生成SQL的开发者来说。iBatis与...
通过对Spring与IBatis整合的理解和实践,我们可以看到Spring为IBatis提供了非常全面的支持。这种整合不仅可以简化代码,还能提高应用程序的性能和稳定性。通过本章节的学习,开发者应该能够掌握如何使用Spring来有效...
本篇文章基于“Ibatis3手册 Ibatis3参考手册”的标题及描述,深入解析Ibatis3的核心概念、架构特点以及如何进行实际操作,旨在帮助读者全面理解Ibatis3的工作原理与应用场景。 ### 一、Ibatis3简介 Ibatis3是一款...
ibatis配置文件中,可以看到关于ibatis事务管理器的配置。这里设置事务管理器类型为JDBC,表示ibatis将直接使用底层的JDBC连接进行事务控制,而不是使用Spring提供的事务管理器。 ```xml ``` ...
Ibatis 是一款轻量级的Java持久层框架,它允许开发者将SQL语句与Java代码分离,从而使得数据库访问更加灵活、易于维护。本篇文章将深入探讨Ibatis的核心概念、最佳实践以及与其他框架如Struts和Spring的整合。 1. ...
部分内容:这段部分提供了ibatis用户指南的警告,关于从文档复制代码的问题,以及ibatis的概述、如何开始使用ibatis、构建SqlSessionFactory的方法(包括通过XML和不使用XML的方式)、获取SqlSession的过程、探索...
《iBatis实战and源代码.zip》这个压缩包包含了关于iBatis框架的实战经验和源代码,对于深入了解和学习iBatis有着极大的帮助。iBatis是一个优秀的持久层框架,它允许开发者将SQL语句与Java代码分离,提高了开发效率和...
### Ibatis开发实例详解 #### 一、Ibatis简介与背景 Ibatis 是一个由 Clinton Begin 在 2001 年发起的开源项目,其名称来源于“internet”和“abatis”的...这对于理解和学习 Ibatis 的使用方法具有重要的参考价值。
在IT行业中,Ibatis是一个非常流行的Java持久层框架,它为开发者提供了灵活的SQL映射功能,使得数据库操作与业务逻辑解耦合。本篇文章将深入探讨Ibatis在开发过程中遇到的取值问题,以及“##”符号在其中的作用。 ...
### ibatis and和or联合查询知识点 #### 一、ibatis简介 ibatis是一个支持普通SQL查询、存储过程以及高级映射的优秀开源数据访问框架。ibatis消除了几乎所有的JDBC对象操作,提供了一个简单的基本API,它通过XML或...
### 操作数据库iBATIS查询详解 #### 一、iBATIS中的LIKE查询技巧 iBATIS是一款优秀的Java持久层框架,它简化了基于SQL的程序编写,避免了程序员手动处理结果集和手工编写SQL语句。在进行数据库查询时,LIKE查询是...
根据提供的信息,我们可以总结出以下关于“ibatis-in-action”的相关知识点: ### 一、ibatis简介 #### 1.1 iBATIS哲学 - **核心理念**:iBATIS的核心理念是提供一种轻量级的数据访问框架,使得开发者能够更高效地...