- MyBatis官方入门教程
- MyBatis XML 配置详解
- MyBatis XML 映射文件详解
- MyBatis 动态 SQL详解
- MyBatis Java API详解
- Mybatis SQL 语句构建器
- MyBatis 日志配置
开源项目
知识点
相关文章
更多最近更新
更多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进行集成.在你的方法调用完
-
org.mybatis.spring.sqlsessionfactorybean需要哪个包[2022-03-17]
SqlSessionFactoryBean 在基本的 MyBatis 中,session 工厂可以使用 SqlSessionFactoryBuilder 来创建。而在 MyBatis-Spring 中,则使用 SqlSessionFactoryBean 来替代。 Setup 要创建工厂 bean,放置下面的代码在 Spring 的 XML 配置文件中: 要注意 SqlSessionFactoryBean 实现了 Spring 的 FactoryBean 接口(请参考 Spring 文 档的 3.8 章节)这 ... -
org.mybatis.spring.sqlsessionfactorybean 是哪个包的[2024-03-03]
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在同一个包中)。
MyBatis-Spring回滚不适用于多个事务管理器(MyBatis-Spring rollback not working with multiple transaction managers)[2022-09-02]
我在 @RisingDragon找到了解决方案: “如果你从另一个本地方法调用它,那么它将无法工作,因为spring无法知道它被调用并启动事务。 如果你是通过使用包含insertNotes()方法的类的自动对象从另一个类的方法调用它,那么它应该工作。“ 在我的例子中,我创建了第二个类 (例如RisingDragom的NoteClass)和一些@Transactional方法(例如我的代码中的insertUser)然后,回滚工作了!! 第二类出现在调试器中,尾部为“$$ EnhancedByCGLib” 。 ...如何使用MyBatis-Spring在MyBatis中配置2个数据库(How to configure 2 databases in MyBatis using MyBatis-Spring)[2022-04-17]
您的配置大多是正确的。 您遇到的问题是您使用自动装配来注入一个callService依赖项。 似乎您使用SqlSessionDaoSupport并且其sqlSessionTemplate字段是自动装配的。 定义了两个模板,因此spring无法自动连接依赖项。 您需要手动指定正确的模板。 Your configuration is mostly correct. The problem you face is that you use autowiring to inject one of callServi ...