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

解决使用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.(MapperMethod.java:235)
	at org.apache.ibatis.binding.MapperMethod.(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文件在不在
解决使用intellij idea开发MAVEN项目在target目录下不存在mapper.xml文件_第1张图片

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

原因分析:

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

解决办法:

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

 
        
        
            
                src/main/java
                
                    **/*.xml
                
                true
            
        
    

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

解决使用intellij idea开发MAVEN项目在target目录下不存在mapper.xml文件_第2张图片

重新构建后,可以查看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());
    }

}

运行结果:

你可能感兴趣的:(Java,intellij,idea,java,mybatis)