mybatis-plus Invalid bound statement 解决之道

话说我前面也写了一篇,不过问题和现在不一样。应该算是深入版本。

问题1 配置好之后,使用mybatisPlugs的插件生成的sql没有问题,执行自定义的sql出现Invalid bound statement (not found...

   定位过程:定位MybatisMapperAnnotationBuilder类的parse()方法里面的 loadXmlResource(),发现xml完全没有读取进去

            try {
                    inputStream = Resources.getResourceAsStream(type.getClassLoader(),                 
                                  xmlResource);
                } catch (IOException e2) {
                    // ignore, resource is not required
                }

 问题原因:

     当前xml目录有多个路径,另外配置config的时候,对应的xml目录配置的不对。

      通过debug 如下配置的getResources(url)发现匹配不到对应的xml,当前路径的正则是错误的。原因有

     1、如果当前是多个目录

      技巧:虽然配置的是classpath:packageXmlMapper/*Mapper.xml,实际定位的是target对应的目录。

sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/*Mapper.xml,/mapper/base/*Mapper.xml"));

   解决方式:请参考 https://blog.csdn.net/TreeShu321/article/details/104547973/

问题2  mapper的构成方式是父子方式,导致启用的时候,报“XML fragments parsed from previous mappers does not contain”

      问题原因:在父子类mapper上加了@mapper注解,导致认为是独立的个体,破坏了继承关系。

       解决方式:删除即可。

问题3 执行Mpp 自己编写的sql没有问题,调用baseMapper的方法则不行。

     问题到位:实际还是一样的套路,发现原生的sql没有注入。

     解决办法:看代码吧。

//正确的
@Bean
private SqlSessionFactory SqlSessionFactory {
    MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();
    ...
    return bean.getObject();
}
//错误的
@Bean
private MybatisSqlSessionFactoryBean SqlSessionFactory {
    MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();
    ...
    return bean;
}

 

 

你可能感兴趣的:(mysql)