浏览 23135 次
锁定老帖子 主题:iBatis中直接执行sql语句的方法
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-10-24
如果直接执行的话要考虑到 回滚 日志等 自己做不好管理 ,加上项目本身就使用了ibatis 就一直寻找ibatis 直接执行SQL的方法 之前有人 讨论过 http://www.iteye.com/post/134239 得出的结论是不能 昨天晚上翻了一下文档 试了一下 是可以的 文档见 http://ibatis.apache.org/docs/dotnet/datamapper/ch03s03.html 主要是sqlmap xml配置问题 <sqlMap namespace="ExecuteSql"> <typeAlias alias="exeSqlModel" type="org.****.model.system.ExeSqlModel"/> <statement id="exeSqlString" parameterClass="exeSqlModel"> $exeSqlSting$ </statement> </sqlMap> 其中statemnet 可以执行所有的功能 update insert delete其实也行 还有 procedure 也行 需要注意的是 要用$ 而不是# 具体的原因是 ibatis自己会在##中间的字符串中加入'' 昨天晚上就是这个问题搞了好久 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-10-24
干嘛不直接用她的<update/>或者<insert/>元素包含你想执行的SQL?
|
|
返回顶楼 | |
发表时间:2007-10-25
lz的意思,是不是利用同一个配置,进行update 和insert 和delete操作,输入的parameterClass又是固定的,基本上只能针对一张表进行操作,只是省下几行配置文件的问题。却从根本上改变了 SQL 语句本身,比仅仅简单地改变参数值严重得多。你与其这样,还不如直接用JDBC好了。
|
|
返回顶楼 | |
发表时间:2007-10-25
lz的意思主要就是用$$替代##的话,能跳过ibatis的参数类型解析和调整sql语句的过程,还有,parameterClass固定并不代表着就只能操作一张表,具体操作哪张表还是看具体的sql语句来的。
不过,这种方法确实是只能执行uid的操作,而且,这么做跟直接写jdbc有什么区别呢?是要使用ibatis的事务管理? |
|
返回顶楼 | |
发表时间:2007-11-28
这样不能执行ddl的语句!
|
|
返回顶楼 | |
发表时间:2007-12-04
LZ说了用iBatis的好处是不需要自己再实现事务管理,回滚和日志。
我现在在做的一个小功能是让用户(不懂SQL)在图形化生成SQL查询, 并展示出来。 我们的主体框架是Spring+iBatis, 如果直接用JDBC, 还需要考虑注册数据库一些琐碎的事情。 我现在的困难是如何取得返回数据, iBatis需要在写xml的时候就定义好对应的model, 或者字段的对应关系。但是我要做的是动态的产生SQL, 查询的项目也是动态的。 |
|
返回顶楼 | |
发表时间:2007-12-04
如果我没记错........
好像第一次用了之后 第2次再调用这个SQL 即使换了条件和字段 他还是会调用第一次的 或者报错........ 没试过.....不过以前看到有人写过... |
|
返回顶楼 | |
发表时间:2008-04-30
ddandyy 写道 如果我没记错........
好像第一次用了之后 第2次再调用这个SQL 即使换了条件和字段 他还是会调用第一次的 或者报错........ 没试过.....不过以前看到有人写过... 是不是真的有楼上描述的情况啊? |
|
返回顶楼 | |
发表时间:2008-05-01
ddandyy 写道 如果我没记错........
好像第一次用了之后 第2次再调用这个SQL 即使换了条件和字段 他还是会调用第一次的 或者报错........ 没试过.....不过以前看到有人写过... 引用 因为iBatis自己有 AutoResultMap的cache,尽管你传入的$tableName$不同,但是他总是
用第一个建立的AutoResultMap的cache去匹配以后的$tableName$当然有错误了 解决方法: 使用多个statment或者使用 remapResults="true" (为了效率他默认的是false) 楼主的做法在某些场合下确实有其意义,不过不推荐在全部使用这种做法,这种做法等于直接在代码中写sql。 |
|
返回顶楼 | |
发表时间:2008-05-26
楼主的意思应该是说sql语句是动态的(不仅仅是查询参数动态,有可能insert、select或是表名称都是可变的),然后将sql 语句传递给ibatis进行执行,但是又不想自己手写jdbc进行执行吧,呵呵
|
|
返回顶楼 | |