• 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接口所在包的全路径,问题解决。

  • 相关阅读:
    C# 语言基础(++和--运算)
    Android RSA加密解密
    laravel redis
    larave5.1l队列
    shell更改目录编码
    Linux的权限说明
    MySQL主从架构之Master-Master互为主备
    php curl流方式远程下载大文件
    php session 跨页失效问题
    mysql中文字段转拼音首字母,以及中文拼音模糊查询
  • 原文地址:https://www.cnblogs.com/bgo-tech/p/6540518.html
Copyright © 2020-2023  润新知