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高手解答
感觉你的和我用的不一样,你试试我的方法
在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>
希望能帮到你
已经找到问题了,config -- buildpath。谢谢
@远歌: 你好,我也遇到相同的问题,请问您是怎么解决的呢
@tsinghua476: config 右键->Build Path->Use as Source Folder
@远歌: 怎么改的呀,我也遇到了
@麦田里的稻草人19994:谢谢
@麦田里的稻草人19994: 2年前的帖子,解决了我困扰三天的问题,感谢!!