首页 新闻 赞助 找找看

MyBatis报错 java.io.IOException: Could not find resource SqlMapConfig.xml at org.apache.ibatis.io.R

1
[待解决问题]

MyBits JUnit 4测试报错

项目结构图

 

全局配置文件 SqlMapConfig.xml

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE configuration
 3 PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
 4 "http://mybatis.org/dtd/mybatis-3-config.dtd">
 5 <configuration>
 6     <!-- 加载数据库连接参数配置文件 -->
 7     <properties resource="db.properties" />
 8     
 9     <!-- 全局配置参数 -->
10     <!-- settings></settings> -->
11     
12     <!-- 定义别名 -->
13     <typeAliases>
14         <!-- 单个别名定义
15         type:pojo的路径 
16         alias:别名的名称
17         -->
18         <!-- <typeAlias type="cn.itcast.mybatis.po.User" alias="user"/> -->
19         <!-- 批量别名定义
20         name:指定包名,将包下边的所有pojo定义别名 ,别名为类名(首字母大写或小写都行)
21          -->
22         <package name="com.etc.po"/>
23     </typeAliases>
24     
25     <!-- 和spring整合后 environments配置将废除 -->
26     <environments default="development">
27         <environment id="development">
28             <transactionManager type="JDBC" />
29             <dataSource type="POOLED">
30                 <property name="driver" value="${jdbc.driver}"/>
31                 <property name="url" value="${jdbc.url}"/>
32                 <property name="username" value="${jdbc.username}"/>
33                 <property name="password" value="${jdbc.password}"/>
34             </dataSource>
35         </environment>
36     </environments>
37 
38     <!-- 配置mapper映射文件 -->
39     <mappers>
40         <!-- resource方式
41         在UserMapper.xml,定义namespace为mapper接口的地址,映射文件通过namespace找到对应的mapper接口文件
42          -->
43         <!-- <mapper resource="sqlmap/UserMapper.xml" /> -->
44         <!-- class方式
45         class:指定 mapper接口的地址
46         遵循规则:将mapper.xml和mapper.java文件放在一个目录 且文件名相同
47          -->
48         <!-- <mapper class="cn.itcast.mybatis.mapper.UserMapper"/> -->
49     
50         
51         <!--批量mapper扫描
52         遵循规则:将mapper.xml和mapper.java文件放在一个目录 且文件名相同
53           -->
54         <package name="com.etc.mapper"/>
55         
56         
57     </mappers>
58 </configuration>

 

db.properties

1 jdbc.driver=com.mysql.jdbc.Driver
2 jdbc.url=jdbc:mysql://localhost:3306/test
3 jdbc.username=root
4 jdbc.password=root

log4j.properties

1 # Global logging configuration
2 log4j.rootLogger=DEBUG, stdout
3 # Console output...
4 log4j.appender.stdout=org.apache.log4j.ConsoleAppender
5 log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
6 log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

User.java

 1 package com.etc.po;
 2 
 3 import java.util.Date;
 4 
 5 public class User {
 6 
 7     private int id;
 8     private String name;
 9     private String password;
10     private String sex;
11     private Date birth;
12     private int age;
13     public int getId() {
14         return id;
15     }
16     public void setId(int id) {
17         this.id = id;
18     }
19     public String getName() {
20         return name;
21     }
22     public void setName(String name) {
23         this.name = name;
24     }
25     public String getPassword() {
26         return password;
27     }
28     public void setPassword(String password) {
29         this.password = password;
30     }
31     public String getSex() {
32         return sex;
33     }
34     public void setSex(String sex) {
35         this.sex = sex;
36     }
37     public Date getBirth() {
38         return birth;
39     }
40     public void setBirth(Date birth) {
41         this.birth = birth;
42     }
43     public int getAge() {
44         return age;
45     }
46     public void setAge(int age) {
47         this.age = age;
48     }
49     @Override
50     public String toString() {
51         return "User [id=" + id + ", name=" + name + ", password=" + password
52                 + ", sex=" + sex + ", birth=" + birth + ", age=" + age + "]";
53     }
54     
55     
56 }

UserMapper.java

 1 package com.etc.mapper;
 2 
 3 import java.util.List;
 4 
 5 import com.etc.po.User;
 6 
 7 public interface UserMapper {
 8 
 9     //根据id查询用户
10     public User getUserById(int id) throws Exception;
11     //查询用户列表
12     public List<User> getUsers() throws Exception;
13 }

UserMapper.xml

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE mapper
 3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 5 <!-- namespace命名空间特殊作用: 如果使用mapper动态代理方法,这里就需要配置mapper接口地址-->
 6 
 7 <mapper namespace="com.etc.mapper.UserMapper">
 8     <!-- 根据用户id查询一条记录(返回单条记录) -->
 9     <!-- 
10     select标签表示sql查询,内容会封装到Mapped Statement中。
11     可以将这个select标签称为一个Statement
12     id:Statement的id,用于标识select中定义的 sql,id是在同一个命名空间中不允许重复
13     #{}:表示一个占位符,避免sql注入
14     parameterType:表示输入参数的类型
15     resultType:表示输出 结果集单条记录映射的java对象类型,select查询的字段名和resultType中属性名一致,才能映射成功。
16     #{value}:value表示parameter输入参数的变量,如果输入参数是简单类型,使用#{}占位符,变量名可以使用value或其它的名称 
17     
18      -->
19     <select id=getUserById parameterType="int" resultType="user">
20         
21         SELECT * FROM USER WHERE id = #{id}
22     
23     </select>
24     
25     
26     <!-- 查询用户列表(返回list集合) -->
27     <!-- 
28     不管结果集查询一条还是多条,resultType指定结果集单条记录映射的java对象类型
29     ${}:表示sql拼接,相当于sql字符串拼接,无法避免sql注入
30     ${value}:value表示parameter输入参数的变量,如果输入参数是简单类型,使用${}拼接符,变量名必须使用value
31     ${value}直接 将value获取到拼接在sql中,value值不加任何修饰
32      -->
33     <select id="findUserList" resultType="com.etc.po.User" >
34       SELECT * FROM USER
35     </select>
36     
37     
38     <!-- <!-- 添加用户
39     parameterType:如果parameterType指定 是pojo,在#{}中指定 pojo的属性名获取该pojo的属性值 
40      -->
41     <insert id="insertUser" parameterType="com.etc.po.User">
42     
43     
44     keyProperty:将主键设置到pojo中哪个属性中
45     order:selectKey中sql执行的时机
46     resultType:selectKey中sql执行的结果类型
47     LAST_INSERT_ID:是insert后获取自增主键值 
48     
49     <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
50          select LAST_INSERT_ID()
51     </selectKey>
52     insert into user(name,password,sex,birth,age)
53      values(#{name},#{password},#{sex},#{birth},#{age})
54     </insert>
55      -->
56 
57     
58     
59 
60 </mapper>

 

测试类 UserMapperTest.java

 1 package test;
 2 
 3 import java.io.IOException;
 4 import java.io.InputStream;
 5 import java.util.List;
 6 
 7 import org.apache.ibatis.io.Resources;
 8 import org.apache.ibatis.session.SqlSession;
 9 import org.apache.ibatis.session.SqlSessionFactory;
10 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
11 import org.junit.Before;
12 import org.junit.Test;
13 
14 import com.etc.mapper.UserMapper;
15 import com.etc.po.User;
16 
17 public class UserMapperTest {
18 
19     private SqlSessionFactory sqlSessionFactory;
20     
21     @Before
22     public void setUp() throws IOException{
23         
24         
25         String resource = "SqlMapConfig.xml";
26         InputStream inputStream = Resources.getResourceAsStream(resource);
27         sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
28         
29     }
30     
31     
32     
33     @Test
34     public void test1() throws Exception{
35         
36         SqlSession sqlSession = sqlSessionFactory.openSession();
37         UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
38         List<User> users = userMapper.getUsers();
39         System.out.println(users.toString());
40         
41     }
42     
43     
44     @Test
45     public void test2() throws Exception{
46         
47         SqlSession sqlSession = sqlSessionFactory.openSession();
48         UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
49         User user = userMapper.getUserById(1);
50         System.out.println(user);
51         
52     }
53     
54     
55 }

 

 

运行报错如图

 

 

跪求MyBatis高手解答

远歌的主页 远歌 | 菜鸟二级 | 园豆:210
提问于:2016-04-14 11:57
< >
分享
所有回答(1)
0

感觉你的和我用的不一样,你试试我的方法

在UserMapper.xml中加入

<resultMap id="userMap" type="com.etc.po.User">

//对应你的user类--对应表字段

<id property="id" column="id" javaType="java.lang.Long" jdbcType="BIGINT"/>

<result property="name" column="name" javaType="java.lang.String" jdbcType="VARCHAR" />

其他。。。同上

</resultMap>

<select id="findUserList" resultMap="userMap" >  SELECT * FROM USER  </select>

希望能帮到你

悠然886 | 园豆:222 (菜鸟二级) | 2016-04-14 14:45

已经找到问题了,config -- buildpath。谢谢

支持(0) 反对(0) 远歌 | 园豆:210 (菜鸟二级) | 2016-04-14 14:58

@远歌: 你好,我也遇到相同的问题,请问您是怎么解决的呢

支持(0) 反对(0) tsinghua476 | 园豆:200 (初学一级) | 2016-08-09 10:55

@tsinghua476: config 右键->Build Path->Use as Source Folder 

支持(1) 反对(0) 麦田里的稻草人19994 | 园豆:200 (初学一级) | 2016-11-17 21:58

@远歌: 怎么改的呀,我也遇到了

支持(0) 反对(0) 旧城犹在 | 园豆:200 (初学一级) | 2017-03-02 09:10

@麦田里的稻草人19994:谢谢

支持(0) 反对(0) xingyinwang | 园豆:200 (初学一级) | 2017-06-27 13:16

@麦田里的稻草人19994: 2年前的帖子,解决了我困扰三天的问题,感谢!!

支持(0) 反对(0) 晖洒自如 | 园豆:34 (初学一级) | 2018-05-26 14:02
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册