关于mybatis无法映射到mapper.xml文件的解决方案(可能与maven有关)

写在前面: 当确定所有文件没有错的时候,一定要看一看是不是其他辅助工具的问题。
    最近再看一本书《你的灯亮着吗》,里面有一句话 “鱼是最后看见水的”,应验了,也受教了!

找不到mapper.xml文件的原因有几种:

  1. 确实不存在mapper.xml文件
  2. 相关配置出错
  3. maven工具的原因

详解

a. 关于配置。
 大多数情况下,使用ssm框架开发会这样的配置文件。
 
关于spring集成mybatis, 重要的也就这两个东西。

 <!--映射xml文件的位置-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <!--这里配置mapper文件的存放位置-->
        <property name="mapperLocations" value="classpath:mapper/*.xml"/>
    </bean>

    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!--mapper接口所在的包-->
        <property name="basePackage" value="com.mis.hrm.book.dao"/>
        <!--指定使用哪一个selsessionfactory-->
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
    </bean>

同时也可以这样配置

 <!--映射xml文件的位置-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <!-- <property name="mapperLocations" value="classpath:mapper/*.xml"/>-->
        <!--导入mybatis的配置文件,这个配置文件可以配置mapper.xml文件的路径-->
        <property name="configLocation" value="classpath:mybatis/MapperConfig.xml"/>
    </bean>

    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.mis.hrm.book.dao"/>
        <!--指定使用哪一个selsessionfactory-->
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
    </bean>

简单示例一下mybatisConfig.xml文件吧,包含了如何导入mapper.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>
    <!--别名配置-->
    <typeAliases>
        <typeAlias type="com.mis.hrm.book.po.Book" alias="book"/>
        <typeAlias type="com.mis.hrm.book.po.BookLendInfo" alias="bookLendInfo"/>
    </typeAliases>

    <!--把对应的xml文件加载进来-->
    <mappers>
        <!--通过扫描包的方式加载文件-->
        <!--此种方法要求mapper接口名称和mapper映射文件名称相同,且放在同一个目录中。-->
        <!--<package name="com.mis.hrm.book.dao"/>-->

        <!--也可以通过下面的方式导入-->

        <!--url方式(文件全路径,不推荐)-->
        <!--<mapper url="file:///home/liudong/code/hrms/mis-hrm-book/src/main/resources/mapper/BookMapper.xml"/>-->

        <!--resource方式 (classpath 相对路径)-->
        <mapper resource="mapper/BookMapper.xml"/>

        <!--使用mapper接口 (接口类名)-->
        <!--此种方法要求mapper接口名称和mapper映射文件名称相同,且放在同一个目录中。-->
        <!--<mapper class="com.mis.hrm.book.dao.BookMapper"/>-->
    </mappers>
</configuration>

b. 关于maven的原因。
构建Maven项目的时候,如果没有进行特殊的配置,Maven会按照标准的目录结构查找和处理各种类型文件。(具体可google maven文件处理方式)
大概的意思就是说,我们有的资源在默认的处理方式下被忽略了,并没有被添加到对应的目录下,当然找不到咯。

解决方案1,请看下面这一段描述:
这里写图片描述
大概意思就是说,我们的资源文件不会被编译,但又因为各种各样的原因必须绑定到项目中。所以此时此刻使用 resources 标签来标明哪些文件是不能被忽略的,哪些文件是必须排除的。

<build>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <!--包含了src/main/java目录下的所有xml资源配置文件-->
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <!--包含了src/main/resources目录下的所有xml资源配置文件-->
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
        </resources>
    </build>

解决方案2,使用maven打包的插件。
列举一个吧,其实还有其他的

<build>  
        <plugins>  
            <plugin>  
                <groupId>org.codehaus.mojo</groupId>  
                <artifactId>build-helper-maven-plugin</artifactId>  
                <version>1.8</version>  
                <executions>  
                    <execution>  
                        <id>add-resource</id>  
                        <phase>generate-resources</phase>  
                        <goals>  
                            <goal>add-resource</goal>  
                        </goals>  
                        <configuration>  
                            <resources>  
                                <resource>  
                                    <directory>src/main/java</directory>  
                                    <includes>  
                                        <include>**/*.xml</include>  
                                    </includes>  
                                </resource>  
                            </resources>  
                        </configuration>  
                    </execution>  
                </executions>  
            </plugin>     
        </plugins>       
    </build>  

猜你喜欢

转载自blog.csdn.net/qq_38727626/article/details/81431522