Spring扫面路径配置不全导致异常 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): 的原因

运行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 class ServiceTestClass {

    @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 class CubeServiceImpl implements CubeService {

    @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 class DimServiceImpl implements DimService {

    @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 id="save" 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 id="loadAllDimensions" 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 id="saveDim" 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接口所在包的全路径,问题解决。

 

posted @ 2017-03-13 00:19  格德米斯  阅读(28925)  评论(0编辑  收藏  举报