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

坐定定 发布于 2010/11/01 14:40
阅读 1K+
收藏 2

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解析时耗费太多的时间

加载中
0
许恒彪
许恒彪

慢个p啊,就初始化的时候会慢,后面都是读的缓存

0
坐定定
坐定定

每次解析 a1!= null 这样的ognl语句,跟是否使用缓存是没有关系的。

ibatis3执行多个字段的a1!= null,会花多些时间。执行完一条这样的语句,实际大概10ms吧,而ibatis2大概3ms,如果每次都执行数量不多的sql语句,根本区分不出来效果。但如果执行一个批量处理(10000条sql),效果就明显体现出来了。

如果觉得10ms执行一条update语句与3ms执行一条update语句没有区别的话。就不需要关心了

返回顶部
顶部