ssm mybatis配置mapper目录
信行合一 人气:9ssm 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整合项目中,有两种方式可以代替它
- 一个是使用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接口所在包的子包,结果能正常运行了。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。
加载全部内容