在ssm整合时,因为是自动生成的代码,后来因为手贱把一个实体类删了,忘记把mapper一起删就开始重新生成实体了
结果报错:nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'studentMapper' defined in file [D:\neko\workspace\ssmAngular\target\classes\com\cq\zys\dao\StudentMapper.class]: Cannot resolve reference to bean 'sqlSessionFactory' while setting bean property 'sqlSessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlSessionFactory' defined in class path resource [spring-mybatis.xml]: Invocation of init method failed; nested exception is org.springframework.core.NestedIOException: Failed to parse mapping resource: 'file [D:\neko\workspace\ssmAngular\target\classes\com\cq\zys\mapping\StudentMapper.xml]'; nested exception is org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. Cause: Result Maps collection already contains value for com.cq.zys.dao.StudentMapper.BaseResultMap
后来找了很久突然发现mapper.xml居然出现了追加部分,即:
<id column="emp_id" jdbcType="BIGINT" property="emp_id" />
<result column="work_number" jdbcType="VARCHAR" property="work_number" />
<result column="role_id" jdbcType="INTEGER" property="role_id" />
<result column="photo" jdbcType="VARCHAR" property="photo" />
<result column="name" jdbcType="VARCHAR" property="name" />
<result column="gender" jdbcType="VARCHAR" property="gender" />
<result column="telephone" jdbcType="VARCHAR" property="telephone" />
<result column="max_advisory" jdbcType="INTEGER" property="max_advisory" />
<result column="introduction" jdbcType="VARCHAR" property="introduction" />
<result column="state" jdbcType="VARCHAR" property="state" />
<result column="create_time" jdbcType="TIMESTAMP" property="create_time" />
</resultMap>这个都出现了三遍,刚好是我重新生成代码的次数,所以原因出来了:
原因:每次自动生成代码前,要把之前已有的mapper.xml和java类一起删了,不然每次自动生成时,
会在已有的xml文件上追加新增部分,不会覆盖而是追加,不是覆盖,不是覆盖,把重复部分删了就解决了