zoukankan      html  css  js  c++  java
  • 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>
  • 相关阅读:
    java如何编写多线程
    Java调用dll动态库
    HashMap源码解析
    LinkedList源码解析
    ArrayList源码解析
    springboot配置cxf
    java生成二维码
    原生js--跨域消息传递
    原生js--应用程序存储和离线web应用
    原生js--userData
  • 原文地址:https://www.cnblogs.com/deolin/p/8195565.html
Copyright © 2011-2022 走看看