`
Brooke
  • 浏览: 1182045 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

ibatis里关于$ and # 一些理解(收集)

阅读更多
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资料ibatai sql map iBATIS使用$和#的一些理解

    在使用iBATIS(现已被MyBatis取代)进行数据库操作时,我们常常需要传递参数到SQL语句中。在iBATIS中,有两种主要的方式来处理这些参数:使用`$`和`#`。这两种方式在不同的场景下有不同的效果。 首先,让我们来看看...

    ibatis中 $ 于 # 的 区别

    ### ibatis中 $ 与 # 的区别 在ibatis(现称为MyBatis)框架中,$ 和 # 是两种不同的动态SQL元素标记,用于处理参数传递的问题。它们各自有着独特的功能和应用场景,对于理解这两者的差异是十分重要的,因为这会...

    ibatis中输入输出各种类型的参数分析及#与$区别

    ### ibatis中输入输出各种类型的参数分析及#与$区别 #### iBatis简介与特点 ...通过对参数类型、`#`与`$`的区别以及`namespace`和`resultMap`的理解,可以帮助开发者更好地利用iBatis框架构建高效稳定的数据库访问层。

    ibatis sql语句对条件中特殊字符% # 处理

    ### ibatis SQL语句对条件中特殊字符% # 处理 在开发过程中,经常会遇到SQL查询时需要处理字符串中的特殊字符的情况。特别是在使用类似`LIKE`这样的操作符时,如果用户输入的数据中含有`%`、`_`或`#`等特殊字符,...

    iBatis文档\ibatis.doc

    iBatis 是一款轻量级的Java持久层框架,它主要负责将数据库操作与业务逻辑解耦,使得开发者可以更加专注于SQL和业务代码的编写。本文档将详细讲解iBatis的核心概念、快速入门以及高级特性。 ### iBatis 快速启动 #...

    J2EE学习 Ibatis开发资料共享 Ibatis开发资料 Ibatis学习框架 Ibatis开发概要

    ### J2EE学习:Ibatis开发资料概要 #### 一、Ibatis简介与特点 Ibatis是一款半自动化的ORM(Object ...通过对Ibatis的学习和实践,开发者不仅可以提高数据库操作的效率,还能更好地理解和掌握ORM技术的本质。

    ibatis基础知识详解

    **Ibatis基础知识详解** Ibatis,全称MyBatis,是一个优秀的开源持久层框架,它支持定制化SQL、存储过程以及高级映射。在Java应用中,Ibatis可以帮助开发者将数据库操作与业务逻辑分离,从而简化开发工作,提高代码...

    ibatis开发指南 经典教材

    《ibatis开发指南》经典教材深入讲解了ibatis框架的核心概念和高级应用,为开发者提供了全面的指导。ibatis,作为一款“半自动化”的对象关系映射(Object-Relational Mapping,简称ORM)工具,其设计理念与传统的...

    Ibatis中文版教程

    iBatis中文版教程:深入理解与应用 iBatis是一个开源的数据持久层框架,它在Java开发领域中占有重要地位,尤其对于那些倾向于手动编写SQL语句而非使用ORM(对象关系映射)自动生成SQL的开发者来说。iBatis与...

    Spring对IBatis的整合

    通过对Spring与IBatis整合的理解和实践,我们可以看到Spring为IBatis提供了非常全面的支持。这种整合不仅可以简化代码,还能提高应用程序的性能和稳定性。通过本章节的学习,开发者应该能够掌握如何使用Spring来有效...

    Ibatis3手册 Ibatis3参考手册

    本篇文章基于“Ibatis3手册 Ibatis3参考手册”的标题及描述,深入解析Ibatis3的核心概念、架构特点以及如何进行实际操作,旨在帮助读者全面理解Ibatis3的工作原理与应用场景。 ### 一、Ibatis3简介 Ibatis3是一款...

    Spring+ibatis 保留ibatis事务的配置

    ibatis配置文件中,可以看到关于ibatis事务管理器的配置。这里设置事务管理器类型为JDBC,表示ibatis将直接使用底层的JDBC连接进行事务控制,而不是使用Spring提供的事务管理器。 ```xml ``` ...

    ibatis总结 ibatis ibatis ibatis ibatis

    Ibatis 是一款轻量级的Java持久层框架,它允许开发者将SQL语句与Java代码分离,从而使得数据库访问更加灵活、易于维护。本篇文章将深入探讨Ibatis的核心概念、最佳实践以及与其他框架如Struts和Spring的整合。 1. ...

    ibatis教程 输入参数详解

    部分内容:这段部分提供了ibatis用户指南的警告,关于从文档复制代码的问题,以及ibatis的概述、如何开始使用ibatis、构建SqlSessionFactory的方法(包括通过XML和不使用XML的方式)、获取SqlSession的过程、探索...

    iBatis实战and源代码.zip

    《iBatis实战and源代码.zip》这个压缩包包含了关于iBatis框架的实战经验和源代码,对于深入了解和学习iBatis有着极大的帮助。iBatis是一个优秀的持久层框架,它允许开发者将SQL语句与Java代码分离,提高了开发效率和...

    Ibatis开发实例

    ### Ibatis开发实例详解 #### 一、Ibatis简介与背景 Ibatis 是一个由 Clinton Begin 在 2001 年发起的开源项目,其名称来源于“internet”和“abatis”的...这对于理解和学习 Ibatis 的使用方法具有重要的参考价值。

    ibatis开发过程取值问题

    在IT行业中,Ibatis是一个非常流行的Java持久层框架,它为开发者提供了灵活的SQL映射功能,使得数据库操作与业务逻辑解耦合。本篇文章将深入探讨Ibatis在开发过程中遇到的取值问题,以及“##”符号在其中的作用。 ...

    ibatis and和or联合查询 .doc

    ### ibatis and和or联合查询知识点 #### 一、ibatis简介 ibatis是一个支持普通SQL查询、存储过程以及高级映射的优秀开源数据访问框架。ibatis消除了几乎所有的JDBC对象操作,提供了一个简单的基本API,它通过XML或...

    操作数据库 iBATIS查询

    ### 操作数据库iBATIS查询详解 #### 一、iBATIS中的LIKE查询技巧 iBATIS是一款优秀的Java持久层框架,它简化了基于SQL的程序编写,避免了程序员手动处理结果集和手工编写SQL语句。在进行数据库查询时,LIKE查询是...

    ibatis-in-action

    根据提供的信息,我们可以总结出以下关于“ibatis-in-action”的相关知识点: ### 一、ibatis简介 #### 1.1 iBATIS哲学 - **核心理念**:iBATIS的核心理念是提供一种轻量级的数据访问框架,使得开发者能够更高效地...

Global site tag (gtag.js) - Google Analytics