MyBatis Spring MVC Erreur: Invalid lié déclaration (pas trouvé)
Ici est la trace de la pile lorsque j'essaie d'exécuter une requête simple à l'aide de MyBatis:
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.my.package.persistence.BrandMapper.getBrand
org.apache.ibatis.binding.MapperMethod$SqlCommand.<init>(MapperMethod.java:189)
org.apache.ibatis.binding.MapperMethod.<init>(MapperMethod.java:43)
org.apache.ibatis.binding.MapperProxy.cachedMapperMethod(MapperProxy.java:58)
org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:51)
com.sun.proxy.$Proxy25.getBrand(Unknown Source)
com.my.package.service.BrandService.getBrand(BrandService.java:18)
com.my.package.service.BrandService$$FastClassBySpringCGLIB$$1140c60a.invoke(<generated>)
org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:649)
com.my.package.service.BrandService$$EnhancerBySpringCGLIB$$ea6f89cd.getBrand(<generated>)
com.my.package.controller.HomeController.getBrands(HomeController.java:28)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
java.lang.reflect.Method.invoke(Method.java:483)
org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221)
org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137)
org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110)
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:777)
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:706)
org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:943)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:857)
javax.servlet.http.HttpServlet.service(HttpServlet.java:622)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
Je suis en utilisant Javaconfig syntaxe de XML de configuration. Voici mon PersistenceConfig:
@Configuration
@EnableTransactionManagement
@MapperScan("com.my.package.persistence")
public class PersistenceConfig {
@Bean
public DataSource dataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
try {
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql//localhost:3306/db");
dataSource.setUsername("dbuser");
dataSource.setPassword("dbpassword");
} catch (Exception e) {
System.out.print(e);
}
return dataSource;
}
@Bean
public DataSourceTransactionManager transactionManager() {
return new DataSourceTransactionManager(dataSource());
}
@Bean
public SqlSessionFactoryBean sqlSessionFactory() throws Exception {
SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
sessionFactory.setDataSource(dataSource());
sessionFactory.setTypeAliasesPackage("com.my.package.domain");
return sessionFactory;
}
}
Voici mon controller:
@Controller
public class HomeController {
private static Logger logger = LoggerFactory.getLogger(HomeController.class);
@Autowired
private BrandService brandService;
@RequestMapping(value = "/", method = RequestMethod.GET)
public String index() {
return "index";
}
@RequestMapping(value = "/brands", method = RequestMethod.GET)
public String getBrands(Model model) {
model.addAttribute("brands",brandService.getBrand(1));
return "brands";
}
}
Ici est ma Marque de Mappeur de l'Interface:
public interface BrandMapper {
Brand getBrand(int id);
Brand getBrandByName(String name);
List<Brand> getBrandList();
void addBrand(Brand brand);
void updateBrand(Brand brand);
void deleteBrand(int id);
}
Voici mon BrandMapper 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="com.my.package.persistence.BrandMapper">
<select id="getBrand" resultType="Brand" parameterType="int">
SELECT id, name
FROM brand
WHERE id = #{id};
</select>
<select id="getBrandByName" resultType="Brand" parameterType="String">
SELECT id, name
FROM brand
WHERE name = #{name};
</select>
<select id="getBrandList" resultType="Brand">
SELECT id, name
FROM brand;
</select>
<insert id="addBrand" parameterType="Brand">
INSERT INTO brand (id, name)
VALUE (#{id}, #{name})
</insert>
<update id="updateBrand" parameterType="Brand">
UPDATE brand
SET
name = #{name}
where id = #{id}
</update>
<delete id="deleteBrand" parameterType="int">
DELETE FROM brand
WHERE id = #{id}
</delete>
</mapper>
J'ai fait quelques recherches, mais aucune des solutions n'ont fonctionné pour moi. Mon XML Mapper les fichiers sont sous des ressources dans un package nommé "com.mon.package.persistance"
Quelqu'un a une idée de ce qu'est le problème ici?
Merci d'avance
Grande poste, la clarté m'a aidé à résoudre un problème de mon propre.
OriginalL'auteur Jail | 2015-05-06
Vous devez vous connecter pour publier un commentaire.
Essayez de vérifier la mybatis-conf.xml (quel que soit le nom de votre appelé ce fichier) fichier et de voir si vous avez votre mapper de xml comme ceci:
OriginalL'auteur Aldo Ernesto Arias Figueroa
Si vous aviez exécuter la JUNIT de la db code de service, il aurait travaillé. Donc je crois que c'est le probmlem lors de la GUERRE de fichier est généré, à partir de votre configuration *Mapper.java et *Mapper.xml points au même endroit, Donc quand la guerre est gerenated chemin d'accès au dossier pour java et des fichiers xml serait
WEB-INF/classes/com/my/package/persistence
. *Cependant.xml fichier n'est pas copié à l'emplacement. Une façon est de vous configurer le script de construction de copier les fichiers xml ou dans le cas contraire(que je préfère) pour créer sqlmap répertoire dans le répertoire des ressources et de copier tous les xml mapper les fichiers dans le répertoire et le point de mapperfile emplacement à l'aide desessionFactory.setMapperLocations
et une fois la guerre de fichier est généré assurez-vous que sqlmap répertoire est présent dansWEB-INF/classes
répertoireOriginalL'auteur Karthik Prasad
Message d'erreur:
Très probablement due à une mauvaise mappeur la Syntaxe de la Requête. J'ai eu ce problème plusieurs fois et à chaque fois que l'erreur est causée par une mauvaise syntaxe de la requête écrite dans le Mappeur de xml et des fichiers d'interface. Je vous suggère d',
mvn clean
puismvn install
résolu mon problème. Merci!OriginalL'auteur Lucky
Je suppose que Peut-être vous avez besoin d'un @Alias annotation:
@Alias("Marque")
Marque de classe{
...
}
c'est la première chose qui vient à mon esprit, j'espère que ça aide !
OriginalL'auteur S_intg
Supprimer la
;
à partir de la requête:OriginalL'auteur Akash Rajbanshi
Vous devez fournir mapper les endroits initialiser sqlSessionFactory:
Dans votre cas, remplacer "classpath:chemin/vers/mappeurs/*.xml" avec classpath:com/mon/dossier/persistance/*.xml
Espère que cela va vous aider.
OriginalL'auteur JackJonesAngel
J'ai eu ce message d'erreur exact, s'est avéré être l'espace de noms de chemin d'accès dans le mappeur de fichier xml, j'avais changé le nom du package dans l'interface java fichier, mais j'ai oublié de mettre à jour le nom du package dans le maper xml, quelque peu étrange. Mise à jour le paquet de noms et hop!
OriginalL'auteur derek
Votre mapper le fichier doit être dans le même package que l' *Repo.java fichier est. Veuillez vérifier le mappeur de l'espace de noms trop.
OriginalL'auteur Sravan