Mybatis mapper接口與xml文件路徑分離


 

為什么分離

 

對於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>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM