cencenhai 发表于 2017-12-25 08:36:43

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]
查看完整版本: Spring扫面路径配置不全导致异常 org.apache.ibatis.binding.BindingException: Invalid bound sta