ssm mybatis如何配置多個mapper目錄

ssm mybatis配置多個mapper目錄

通配符配置

比如目錄的結構如下:

com/test/web/user/mapper
com/test/web/order/mapper
com/test/web//mapper

<!-- 掃描 xxxMapper.xml -->   
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="configLocation"  value="classpath:spring/mybatis-config.xml"/>  
        <property name="mapperLocations" value="classpath*:com/xxxcompany/xxxproject/*/mapper/*.xml" />
    </bean>

<!-- 掃描 xxxMapper -->
    <bean id="daoScan" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.xxxcompany.xxxproject.*.mapper" />
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
    </bean>

除瞭上面這種目錄結構一致的方式,我們還可以使用下面的配置方式,這個意思也就是說隻要是符合mapper* 這樣的命名規則的包都會被掃描到

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="configLocation"  value="classpath:mybatis-config.xml"/>  
        <property name="mapperLocations" value="classpath*:com/dada/**/*Mapper.xml"/> 
    </bean>

    <!-- 配置掃描器 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.dada.test.mapper*"/>
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
    </bean>

ssm項目 mappers標簽

mappers標簽標簽的作用

為瞭讓mybatis找到mapper.xml文件。

在後面的ssm整合項目中,有兩種方式可以代替它

  1. 一個是使用MapperScannerConfigurer
  2. 一個是使用mapperLocation屬性(位於SqlSessionFactoryBean中):mapperLocation屬性,主要用於指定mapper.xml文件所處的位置。

MapperScannerConfigurer可以自動掃描到和接口同包同名的mapper.xml文件

mapperLocation屬性可以指定掃描。

下面來個逆向思考!!!

在ssm項目中,將mapper.xml文件放進和dao接口不同的包中,這樣的話MapperScannerConfigurer的自動掃描就掃描不到mapper.xml文件瞭。然後不使用mapperLocation屬性,意思就是使用mappers標簽來代替兩個新方法,來驗證一下。

但是結果卻和我想的不一樣!!!下面我來說我遇到的一些坑!!!

mappers標簽的配置方式有4種

<!-- 1.使用相對於類路徑的資源引用 -->
<mappers>
  <mapper resource="org/mybatis/builder/AuthorMapper.xml"/>
</mappers>
<!-- 2.使用完全限定資源定位符(URL) -->
<mappers>
  <mapper url="file:///var/mappers/AuthorMapper.xml"/>
</mappers>
<!-- 3.使用映射器接口實現類的完全限定類名 -->
<mappers>
  <mapper class="org.mybatis.builder.AuthorMapper"/>
  <mapper class="org.mybatis.builder.BlogMapper"/>
  <mapper class="org.mybatis.builder.PostMapper"/>
</mappers>
<!-- 4.將包內的映射器接口實現全部註冊為映射器 -->
<mappers>
  <package name="org.mybatis.builder"/>
</mappers>
  1. 使用第3種和第4種方法需要和MapperScannerConfigurer一樣,將mapper.xml文件和dao接口同名同包。
  2. 對於第一種方法,我們需要註意的是:/ 和 .

蜿蜒曲折的探究道路

對於指定類路徑的資源引用的方式,也就是第一種方式,我將mapper.xml文件所在包放進瞭dao接口所在包的子包。結果idea提示說找不到mapper.xml文件,然後我又調瞭一會(將mapper.xml文件所在包改變位置後)可以正常運行,然後我就以為mapper.xml文件所在包不能放進瞭dao接口所在包的子包。我又重新把mapper.xml文件所在包放進瞭dao接口所在包的子包,結果能正常運行瞭。

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。

推薦閱讀: