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* 這樣的命名規(guī)則的包都會被掃描到
<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整合項目中,有兩種方式可以代替它
- 一個是使用MapperScannerConfigurer
- 一個是使用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>
- 使用第3種和第4種方法需要和MapperScannerConfigurer一樣,將mapper.xml文件和dao接口同名同包。
- 對于第一種方法,我們需要注意的是:/ 和 .
蜿蜒曲折的探究道路
對于指定類路徑的資源引用的方式,也就是第一種方式,我將mapper.xml文件所在包放進了dao接口所在包的子包。結果idea提示說找不到mapper.xml文件,然后我又調了一會(將mapper.xml文件所在包改變位置后)可以正常運行,然后我就以為mapper.xml文件所在包不能放進了dao接口所在包的子包。我又重新把mapper.xml文件所在包放進了dao接口所在包的子包,結果能正常運行了。
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
JVM實戰(zhàn)系列之CPU100%和內存100%排查
本文主要介紹了JVM實戰(zhàn)系列之CPU100%和內存100%排查,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-06-06

