Ok, I will test 5 properties bean to validate if the performance issue
will happen. I think ibatis is pretty on performance, We use it on our site, every day, our page hit more than 110 m times, IBatis do all these very pretty:) Some tables in our site have than 80 column, and were queried millions of times every hour. So, performance is very critical for me . Every SQL request handle quickly will get less waiting connection and more user expierence. Query 10000 results are only my test case, In product env , We fetch data 20-50 results every query . We have more than 200 sql map files, So I can not change any to my product system. Improve performance only by tuning sql, modify some bean model. Leon Liu Clinton Begin 写道: Above calling take about 1700ms -1800ms. JDBC query take about 200ms.Does your JDBC example include creating all of the classes and setting all of the properties? Calling resultSet.getXxxxx() and setting properties 840,000 times in 1.8 seconds actually sounds pretty good.I hate to discourage you from using iBATIS, but honestly if you're worried about a 500ms difference in performance of a query of nearly 1,000,000 values, you might be better off without iBATIS. :-/ Clinton On Tue, Mar 18, 2008 at 10:32 AM, Leon Liu <[EMAIL PROTECTED]> wrote:Hi , These days I test ibatis performance with large result set and large bean. I do following step, 1. A bean have 84 properties and a tabble have 84 columns. 2. and I set enhencmentEnable=true, 3. I query 10000 result from oracle database. Oracle database with JDBC driver set defaultRowFetch=50. Above calling take about 1700ms -1800ms. JDBC query take about 200ms. But when I check my bean code, I found there is a property with no get method, so I add the property's Getter Method. Then I get a surprised, The query formance got a great improvement. It is take about 1200ms-1300ms. I debug ibatis code, I find follwing code may cause big performance: com.ibatis.sqlmap.engine.accessplan.AccessPlanFactory Line 60 if (bytecodeEnhancementEnabled) { try { plan = new EnhancedPropertyAccessPlan(clazz, propertyNames); } catch (Throwable t) { try { plan = new PropertyAccessPlan(clazz, propertyNames); } catch (Throwable t2) { plan = new ComplexAccessPlan(clazz, propertyNames); } } } com.ibatis.common.beans.ClassInfo Line256 public Method getGetter(String propertyName) { Method method = (Method) getMethods.get(propertyName); if (method == null) { throw new ProbeException("There is no READABLE property named '" + propertyName + "' in class '" + className + "'"); } return method; } class EnhancedPropertyAccessPlan/PropertyAccessPlan call com.ibatis.common.beans.ClassInfo.getGetter(String) that cause an exception when a bean have no Getter method, AccessPlan object choose ComplexAccessPlan. I think ComplexAccessPlan cause the performance problem. IBtatis automatic decide a simple bean that property have no Getter method to be Complex type. IBatis does not prompt any warning enhancementEnable option will be skipped. I think these ibatis exception handling is not smooth. and If user's bean loose some Getter method, a common user does not know why ibatis performance become bad. BR Leon Liu |
- Retrieving Oracle column with data type TIMESTAMP WITH LOCAL... Jesse Reimann
- Re: Retrieving Oracle column with data type TIMESTAMP W... Andrey Rogov
- RE: Retrieving Oracle column with data type TIMESTA... Jesse Reimann
- about bean with no GET method performance Leon Liu
- Re: about bean with no GET method performan... Clinton Begin
- Re: about bean with no GET method perf... Leon Liu
- Re: about bean with no GET method ... Koka Kiknadze
- Re: Retrieving Oracle column with data type TIM... Leon Liu
- Re: Retrieving Oracle column with data type TIM... Andrey Rogov
- RE: Retrieving Oracle column with data type... Jesse Reimann