`
fglbee
  • 浏览: 1587 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

ibatis3 因为ognl解析慢,导致性能下降

阅读更多
ibatis3的sql语句写在xml里,ibatis3使用了ognl解析器。
1:当sql里有多个<if test="a!= null"></if>时,大概有30个吧,明显感觉速度慢下
例子
  update a
<set>
<if test="a1!= null">a1=#{a1}</if>
<if test="a2!= null">a2=#{a2}</if>
<if test="a3!= null">a3=#{a3}</if>
<if test="a4!= null">a4=#{a4}</if>
<if test="a5!= null">a5=#{a5}</if>
<if test="a6!= null">a6=#{a6}</if>
<if test="a7!= null">a7=#{a7}</if>
<if test="a8!= null">a8=#{a8}</if>
<if test="a9!= null">a9=#{a9}</if>
<if test="a10!= null">a10=#{a10}</if>
<if test="a11!= null">a11=#{a11}</if>
<if test="a12!= null">a12=#{a12}</if>
<if test="a13!= null">a13=#{a13}</if>
<if test="a14!= null">a14=#{a14}</if>
<if test="a15!= null">a15=#{a15}</if>
<if test="a16!= null">a16=#{a16}</if>
<if test="a17!= null">a17=#{a17}</if>
<if test="a18!= null">a18=#{a18}</if>
<if test="a19!= null">a19=#{a19}</if>
<if test="a20!= null">a20=#{a20}</if>
<if test="a21!= null">a21=#{a21}</if>
<if test="a22!= null">a22=#{a22}</if>
<if test="a23!= null">a23=#{a23}</if>
<if test="a24!= null">a24=#{a24}</if>
<if test="a25!= null">a25=#{a25}</if>
<if test="a26!= null">a26=#{a26}</if>
<if test="a27!= null">a27=#{a27}</if>
<if test="a28!= null">a28=#{a28}</if>
<if test="a29!= null">a29=#{a29}</if>
<if test="a30!= null">a30=#{a30}</if>
</set>

2:在ibatis2使用<isNotNull property="a">多个,就算30个,速度没有多大影响.
update a
    <dynamic prepend="set">
    <isNotNull property="a1" prepend=",">a1 = #a1#</isNotNull>
    <isNotNull property="a2" prepend=",">a2 = #a2#</isNotNull>
    <isNotNull property="a3" prepend=",">a3 = #a3#</isNotNull>
    <isNotNull property="a4" prepend=",">a4 = #a4#</isNotNull>
    <isNotNull property="a5" prepend=",">a5 = #a5#</isNotNull>
    <isNotNull property="a6" prepend=",">a6 = #a6#</isNotNull>
    <isNotNull property="a7" prepend=",">a7 = #a7#</isNotNull>
    <isNotNull property="a8" prepend=",">a8 = #a8#</isNotNull>
    <isNotNull property="a9" prepend=",">a9 = #a9#</isNotNull>
    <isNotNull property="a10" prepend=",">a10 = #a10#</isNotNull>
    <isNotNull property="a11" prepend=",">a11 = #a11#</isNotNull>
    <isNotNull property="a12" prepend=",">a12 = #a12#</isNotNull>
    <isNotNull property="a13" prepend=",">a13 = #a13#</isNotNull>
    <isNotNull property="a14" prepend=",">a14 = #a14#</isNotNull>
    <isNotNull property="a15" prepend=",">a15 = #a15#</isNotNull>
    <isNotNull property="a16" prepend=",">a16 = #a16#</isNotNull>
    <isNotNull property="a17" prepend=",">a17 = #a17#</isNotNull>
    <isNotNull property="a18" prepend=",">a18 = #a18#</isNotNull>
    <isNotNull property="a19" prepend=",">a19 = #a19#</isNotNull>
    <isNotNull property="a20" prepend=",">a20 = #a20#</isNotNull>
    <isNotNull property="a21" prepend=",">a21 = #a21#</isNotNull>
    <isNotNull property="a22" prepend=",">a22 = #a22#</isNotNull>
    <isNotNull property="a23" prepend=",">a23 = #a23#</isNotNull>
    <isNotNull property="a24" prepend=",">a24 = #a24#</isNotNull>
    <isNotNull property="a25" prepend=",">a25 = #a25#</isNotNull>
    <isNotNull property="a26" prepend=",">a26 = #a26#</isNotNull>
    <isNotNull property="a27" prepend=",">a27 = #a27#</isNotNull>
    <isNotNull property="a28" prepend=",">a28 = #a28#</isNotNull>
    <isNotNull property="a29" prepend=",">a29 = #a29#</isNotNull>
    <isNotNull property="a30" prepend=",">a30 = #a30#</isNotNull>
  </dynamic>
3: 网上的介绍都说ibatis3性能有很大提升,我在实战中,反而性能降了,跟踪了ibatis3的源码,发现原因是ibatis3是用ognl解析xml。在ognl解析时耗费太多的时间
分享到:
评论

相关推荐

    Ibatis3手册 Ibatis3参考手册

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

    完整的ognl源代码

    9. **表达式缓存**:为了提高性能,OGNL会缓存已解析的表达式,避免重复解析。 10. **安全控制**:虽然OGNL的强大功能可能带来安全风险,如代码注入,但可以通过配置限制其行为,防止未授权的访问和操作。 通过...

    ibatis3资料-介绍

    iBATIS3作为iBATIS框架的最新版本,引入了多项新功能和改进,使其在性能、灵活性和易用性方面有了显著提升。 #### 新功能介绍 iBATIS3的主要新功能包括: 1. **增强的XML配置**:iBATIS3引入了一个更强大的XML...

    使用的ognl的chm

    2. **上下文(Context)**:OGNL表达式解析时会查找一个上下文,通常是一个Map,其中包含了变量和对象。 3. **值栈(Value Stack)**:在Struts2中,OGNL与值栈紧密配合,值栈是一个对象栈,用于存储Action对象和...

    ibatis实现原理解析

    在本篇文章中,我们将深入解析Ibatis的实现原理,探讨其核心功能、工作流程以及优势。 一、Ibatis的核心概念 1. SQL映射文件:Ibatis通过XML或注解方式定义SQL语句,这些语句被封装在SQL映射文件中。映射文件包含...

    iBATIS3与JDBC性能对比

    本篇文章将深入探讨iBATIS3和JDBC在性能上的对比,以帮助开发者更好地理解这两种技术的优劣。 iBATIS3是一个轻量级的持久层框架,它提供了一种将SQL语句与Java代码分离的方式,通过XML或注解来定义SQL映射,增强了...

    iBatis分页源代码解析.chm

    iBatis分页源代码解析.chm,ibatis介绍等

    IBATIS3代码生成器

    【标题】"IBATIS3代码生成器"是一款专为基于IBATIS3框架的项目设计的工具,它能够自动生成常见的SQL映射文件、Java DAO接口和实现类,大大提高了开发效率,降低了手动编写这些代码的工作量。该工具的核心理念是通过...

    解决IBatis缓存动态字段问题

    这种情况下,由于IBatis的缓存机制,可能导致字段找不到的问题。具体表现为:当第一次查询某个表时,IBatis会将查询结果中的字段名缓存起来;而在后续查询其他表时,如果这些表的字段与之前缓存的字段不一致,就会...

    第一个ibatis3工程

    《第一个iBatis3工程详解》 在Java开发领域,iBatis作为一个优秀的持久层框架,因其简单易用、灵活性高而备受青睐。本篇文章将深入探讨如何搭建第一个iBatis3工程,以及该工程中涉及到的核心概念和技术点。 首先,...

    根据mybatis/ibatis sqlmapper文件解析生成数据库表

    标题 "根据mybatis/ibatis sqlmapper文件解析生成数据库表" 暗示了我们将会探讨一个关于MyBatis或iBatis框架的工具,它能够解析SQL映射文件并根据这些文件自动生成数据库表。这个过程对于快速构建数据库模型,尤其是...

    ibatis2.X升级mybatis3.X之曲径通幽处

    此外,还需要检查和更新相关的依赖库,因为Mybatis3.x可能与一些旧版本的库存在冲突。 总之,从ibatis2.x升级到mybatis3.x是一次提升项目质量和开发效率的旅程。尽管过程中可能存在一些挑战,但通过理解Mybatis3.x...

    ibatis3开发指南

    《ibatis3开发指南》深度解析 一、ibatis3简介与重要性 ibatis3,作为Apache基金会下的开源项目,是一种对象关系映射(ORM)工具,它为Java开发者提供了一种优雅的方式,用于处理Java对象与关系型数据库管理系统...

    ibatis、mybatis官方教程文档集合(含Manning.iBATIS.in.Action)

    Manning.iBATIS.in.Action.Jan.2007.eBook-BBL.pdf MyBatis 3 User Guide Simplified Chinese.pdf MyBatis-3.0.3-Migrations.pdf MyBatis-3.0.3-User-Guide.pdf MyBatis-3-Migrations.doc MyBatis-3-Migrations.pdf ...

    ibatis3应用实例(oracle数据库)

    《Ibatis3在Oracle数据库中的应用实践》 Ibatis3是一款优秀的Java持久层框架,它提供了灵活的SQL映射机制,使得开发者可以更好地控制数据库的交互。本篇将深入探讨Ibatis3在Oracle数据库环境下的具体应用实例,涵盖...

    ibatis3中使用jpa的方法进行查询

    Ibatis3 是一款优秀的持久层框架,它允许开发者将SQL语句直接写在配置文件中,从而实现了SQL与Java代码的分离,提高了开发效率。而JPA(Java Persistence API)是Java平台上的一个标准,用于对象关系映射(ORM),...

    根据MyBatis或iBatis的SQLMapper文件反向生成数据库表

    根据MyBatis或iBatis的SQLMapper文件解析生成数据库表,通常是指通过解析MyBatis或iBatis的SQLMapper文件中的SQL语句,然后根据这些SQL语句来生成对应的数据库表结构。这样的需求可能源于需要将已有的SQLMapper文件...

    ibatis 3 核心包

    10. **插件(Plugins)**:Ibatis允许用户自定义插件,可以通过拦截器机制对SqlSession、Executor、Statement等进行增强,实现如性能监控、日志记录等功能。 在提供的mybatis-3.0.5包中,包含了这些核心组件的实现...

    ibatis分页

    这种方式更为通用,但可能会导致性能下降,因为需要获取并排序所有行。 在标签中提到的“源码”可能意味着博主分析了iBATIS的源代码来解释其分页机制,这有助于深入理解iBATIS的工作原理,以及如何根据具体需求进行...

    操作数据库 iBATIS查询

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

Global site tag (gtag.js) - Google Analytics