1

最新の mybatis リリース、つまり mybatis3.2.2 を使用しています。

EJB CMP 上にあった古いアプリケーションを mybatis に変換しましたが、新しく変換された mybatis コードのパフォーマンスは、EJB CMP を使用した古いコードよりもはるかに悪かったです。

mybatis の構成設定は次のとおりです。

<settings>
    <setting name="cacheEnabled" value="false"/>
    <setting name="aggressiveLazyLoading" value="false" />
    <setting name="lazyLoadingEnabled" value="true" />
    <setting name="jdbcTypeForNull" value="VARCHAR"/>
    <setting name="defaultExecutorType" value="REUSE"/>
    <setting name="defaultStatementTimeout" value="25000"/>
</settings>

YJP プロファイラーを使用してパフォーマンスの問題を分析しているときに、HashTable.put(<mybatis returned Pojo>, <value>)メソッドにほとんどの時間がかかっており、唯一のボトルネックであるように思われることに気付きました。

メソッドでは、HashTable.put()mybatis から返された Pojo をキーとして入れています。どの呼び出しで、その pojo の hashCode を呼び出し、YJP から、「hashCode」メソッドで呼び出していることがわかりました'org.apache.ibatis.executor.loader.CglibProxyFactory$EnhancedResultObjectProxyImpl.intercept(Object, Method, Object[], MethodProxy)'。これは、実際には jdbc ドライバーを呼び出して、この pojo プロパティをロードするように見えます。当時の。

hashCodeメソッドでHashTableに入れているときに mybatis が Pojo をロードしようとしている理由を教えてください。また、可能な場合、どのようにパフォーマンスを改善できますか。

また、「hashCode」および「equals」メソッドを Pojo にオーバーライドして、主キー プロパティのみを使用/比較しようとしましたが、効果がないようで、ibatis の「executor.loader」を呼び出して同じことを行っています。

4

1 に答える 1