為什么分離
對於Maven項目,IntelliJ IDEA默認是不處理src/main/java中的非java文件的,不專門在pom.xml中配置<resources>是會報錯的,參考這里。
所以src/main/java中最好不要出現非java文件。實際上,將mapper.xml放在src/main/resources中比較合適。
如何分離
首先,mapper肯定是不能配在mybatis-config.xml的<Mappers>里了,因為里面的方式都需要接口和xml在統一文件夾下
<!-- 將sql映射注冊到全局配置中--> <mappers> <!-- mapper 單個注冊(mapper如果多的話,不太可能用這種方式) resource:引用類路徑下的文件 url:引用磁盤路徑下的資源 class,引用接口 package 批量注冊(基本上使用這種方式) name:mapper接口與mapper.xml所在的包名 --> <!-- 第一種:注冊sql映射文件--> <mapper resource="com/spldeolin/mapper/UserMapper.xml" /> <!-- 第二種:注冊接口 sql映射文件必須與接口同名,並且放在同一目錄下--> <!--<mapper class="com.spldeolin.mapper.UserMapper" />--> <!-- 第三種:注冊基於注解的接口 基於注解 沒有sql映射文件,所有的sql都是利用注解寫在接口上--> <!--<mapper class="com.spldeolin.mapper.TeacherMapper" />--> <!-- 第四種:批量注冊 需要將sql配置文件和接口放到同一目錄下--> <package name="com.spldeolin.mapper" /> </mappers>
所以不在mybatis-config.xml中進行全局配置。
其次,在sqlSessionFactory.mapperLocations指定mapper.xml的路徑,在mapperScannerConfigurer.basePackage指定mapper接口的包名。
最終,目錄結構、spring-mybatis.xml和mybatis.xml大致是這樣的。
目錄結構(其他內容省略)

spring-mybatis.xml
<?xml version="1.0" encoding="UTF-8" ?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!--DB配置文件--> <context:property-placeholder location="classpath:db.properties" ignore-unresolvable="true" /> <!--數據源--> <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource"> <property name="driverClassName" value="${jdbc.driver}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> </bean> <!--qlSessionFactory--> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <!--Mybatis配置文件--> <property name="configLocation" value="classpath:mybatis-config.xml" /> <!--mapper.xml所在位置--> <property name="mapperLocations" value="classpath:mapper/*Mapper.xml" /> <!--指定需要使用別名的PO類所在的包--> <property name="typeAliasesPackage" value="com.spldeolin.demoapp.po" /> </bean> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <!--mapper接口所在的包--> <property name="basePackage" value="com.spldeolin.demoapp.dao" /> </bean> </beans>
mybatis-config.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!-- 其他全局配置 --> <settings> <setting name="logImpl" value="LOG4J2" /> <setting name="cacheEnabled" value="true" /> </settings> <!--全局分頁插件--> <plugins> <plugin interceptor="com.github.pagehelper.PageHelper"> <property name="dialect" value="mysql" /> <property name="offsetAsPageNum" value="true" /> <property name="rowBoundsWithCount" value="true" /> <property name="pageSizeZero" value="true" /> <property name="reasonable" value="false" /> <property name="returnPageInfo" value="check" /> <property name="params" value="pageNum=start;pageSize=limit;" /> </plugin> </plugins> </configuration>
