[ibatis]执行resultMap里配置的子select时,是否生成了新的connection

查询对象:一棵树状Bean

环境:Spring Template + JdbcTransactionManager + ibatis

发现:

   1.执行树型查询时,ibatis中ExternalTransaction类曾多次执行connection.close()方法

   2.Spring Template 生成的Transaction实例并不是ExternalTransaction,而是UserProvidedTransaction。看来Spring Template在执行一次查询的时候使用两种Transaction,一类由Spring模板维护,它的生命周期为整个session,一个session里只有一个;另一类用作具体的db request,每做一次query就生成一个

   3. Spring Template 使用的 SqlMapExecutor是SqlMapSession,这个类还继承了SqlMapTransactionManager接口,使得每次执行查询后都会调用ExternalTransaction来关闭一下Connection   (SqlMapExecutorDelegate的autoEndTransaction()方法)

    4. 不管有没有Spring Template,ibatis同一个session内的每个request都要用一个新的Connection! 也就是树型Bean千万不能用ibatis来做查询的框架!

Leave a Comment

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.