Spring扫面路径配置不全导致异常 org.apache.ibatis.binding.BindingException: Invalid bound sta
运行Junit测试类package cn.bgodata.x.zero.service;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import cn.bgodata.x.zero.core.model.Cube;
import cn.bgodata.x.zero.core.model.Z0Dimension;
import cn.bgodata.x.zero.dao.CubeDAO;
import cn.bgodata.x.zero.dao.DimensionDAO;
@RunWith(SpringJUnit4ClassRunner.
class)
@ContextConfiguration({
"classpath:spring/spring-dao.xml","classpath:spring/spring-service.xml"})
public>
@Autowired
private DimService dimService; @Autowired
private CubeService cubeService; @Autowired
private CubeDAO cubeDao; @Autowired
private DimensionDAO dimDao; @Test
public void TXtestTX() throws Exception { Cube c1
= new Cube(); c1.setWormholeId(
80001); c1.setWormholeCode(
"great cube"); c1.setName(
"切片与切块Cube"); Z0Dimension dim
= new Z0Dimension(); dim.setWormholeId(
80999); dim.setWormholeCode(
"multi-dimensional domain: 维度"); dim.setName(
"行政划分"); dim.setCube(c1);
dimService.saveDim(dim);
cubeService.saveCube(c1,
false); }
}
抛出异常
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): cn.bgodata.x.zero.service.DimService.save
at org.apache.ibatis.binding.MapperMethod$SqlCommand.<init>(MapperMethod.java:196)
at org.apache.ibatis.binding.MapperMethod.<init>(MapperMethod.java:44)
at org.apache.ibatis.binding.MapperProxy.cachedMapperMethod(MapperProxy.java:59)
at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:52)
at com.sun.proxy.$Proxy19.save(Unknown Source)
at cn.bgodata.x.zero.service.ServiceTestClass.TXtestTX(ServiceTestClass.java:36)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
检查service接口及实现、dao接口及实现、dimension-mapper.xml、cube-mapper.xml,以及源码和配置文件路径,皆无误
package cn.bgodata.x.zero.dao;
import cn.bgodata.x.zero.core.model.Cube;
public interface CubeDAO {public int save(Cube cube);
}
package cn.bgodata.x.zero.dao;
import java.util.List;
import cn.bgodata.x.zero.core.model.Z0Dimension;
public interface DimensionDAO {public List<Z0Dimension> loadAllDimensions();public int saveDim(Z0Dimension dim);
}
package cn.bgodata.x.zero.service;
import cn.bgodata.x.zero.core.model.Cube;
public interface CubeService {
public void saveCube(Cube c, boolean throwExFlag);
}
package cn.bgodata.x.zero.service;
import cn.bgodata.x.zero.core.model.Z0Dimension;
import cn.bgodata.x.zero.dao.DimensionDAO;
public interface DimService {
public void saveDim(Z0Dimension dimension);public DimensionDAO getDimensionDAO();
}
package cn.bgodata.x.zero.service.impl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import cn.bgodata.x.zero.core.model.Cube;
import cn.bgodata.x.zero.dao.CubeDAO;
import cn.bgodata.x.zero.service.CubeService;
@Service
public>
@Autowired
private CubeDAO cubeDao;
// @Override public void saveCube(Cube c, boolean throwExFlag) {
System.out.println("save cube count is [" + cubeDao.save(c) + "]");
if (throwExFlag) {
throw new RuntimeException("test tx ...");
}
}
}
package cn.bgodata.x.zero.service.impl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import cn.bgodata.x.zero.core.model.Z0Dimension;
import cn.bgodata.x.zero.dao.DimensionDAO;
import cn.bgodata.x.zero.service.DimService;
@Service
public>
@Autowired
private DimensionDAO dimDao;
// @Override public void saveDim(Z0Dimension dimension) {
System.out.println("save dimension count is [" + dimDao.saveDim(dimension) + "]");
}
@Override
public DimensionDAO getDimensionDAO() {
// TODO Auto-generated method stub
return dimDao;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.bgodata.x.zero.dao.CubeDAO">
<insert parameterType="Cube">
insert ignore into WORMHOLE_CUBE (wormhole_id, wormhole_code, name)
values (#{wormholeId}, #{wormholeCode}, #{name})
</insert>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.bgodata.x.zero.dao.DimensionDAO">
<select resultType="Z0Dimension">
select
wc.name 'cube.name',
wc.wormhole_code 'cube.wormhole_code',
wc.wormhole_id 'cube.wormhole_id',
wd.name,
wd.wormhole_code,
wd.wormhole_id
from WORMHOLE_CUBE wc inner join WORMHOLE_DIMENSION wd
on wc.wormhole_id = wd.cube_id
</select>
<insert parameterType="Z0Dimension">
insert ignore into WORMHOLE_DIMENSION (wormhole_id, wormhole_code, name, cube_id)
values (#{wormholeId}, #{wormholeCode}, #{name}, #{cube.wormholeId})
</insert>
</mapper>
导致问题的原因在 spring-dao.xml
spring-dao.xml中配置的DAO接口扫描路径不是完全包名(导致异常的原因)
修改 spring-dao.xml
将扫描路径配置为DAO接口所在包的全路径,问题解决。
页:
[1]