测试批量插入的时候,遇到个蛋疼的问题,程序抛异常如下
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionException: There is no getter for property named '' in 'class com.lscm.news.models.NewsClickInfo' org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:73) org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:346) com.sun.proxy.$Proxy7.insert(Unknown Source) org.mybatis.spring.SqlSessionTemplate.insert(SqlSessionTemplate.java:231)
这个问题蛋疼的地方就是没有告诉你NewsClickInfo实体类中的哪个属性找不到。
首先查看了myBatisConfiguration.xml,applicationContext.xml,spring.xml等几个配置文件,均没发现问题。
然后怀疑是NewsClickInfo实体类中的某几个属性没有get/set方法
查看NewsClickInfo实体类中的属性
import java.util.Date;
/**
* @author lenovo
* @date 2015-08-10 05:31:33
* @version 1.0
*/
public class NewsClickInfo {
/**
* 流水号
*/
private String id;
/**
* 分类id号
*/
private String classid;
/**
* 新闻id号
*/
private String newsid;
/**
* 访问用户的id
*/
private String appuserid;
/**
* 用户名
*/
private String mobile;
/**
* 访问时间
*/
private Date viewtime;
/**
* 地市编码
*/
private String city_code;
public String getId(){
return id;
}
public void setId (String id){
this.id = id;
}
public String getNewsid(){
return newsid;
}
public void setNewsid (String newsid){
this.newsid = newsid;
}
public String getAppuserid(){
return appuserid;
}
public void setAppuserid (String appuserid){
this.appuserid = appuserid;
}
public String getMobile(){
return mobile;
}
public void setMobile (String mobile){
this.mobile = mobile;
}
public Date getViewtime(){
return viewtime;
}
public void setViewtime (Date viewtime){
this.viewtime = viewtime;
}
public String getClassid() {
return classid;
}
public void setClassid(String classid) {
this.classid = classid;
}
public String getCity_code() {
return city_code;
}
public void setCity_code(String city_code) {
this.city_code = city_code;
}
}
发现所有的属性均有get和set方法。
再看mapper文件中相关的批量插入方法
<insert id="batchInsert" parameterType="java.util.List">
insert into t_newsclick(id,classid,newsid,creatorid,appuserid,mobile,viewtime,city_code)
values
<foreach collection="list" item="item" index="index" separator="," >
(#{item.id},#{item.classid},#{item.newsid},#{item.creatorid},#{item.appuserid},#{item.mobile},#{item.viewtime},#{item.city_code})
</foreach>
</insert>
将字段逐个和NewsClickInfo实体类一个个比对了一下,发现实体类少了一个 creatorid 属性。这样实体类中是7个属性,mapper文件中是8个字段,creatorid对不上号,所以抛了异常。