解决使用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文件在不在
我这里明显就是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
重新构建后,可以查看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());
}
}
运行结果: