【问题标题】:Auto Scanning mappers in mybatis-springmybatis-spring 中的自动扫描映射器
【发布时间】:2017-11-07 04:55:48
【问题描述】:

我们的项目结构如下:

- basePkg
 |- pkg1
  |- dao1
   |- mybatis-mappers...
  |- classes...
 |- pkg2
  |- dao2
   |- mybatis-mappers...
  |- classes...

现在,每当我们将 mybatis 映射器添加到任何 dao 包时,我们都必须在 spring context.xml 中添加如下所示的新条目

<bean id="testDao" class="org.mybatis.spring.mapper.MapperFactoryBean">
  <property name="mapperInterface" value="basePkg.pkg1.dao1.testDao" />
  <property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>

为每个新映射器不断添加新条目变得越来越麻烦。我发现的另一种方法是使用&lt;mybatis:scan \&gt;。这种方法我面临两个问题:

  • 我不想直接提供 basePkg,因为它需要 Spring 扫描整个项目结构中的映射器,这会影响性能。这意味着我必须为每个basPkg.dao* 包提供一个单独的扫描元素。相反,有没有办法使用单个扫描元素并使用正则表达式指定所有 dao 子包?
  • 我们使用两个数据源(MySQL 和 RedShift)。在解决上面列出的第一个问题时,我该如何解释这一点?

【问题讨论】:

    标签: java spring mybatis spring-mybatis


    【解决方案1】:

    这个不用我说:

    <bean id="testDao" class="org.mybatis.spring.mapper.MapperFactoryBean">
      <property name="mapperInterface" value="basePkg.pkg1.dao1.testDao" />
      <property name="sqlSessionFactory" ref="sqlSessionFactory" />
    </bean>
    

    使用的库:

    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>1.1.1</version>
    </dependency>
    
    <dependency>
       <groupId>org.mybatis</groupId>
       <artifactId>mybatis-spring</artifactId>
       <version>1.3.1</version>
    </dependency>
    
    <dependency>
       <groupId>org.mybatis</groupId>
       <artifactId>mybatis</artifactId>
       <version>3.4.4</version>
    </dependency>
    

    并确保

    1. TestMapper.java 接口会有TestMapper.xml
    2. 或者只是带有注释的 TestMapper.java

    如果 XML 文件位于 src\main\java 中,则需要以下内容:

        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>build-helper-maven-plugin</artifactId>
            <version>3.0.0</version>
            <executions>
                <execution>
                    <id>add-resource</id>
                    <phase>generate-resources</phase>
                    <goals>
                        <goal>add-resource</goal>
                    </goals>
                    <configuration>
                        <resources>
                            <resource>
                                <directory>src/main/java</directory>
                                <includes>
                                    <include>**/*.xml</include>
                                </includes>
                            </resource>
                        </resources>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    

    希望以上内容有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-19
      • 2018-07-26
      • 1970-01-01
      • 1970-01-01
      • 2021-01-22
      • 1970-01-01
      相关资源
      最近更新 更多