解决使用intellij idea开发MAVEN项目在target目录下不存在mapper.xml文件

  • Post author:
  • Post category:其他




解决使用intellij idea开发MAVEN项目在target目录下不存在mapper.xml文件

使用mybatis开发时,又遇到以下错误:

Exception in thread "main" org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): top.weiyuexin.mapper.UserMapper.queryUserByName
	at org.apache.ibatis.binding.MapperMethod$SqlCommand.<init>(MapperMethod.java:235)
	at org.apache.ibatis.binding.MapperMethod.<init>(MapperMethod.java:53)
	at org.apache.ibatis.binding.MapperProxy.lambda$cachedMapperMethod$0(MapperProxy.java:61)
	at java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1660)
	at org.apache.ibatis.binding.MapperProxy.cachedMapperMethod(MapperProxy.java:61)
	at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:56)
	at com.sun.proxy.$Proxy0.queryUserByName(Unknown Source)
	at top.weiyuexin.test.test.main(test.java:15)

Process finished with exit code 1

主要原因是查询语句找不到(Invalid bound statement (not found))

其实出现这个问题实质就是mapper接口和mapper.xml文件没有映射起来。

常见的错误如下:


1.mapper.xml中的namespace和实际的mapper文件不一致


这个问题其实很好解决,瞪大眼睛,仔仔细细看看,到底对不对应不就好了嘛


2.mapper接口中的方法名和mapper.xml中的id标签不一致


这个问题和上个问题解决方法一样,仔细对对嘛,这个再对不出来,面壁思过吧。


3.上两步的问题都没有,但是还是不行,可能原因就是,没有构建进去,打开target看看对应的mapper.xml文件在不在


image-20211125213333610

我这里明显就是mapper.xml文件不存在导致的。



原因分析:



对于MAVEN项目,Eclipse会自动把项目src\main\java\目录下的配置文件(.xml)和资源文件(.properties)搬运到target目录下,而intellij idea默认是不会帮我们做这件事的。



解决办法:

在pom.xml文件中加入以下配置:

 <build>
        
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>
        </resources>
    </build>

修改完成后重新构建maven项目,然后选择build

image-20211125213638764

重新构建后,可以查看mapper.xml已经出现在target目录下了。



注意:重新构建的时候要把target目录删除

此时再去运行测试函数

package top.weiyuexin.test;

import org.apache.ibatis.session.SqlSession;
import top.weiyuexin.entity.User;
import top.weiyuexin.mapper.UserMapper;
import top.weiyuexin.util.GetSqlSession;

public class test {
    public static void main(String[] args) {
        //获取sqlSession对象
        SqlSession session = GetSqlSession.createSqlSession();
        //得到对应的mapper
        UserMapper userMapper = session.getMapper(UserMapper.class);
        //调用方法,返回用户对象
        User user = userMapper.queryUserByName("wyx");
        System.out.println(user.getUserName());
    }

}

运行结果:

在这里插入图片描述



版权声明:本文为weixin_46353366原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。