开源项目

知识点

相关文章

更多

最近更新

更多

MyBatis-Spring SqlSessionFactoryBean 创建session

2019-05-06 23:27|来源: 网路

SqlSessionFactoryBean

在基本的 MyBatis 中,session 工厂可以使用 SqlSessionFactoryBuilder 来创建。而在 MyBatis-Spring 中,则使用 SqlSessionFactoryBean 来替代。

Setup

要创建工厂 bean,放置下面的代码在 Spring 的 XML 配置文件中:

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
  <property name="dataSource" ref="dataSource" />
</bean>

 

要注意 SqlSessionFactoryBean 实现了 Spring 的 FactoryBean 接口(请参考 Spring 文 档的 3.8 章节)这就说明了由 Spring 最终创建的 bean 不是 SqlSessionFactoryBean 本身, 。 而是工厂类的 getObject()返回的方法的结果。这种情况下,Spring 将会在应用启动时为你 创建 SqlSessionFactory 对象,然后将它以 SqlSessionFactory 为名来存储。在 Java 中, 相同的代码是:

SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
SqlSessionFactory sessionFactory = factoryBean.getObject();

 

在一般的 MyBatis-Spring 用法中, 你不需要直接使用 SqlSessionFactoryBean 或和其对 应的 SqlSessionFactory。相反,session 工厂将会被注入到 MapperFactoryBean 或其它扩 展了 SqlSessionDaoSupport 的 DAO(Data Access Object,数据访问对象,译者注)中。

属性

SqlSessionFactory 有一个单独的必须属性,就是 JDBC 的 DataSource。这可以是任意 的 DataSource,其配置应该和其它 Spring 数据库连接是一样的。

一个通用的属性是 configLocation,它是用来指定 MyBatis 的 XML 配置文件路径的。 如果基本的 MyBatis 配置需要改变, 那么这就是一个需要它的地方。 通常这会是<settings><typeAliases>的部分。

要注意这个配置文件不需要是一个完整的 MyBatis 配置。确切地说,任意环境,数据源 和 MyBatis 的事务管理器都会被忽略。SqlSessionFactoryBean 会创建它自己的,使用这些 值定制 MyBatis 的 Environment 时是需要的。

如果 MyBatis 映射器 XML 文件在和映射器类相同的路径下不存在,那么另外一个需要 配置文件的原因就是它了。使用这个配置,有两种选择。第一是手动在 MyBatis 的 XML 配 置文件中使用<mappers>部分来指定类路径。第二是使用工厂 bean 的 mapperLocations 属 性。

mapperLocations 属性使用一个资源位置的 list。 这个属性可以用来指定 MyBatis 的 XML 映射器文件的位置。 它的值可以包含 Ant 样式来加载一个目录中所有文件, 或者从基路径下 递归搜索所有路径。比如:

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
  <property name="dataSource" ref="dataSource" />
  <property name="mapperLocations" value="classpath*:sample/config/mappers/**/*.xml" />
</bean>

 

这会从类路径下加载在 sample.config.mappers 包和它的子包中所有的 MyBatis 映射器 XML 文件。

在容器环境管理事务中,一个可能需要的属性是 transactionFactoryClass。请参考 第四章(4.2 节)中来查看有关部分。

NOTE Since 1.3.0, configuration property has been added. It can be specified a Configuration instance directly without MyBatis XML configuration file. For example:

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
  <property name="dataSource" ref="dataSource" />
  <property name="configuration">
    <bean class="org.apache.ibatis.session.Configuration">
      <property name="mapUnderscoreToCamelCase" value="true"/>
    </bean>
  </property>
</bean>

 

相关问答

更多
  • bean id= sqlSessionFactoryBean class= org.mybatis.spring.SqlSessionFactoryBean pr... 内部他会为每次请求创建线程安全的sqlsession,并与Spring进行集成.在你的方法调用完
  • SqlSessionFactoryBean 在基本的 MyBatis 中,session 工厂可以使用 SqlSessionFactoryBuilder 来创建。而在 MyBatis-Spring 中,则使用 SqlSessionFactoryBean 来替代。 Setup 要创建工厂 bean,放置下面的代码在 Spring 的 XML 配置文件中: 要注意 SqlSessionFactoryBean 实现了 Spring 的 FactoryBean 接口(请参考 Spring 文 档的 3.8 章节)这 ...
  • SqlSessionFactoryBean 在基本的 MyBatis 中,session 工厂可以使用 SqlSessionFactoryBuilder 来创建。而在 MyBatis-Spring 中,则使用 SqlSessionFactoryBean 来替代。
  • 尝试在UI子类上使用@SpringUI而不是@SpringView ,并且还需要使用SpringVaadinServlet而不是VaadinServlet ,最好的方法是删除从VaadinServlet继承的静态Servlet类,spring插件将使用正确的servlet代替。 我还建议摆脱xml-config,除非你碰巧喜欢它。 在start.spring.io上支持使用Spring引导和Vaadin,这是一种非常简单的引导项目文件和配置的方法。 Try to use @SpringUI instead ...
  • 也解决了! 只需在MapperScannerConfigurer中引用工厂bean:sqlSessionFactoryBeanName 第一个数据源>>>>>>>
  • 给定的sqlSessionFactory只能关联一个数据源。 但这不是主要问题。 主要问题是本地缓存与mybatis会话相关联 。 因此,当您使用两个不同的会话时,您将拥有两个不同的本地缓存 - 每个会话一个,并且有一个sqlSessionFactory将无济于事。 您应该考虑的选项是为只读会话设置localCacheScope = STATEMENT。 在这种情况下,它不会在执行查询后缓存结果。 为了能够仍然使用缓存,可以使用自定义适配器为某些全局配置的缓存或使用全局缓存(例如ehcache)的现有缓存适 ...
  • 您应该查看jpetstore代码结构的样子。 Mapper接口用于映射xml配置中定义的sql语句,然后您可以简单地将自动创建的映射器bean注入或自动装入DAO bean。 让我们说(假设mapper接口是MyMapper):
    你可以在myproject.persistence包下的PersonMapper.xml中定义你的sql(注意:接口应该与xml在同一个包中)。