2016-04-09 3 views
1

mybatis-spring-boot-samplemybatis-весна-загрузки, org.apache.ibatis.binding.BindingException: Invalid связано заявление

добавить услугу, чтобы получить CityMapper по @Autowired, но это не удалось. я изменил кое-что, как следующие показы:

@SpringBootApplication 
public class SampleMybatisApplication implements CommandLineRunner { 

    @Autowired 
    private CityService cityService; 

    public static void main(String[] args) { 
     SpringApplication.run(SampleMybatisApplication.class, args); 
    } 

    @Override 
    public void run(String... args) throws Exception { 
     System.out.println(this.cityService.getCityById(1L)); 
    } 

} 

добавить услугу:

public interface CityService { 
    City getCityById(Long id); 
} 

и его реализации:

@Service 
public class CityServiceImpl implements CityService { 

    @Autowired 
    private CityMapper cityMapper; 

    @Override 
    public City getCityById(Long id) { 
     City city = null; 
     try{ 
      city = cityMapper.selectCityById(id); 
      // maybe, I want to do something else over here. 
     }catch (Exception e) { 
      e.printStackTrace(); 
     } 
     return city; 
    } 

} 

и CityMapper:

@Repository 
public class CityMapper { 

    @Autowired 
    private SqlSessionTemplate sqlSessionTemplate; 

    public City selectCityById(long id) { 
     return this.sqlSessionTemplate.selectOne("selectCityById", id); 
    } 

} 

и появляется сообщение об ошибке:

2016-04-09 16:38:47.400 ERROR 2017 --- [   main] o.s.boot.SpringApplication    : Application startup failed 

java.lang.IllegalStateException: Failed to execute CommandLineRunner 
    at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:795) [spring-boot-1.3.0.RELEASE.jar:1.3.0.RELEASE] 
    at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:776) [spring-boot-1.3.0.RELEASE.jar:1.3.0.RELEASE] 
    at org.springframework.boot.SpringApplication.afterRefresh(SpringApplication.java:763) [spring-boot-1.3.0.RELEASE.jar:1.3.0.RELEASE] 
    at org.springframework.boot.SpringApplication.doRun(SpringApplication.java:356) [spring-boot-1.3.0.RELEASE.jar:1.3.0.RELEASE] 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:295) [spring-boot-1.3.0.RELEASE.jar:1.3.0.RELEASE] 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1112) [spring-boot-1.3.0.RELEASE.jar:1.3.0.RELEASE] 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1101) [spring-boot-1.3.0.RELEASE.jar:1.3.0.RELEASE] 
    at sample.mybatis.SampleMybatisApplication.main(SampleMybatisApplication.java:35) [classes/:na] 
Caused by: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): sample.mybatis.service.CityService.getCityById 
    at org.apache.ibatis.binding.MapperMethod$SqlCommand.<init>(MapperMethod.java:196) ~[mybatis-3.3.0.jar:3.3.0] 
    at org.apache.ibatis.binding.MapperMethod.<init>(MapperMethod.java:44) ~[mybatis-3.3.0.jar:3.3.0] 
    at org.apache.ibatis.binding.MapperProxy.cachedMapperMethod(MapperProxy.java:59) ~[mybatis-3.3.0.jar:3.3.0] 
    at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:52) ~[mybatis-3.3.0.jar:3.3.0] 
    at com.sun.proxy.$Proxy35.getCityById(Unknown Source) ~[na:na] 
    at sample.mybatis.SampleMybatisApplication.run(SampleMybatisApplication.java:40) [classes/:na] 
    at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:792) [spring-boot-1.3.0.RELEASE.jar:1.3.0.RELEASE] 
+0

, и я не изменил ни одного другого файла, кроме того, что я вам показываю. –

+0

Ошибка говорит о том, что вам не хватает –

ответ

0

Есть ли какая-то конкретная причина для вашей реализации?

ошибка предположить, что вам не хватает из картографа, который обычно делается в одном из следующих способов:

public interface CityMapper { 
    @Select("your sql statement") 
    public City selectCityById(long id); 
} 

Или

public interface CityMapper{ 
    public City selectCityById(long id); 
} 

с

CityMapper.xml

<?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="CityMapper"> 
    <select id="findById" resultType="City"></select> 
</mapper> 
+0

CityMapper - это не интерфейс, это обычный класс. –

+0

Как я уже сказал, то, что я проиллюстрировал, является более распространенным использованием mybatis, если вы предпочитаете подход с нормальным классом, пожалуйста, прочитайте больше на http://www.mybatis.org/spring/sqlsession.html –

0

Это ошибка в mybatis-spring-boot-starter. Ваш интерфейс CityMapper был автоматически зарегистрирован как картограф, и он не должен. 1.1.0 исправляет это.

0

В моем случае, я генератор mapper.xml с помощью mybatis-генератор,

и точка, я переместить этот файл в другой пакет: com.xxx.cust.mapper в com.xxx.frame .mapper, поэтому <mapper namespace="com.xxx.cust.mapper.XXXMapper"> ошибочен.

0

В моем случае это было суммарно разные я имел 2 баночки и по ошибке оба JARS имели одни и те же XML-файлы в том же пространстве имен

Это сделало проблема приходит и уходит, так как ошибка зависит от того, загрузки банок внутри tomcat