您的位置:首页 > 移动开发

IDEA maven项目下测试mybatis例子,使用mappper class或package引入mapper映射文件,总是报错Invalid bound statement(所有配置完全正确)

2017-06-29 11:31 1246 查看
困扰几个小时,终于查到解决办法及原因(可以直接到最后看解决方案)

环境就是用IDEA搭建的maven项目,主要jar包引入配置如下

import com.hjp.mapper.UserMapper;
import com.hjp.po.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;

public class MapperTest {

SqlSessionFactory factory;

@Before
public void setUp() throws IOException {
String resource="sqlMapConfig.xml";
InputStream inputStream= Resources.getResourceAsStream(resource);
factory=new SqlSessionFactoryBuilder().build(inputStream);
}

@Test
public void func1() throws Exception {
SqlSession session=factory.openSession();
UserMapper userMapper=session.getMapper(UserMapper.class);
User user=userMapper.findUserById(1);
System.out.println(user);
session.close();
}

}


MapperTest.java
运行测试代码,报错信息如下



检查了n遍配置和代码,没有发现问题,而且使用mapper的resource单独配置指向resources文件夹下mapper映射文件(如图)就没问题




后来想到是解析xml的问题,到编译后的文件夹下查看,没有UserMapper.xml文件



然后找解决方案,原来是IDEA maven项目默认不会把src下除java文件外的文件打包到classes文件夹下,需要配置如下

<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
<!--默认是true-->
<!--<filtering>true</filtering>-->
</resource>
</resources>
</build>


或者手动把文件拷贝到classes文件夹对应的目录下,结果如下图

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐