- 浏览: 1253841 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (399)
- 心情故事 (12)
- java (115)
- linux (55)
- 关系型数据库 (35)
- struts,jsf,spring (11)
- jdbc,hibernate,ibatis (11)
- jsp,jstl,c:tag,标签库 (2)
- ejb,webservice (1)
- tomcat,jboss,jetty,weblogic,websphere (15)
- java网络编程 (6)
- java线程 (0)
- js,jquery,json,xml,dom,html.regex (25)
- 设计模式 (6)
- BUG记录 (2)
- ant (2)
- jsp,servlet (4)
- swing (6)
- lucene+nutch (6)
- log4j (2)
- windows doc (2)
- ruby (1)
- ruby on rails (3)
- 操作系统网络 (18)
- apache 错误 (1)
- tomcat (10)
- jboss (9)
- jetty (9)
- weblogic (9)
- websphere (10)
- apache (2)
- AIX的iostat命令查看系统磁盘的使用情况 (1)
- oracle 统计一个表格有多少列 (1)
- Exception in thread "main" java.security.KeyStoreException: Windows-MY not found (1)
- jsp (1)
- jstl (1)
- c:tag (1)
- 标签库 (1)
- struts (1)
- jsf (1)
- spring (2)
- oracle,sqlplus (2)
- sqlplus (2)
- show errors (1)
- proc (1)
- function (1)
- ORA-06544: PL/SQL: internal error (1)
- arguments: [55916] (1)
- [] (7)
- 终端身份实施文档 (1)
- 重装系统之后飞鸽传书只能看到自己 (1)
- vsftp "上传 553 Could not create file" (1)
- startWebLogic.sh启动失败,提示Error initializing Embedded LDAP Server (1)
- java agent 注册为 windows 服务 (1)
- centos (1)
- svn (1)
- apr (1)
- apr-util (1)
- activemq (2)
- oracle (5)
- mysql (3)
- nosql (3)
- NSIS (1)
- windows wmic (1)
- c 指针 (1)
- c c++ (0)
- jmeter (0)
- 性能测试 (0)
- linux,备份 (2)
- C++ ,Virtual (1)
- windows dos (1)
- android (2)
- 大数据,云计算 (1)
- JVM垃圾收集 (1)
- jdbc (2)
- invoke (1)
- hibernate (1)
- ibatis (1)
- 个人开源项目源码收藏 (1)
- 批处理 (1)
- Mongodb mapreduce (8)
- kettle (1)
- Mongodb capped (1)
- mongodb gridfs (1)
- Mongodb 入门基础知识 (1)
- mongodb (8)
- hadoop2.5.1 (1)
- hadoop (4)
- eclipse (1)
- hdfs fs (1)
- elipse hadoop plugin (1)
- PHP相关知识 (1)
- js (1)
- jquery (1)
- json (1)
- xml (1)
- dom (1)
- html.regex (1)
- 网络知识 (1)
- nginx (1)
- docker (1)
- 测试 (1)
- nodejs (1)
- iptables (1)
- linux gitlab (1)
最新评论
-
July01:
最近了解到一款StratoIO打印控件,功能如下:1、Html ...
web页面调用window.print()函数实现打印的功能 -
hxdtech:
非常感谢!
我在学习ibatis时的培训ppt -
zmwxiaoming:
what 能连数据库不错
SOLR的学习整理 -
springdata_springmvc:
java程序语言学习教程 地址http://www.zuida ...
java获取当前操作系统的信息 -
huanzei:
整理的不错,
oracle lpad函数
1环境:ibatis2.3,spring2.5.
2最近项目里用 spring2.5+ibatis2.3做开发。ibatis主要是用它的动态sql.用ibatis有一段时间了。准备给自己备个案,把ibatis2.3使用过程中需要注意的地方给记录下来。并且分享给大家。
3下面写几点自己遇到过的要注意的问题。
A:平常的sql语句比如select * from table where username='admin' and password='admin'(这是个容易被注入的语句)在where后面的第一个条件是不需要and的,从第二个查询条件起才需要and.但在配置ibatis的动态sql时一定要在第一个条件前加上and,否则会报错。代码如下:
<select id="Recycle_getPageList"
parameterClass
="com.hzmc.common.domain.Page"
resultMap
="recycle_codeList">
select * from (select rownum rownum_,row_.* from (select * from
MC$$ASSET_RECYCLE_CODE
<dynamic prepend="WHERE">
<isNotEmpty prepend="AND"
property="searchParameters.owner">//此处第一个条件要加and
upper(owner) like upper('%$searchParameters.owner$%')
</isNotEmpty>
<isNotEmpty prepend="AND"
property="searchParameters.otype">
upper(otype) like upper('%$searchParameters.otype$%')
</isNotEmpty>
</dynamic>
)row_)
<isEqual prepend="WHERE" property="paged" compareValue="true">
rownum_ between #startNumber# and #endNumber# order by OPTIME desc
</isEqual>
</select>
B :ibatis在调用过程或函数的过程中,大括号不能分成两行。代码如下:
<procedure id="auditselect_getById" parameterMap="AuditSelectshowDetails">
{? = call tlgadmin.GetSingleDetailrows(?)}
</procedure>
假如改成:
<procedure id="auditselect_getById" parameterMap="AuditSelectshowDetails">
{
? = call tlgadmin.GetSingleDetailrows(?)
}
</procedure>
这样会报错。
C关于sqlmap-config.xml文件的问题:假如一个配置文件要引用另一个配置文件,那么被应用的配置文件要放在引用配置文件的前面。否则,ibatis会报找不到错误(这应该是ibatis2.3的一个bug).
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMapConfig
PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN"
"http://www.ibatis.com/dtd/sql-map-config-2.dtd
">
<sqlMapConfig>
<settings cacheModelsEnabled="true" lazyLoadingEnabled="true"
enhancementEnabled="true" errorTracingEnabled="true"
useStatementNamespaces="false" maxRequests="30" maxSessions="20"
maxTransactions="10" />
1 <sqlMap
resource="com/hzmc/capaa/domain/persistence/trustuser/AdminUser.xml" />
2 <sqlMap
resource="com/hzmc/capaa/domain/persistence/verifyfactor/IpAddress.xml" />
3<sqlMap
resource="com/hzmc/capaa/domain/persistence/verifyfactor/OsUser.xml" />
</sqlMapConfig>
如上:假如1要应用2中的配置,那么这样写就会报错,必须方2在1的前面。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMapConfig
PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN"
"
http://www.ibatis.com/dtd/sql-map-config-2.dtd
">
<sqlMapConfig>
<settings cacheModelsEnabled="true" lazyLoadingEnabled="true"
enhancementEnabled="true" errorTracingEnabled="true"
useStatementNamespaces="false" maxRequests="30" maxSessions="20"
maxTransactions="10" />
2 <sqlMap
resource="com/hzmc/capaa/domain/persistence/verifyfactor/IpAddress.xml" />
1 <sqlMap
resource="com/hzmc/capaa/domain/persistence/trustuser/AdminUser.xml" />
3<sqlMap
resource="com/hzmc/capaa/domain/persistence/verifyfactor/OsUser.xml" />
</sqlMapConfig>
这样ibatis才能找到。
先写到这吧。
评论
我也想过这个方法,但是还没有测试,想把他作为后路,实在不行了再弄,谢谢你哈
我就是不相信iBatis的开发人员没有考虑过这样的情况。
remapResults="true"的加入,就是考虑了动态过程的情况呀,希望只是我没发现怎么弄。
这样我需要在sqlMap里配置一个动态的存储过程——就是过程名和参数都是由外面传进来的,如下。
<procedure id="ODSLog.callProcedure" parameterClass="java.lang.String">
{call $procedureName$}
</procedure>
现在的问题是,过程能成功调用,但是当过程执行完毕以后就会报错,如下。请大家帮我看看。
Exception in thread "pool-2-thread-1" org.springframework.jdbc.UncategorizedSQLException: SqlMapClient operation; uncategorized SQLException for SQL []; SQL state [null]; error code [0];
--- The error occurred in sqlmap/extract/ODSLogSqlMap.xml.
--- The error occurred while applying a parameter map.
--- Check the ODSLog.callProcedure-InlineParameterMap.
--- Check the output parameters.
--- Cause: java.lang.ArrayIndexOutOfBoundsException: 0; nested exception is com.ibatis.common.jdbc.exception.NestedSQLException:
--- The error occurred in sqlmap/extract/ODSLogSqlMap.xml.
--- The error occurred while applying a parameter map.
--- Check the ODSLog.callProcedure-InlineParameterMap.
--- Check the output parameters.
--- Cause: java.lang.ArrayIndexOutOfBoundsException: 0
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:83)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:80)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:80)
at org.springframework.orm.ibatis.SqlMapClientTemplate.execute(SqlMapClientTemplate.java:212)
at org.springframework.orm.ibatis.SqlMapClientTemplate.queryForObject(SqlMapClientTemplate.java:271)
at com.delochi.etlmonitor.extract.dao.impl.ODSLogDAO.callProcedure(ODSLogDAO.java:43)
at com.delochi.etlmonitor.extract.service.impl.ODSLogService.callProcedure(ODSLogService.java:75)
at com.delochi.etlmonitor.extract.service.impl.ODSLogService.callProcedure(ODSLogService.java:1)
at com.delochi.etlmonitor.task.ExtractExecuteTask.run(ExtractExecuteTask.java:39)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:619)
Caused by: com.ibatis.common.jdbc.exception.NestedSQLException:
--- The error occurred in sqlmap/extract/ODSLogSqlMap.xml.
--- The error occurred while applying a parameter map.
--- Check the ODSLog.callProcedure-InlineParameterMap.
--- Check the output parameters.
--- Cause: java.lang.ArrayIndexOutOfBoundsException: 0
at com.ibatis.sqlmap.engine.mapping.statement.MappedStatement.executeQueryWithCallback(MappedStatement.java:204)
at com.ibatis.sqlmap.engine.mapping.statement.MappedStatement.executeQueryForObject(MappedStatement.java:120)
at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForObject(SqlMapExecutorDelegate.java:518)
at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForObject(SqlMapExecutorDelegate.java:493)
at com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.queryForObject(SqlMapSessionImpl.java:106)
at org.springframework.orm.ibatis.SqlMapClientTemplate$1.doInSqlMapClient(SqlMapClientTemplate.java:273)
at org.springframework.orm.ibatis.SqlMapClientTemplate.execute(SqlMapClientTemplate.java:209)
... 8 more
Caused by: java.lang.ArrayIndexOutOfBoundsException: 0
at com.ibatis.sqlmap.engine.exchange.PrimitiveDataExchange.setData(PrimitiveDataExchange.java:51)
at com.ibatis.sqlmap.engine.mapping.parameter.ParameterMap.refreshParameterObjectValues(ParameterMap.java:141)
at com.ibatis.sqlmap.engine.mapping.statement.ProcedureStatement.postProcessParameterObject(ProcedureStatement.java:26)
at com.ibatis.sqlmap.engine.mapping.statement.MappedStatement.executeQueryWithCallback(MappedStatement.java:193)
... 14 more
另外ibatis的配置xml中有个很恶心的bug,,,中文注释<!--xxxxxxx-->如果是奇数个字节,会报xml解析异常
邮箱:jun.li_leo@yahoo.com.cn
这个文章里面有的:http://chenhua-1984.iteye.com/blog/368823
邮箱:jun.li_leo@yahoo.com.cn
例如,map.get("colum1"),有时候就得到类型为byte[],,,郁闷 ,不知大家遇到过这种情况没?
1 用ibatis自带的log打出来的sql文太难看,全部是一行的,调起来很麻烦。不知道ibatis能不能改一下。
一行的难道不好么?我觉一行反而更加方便。。。。
如果不喜欢一行的,用记事本自动换行就OK了
当遇到1000多行的sql文时,就知道写成一行是多么痛苦了
1 用ibatis自带的log打出来的sql文太难看,全部是一行的,调起来很麻烦。不知道ibatis能不能改一下。
一行的难道不好么?我觉一行反而更加方便。。。。
如果不喜欢一行的,用记事本自动换行就OK了
1 用ibatis自带的log打出来的sql文太难看,全部是一行的,调起来很麻烦。不知道ibatis能不能改一下。
发表评论
-
struts2+spring2.6+hibernate3.4
2009-11-09 12:23 2019最近自己华了几天的时间,搭了一个ssh的架构,现在写 ... -
ibatis 对连接池的支持
2009-07-21 15:53 4225ibatis 对连接池的支持有3种,SIMPLE.DB ... -
我在学习ibatis时的培训ppt
2009-04-15 09:40 2782我在学习ibatis时的PPT,现在共享出来给大家,希望对需要 ... -
ibatis调用oracle的动态sql,sql大小不能超过32K
2009-04-03 10:22 23601环境:oracle10g,spring2.5,ibatis2 ... -
ibatis调用oracle的函数,存储过程的方法 IN 和OUT /游标(第五章)
2009-04-02 15:48 21511对于全部是in 类 ... -
ibatis的DML的写法(五,六,八章综合)
2009-03-20 14:58 2152<?xml version="1.0&q ... -
ibatis的sqlMap配置文件(包含第三章)
2009-03-20 14:40 2170(1):sqlMapConfig.xml文件是Ibatis ... -
ibatis union oracle(第四章bean)
2009-01-07 10:31 2223ibatis中使用联合查询,com.hzmc. ... -
ibatis的优点和好处(包含一二章节)
2008-12-10 11:15 1969Ibatis的优势。 Ibatis是一个混合性的解决方案,吸 ... -
ibatis jdbcType Boolean oracle(第五章)
2008-12-10 11:11 3802最近在用spring+ibatis+oracle开发一个安全产 ...
相关推荐
iBatis动态SQL标签用法 iBatis是Java持久层框架,提供了动态SQL标签来实现动态查询。动态SQL标签可以根据不同的条件生成不同的SQL语句,从而提高查询效率和灵活性。 动态SQL片段 iBatis提供了动态SQL片段的功能,...
### iBatis中的动态SQL语句详解 #### 引言 在进行数据库操作时,我们经常需要根据不同的条件构建不同的SQL语句。这种需求在实际开发中极为常见,尤其是在处理复杂的查询逻辑时。iBatis(现在通常被称为MyBatis)...
转ibatis动态sql - phoebus0501 - 博客园.mht
5. **动态SQL**:讲解如何使用iBATIS的动态元素来构建灵活的SQL语句,以应对复杂的查询需求。 6. **API使用**:介绍SqlSession、SqlSessionFactory、Executor等关键接口和类的使用方法。 7. **缓存机制**:解释...
在深入探讨iBATIS-SqlMaps2的具体用法之前,需要先了解一些基础知识和准备工作。 ##### 1. SQLMap概述 - **适用范围**:SQLMap可以有效地应用于设计不佳的数据库模型或对象模型。然而,在设计数据库和对象模型时,...
要启用Ibatis的SQL日志记录,你需要在Ibatis的配置文件(通常为`mybatis-config.xml`)中添加以下设置: ```xml ``` 这里,`logImpl`设置指定了日志实现的类型,我们将其设置为"LOG4J",表示使用Log4j进行...
此外,教程还会涵盖动态SQL,这是IBATIS的一大亮点,允许在运行时构建和修改SQL语句,提高了代码的复用性和可维护性。 在使用IBATIS的过程中,你可能会遇到参数映射和结果映射的问题。《ibatis-sqlmaps-2_cn》将...
5. **动态SQL**:iBATIS的一大亮点是其强大的动态SQL能力,可以实现条件查询、循环拼接SQL等复杂逻辑,无需编写大量Java代码。 6. **Mapper接口**:iBATIS 2.3版本引入了Mapper接口,将XML配置与Java代码更好地结合...
在使用iBatis(现为MyBatis)作为持久层框架进行开发时,有时我们需要调试SQL语句,以便查看执行的SQL、优化性能或者解决查询问题。本文将详细讲解如何在iBatis日志信息中打印SQL语句,以便更好地理解和优化数据库...
iBATIS-SqlMaps-2-Tutorial_cniBATIS-SqlMaps-2-Tutorial_cn.pdf.pdfiBATIS-SqlMaps-2-Tutorial_cn.pdfiBATIS-SqlMaps-2-Tutorial_cn.pdf
[iBATIS]sql转换工具 简单哦~ 项目组自己写的哦~分享给大家了
【标题】"webwork+ibatis+sqlserver2000"所代表的是一个基于WebWork框架、iBATIS持久层框架以及SQL Server 2000数据库的完整应用程序实例。这个组合在早期的Java Web开发中较为常见,用于构建企业级应用。 ...
标题与描述概述的知识点主要集中在iBATIS框架的SQL映射技术上,特别是针对不同类型的输入参数如何在iBATIS中构建SQL语句。以下是对这些知识点的详细展开: ### iBATIS SQL映射技术概览 iBATIS是早期流行的Java持久...
根据MyBatis或iBatis的SQLMapper文件解析生成数据库表,通常是指通过解析MyBatis或iBatis的SQLMapper文件中的SQL语句,然后根据这些SQL语句来生成对应的数据库表结构。这样的需求可能源于需要将已有的SQLMapper文件...
标题 "ibatis打印sql" 涉及到的是在使用iBATIS(一个轻量级的持久层框架)时如何调试和查看SQL语句的方法。iBATIS允许开发者编写SQL语句并将其与Java代码集成,以实现灵活的数据访问。在开发过程中,为了调试和优化...
总的来说,iBATIS在数据库操作上提供了更高的灵活性和控制权,适合那些需要对SQL有精细控制或需要避免框架过度自动化带来的复杂性的项目。通过合理设计和使用,iBATIS可以成为优化数据访问层,提高开发效率的有效...
通过java程序查看ibatis配置文件中的sql语句(注:无法查看变量值)
为了提高SQL语句的灵活性,iBATIS-SqlMaps还支持动态SQL功能,允许在运行时构建SQL语句。主要包括以下元素: - **二元条件元素**:根据条件选择性地包含SQL片段。 - **一元条件元素**:用于控制SQL片段的整体开关。...