spring+mybatis,如何在http请求中共享数据库连接

spring+mybatis,如何在http请求中共享数据库连接,spring,mybatis,Spring,Mybatis,在我的web应用程序中,我使用spring+SpringWebMVC+mybatis,并使用jndi数据源 我创建了一个mvc控制器来处理用户的登录请求 在控制器中,我需要完成一些与数据库相关的任务,每个任务将访问一个由spring自动连接mybatis mapper的服务对象,这将创建一个mybatis sqlsession并使用它并关闭它 我的问题是,我们能让所有这些任务共享同一个mybatis sqlsession吗 据我所知,mybatis sqlsession意味着涉及jdbc连接 我

在我的web应用程序中,我使用spring+SpringWebMVC+mybatis,并使用jndi数据源

我创建了一个mvc控制器来处理用户的登录请求

在控制器中,我需要完成一些与数据库相关的任务,每个任务将访问一个由spring自动连接mybatis mapper的服务对象,这将创建一个mybatis sqlsession并使用它并关闭它

我的问题是,我们能让所有这些任务共享同一个mybatis sqlsession吗

据我所知,mybatis sqlsession意味着涉及jdbc连接

我不想浪费任何资源

编辑:

编辑: 根据mybatis spring文档:

SqlSessionTemplate是MyBatis Spring的核心。它实现了SqlSession,并且是代码中任何现有SqlSession使用的替代品。SqlSessionTemplate是线程安全的,可以由多个DAO或映射程序共享


那么如何让多个映射程序共享一个SqlSessionTemplate?

最简单的方法是使用SqlSessionFactoryBean

如果你有这样的定义

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="configLocation" value="classpath:myBatisConfig.xml" />
</bean>

然后,将为每个spring事务创建mybatis会话,并由所有实例化的映射程序使用。

如果将SqlSessionTemplate定义为默认bean的singleton,则所有映射程序都应自动共享该实例。只是通过注入不同的映射程序来尝试,是的,它们都有对同一个SqlSessionTemplate的引用。您是否将SqlSessionTemplate定义为原型?使用mybatis:scan功能也将自动注入工厂或模板,但是是的,我更喜欢显式地定义映射器工具。请参阅:bu我正在寻找一种方法,为那些进行非事务性操作的映射者共享mybatis会话。好的,从这个问题来看,这不是很清楚。你真的需要这个吗?Mybatis SqlSession非常轻量级。初始化mybatis配置并打开新连接—这需要时间。配置创建应该完成一次,如果您使用mybatis spring,配置创建应该完成一次。要摊销连接创建,请使用连接池。
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="configLocation" value="classpath:myBatisConfig.xml" />
</bean>
<bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
  <property name="mapperInterface" value="com.yourcompany.youapp.mapper.SomeMapper" />
  <property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="basePackage" value="com.yourcompany.youapp.mapper" />
    <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
</bean>