开发者

在已经使用mybatis的项目里引入mybatis-plus,结果不能共存的解决

目录
  • 问题产生原因
  • 这里直接贴上我的解决办法
  • myBATis-plus遇到的坑
  • 总结

mybatis-plus版本号:3.0.6

问题产生原因

原有的项目使用的是springboot+mybatis的框架,一切接口服务均没有问题。由于新的需求增加shiro权限认证,然后也在考虑用mybatis-plus,所以权限认证这部分的代码用到了mybatis-plus,使用的过程中新的Dao层也就是Mapper使用都很正常,没有问题,但是在访问之前的接口的时候

问题产生了,报错:

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.company.core.repository.dao.TsContentDao.findList

at com.baomidou.mybatisplus.core.override.PageMapperMethod$SqlCommand.(PageMapperMethod.Java:261)

at com.baomidou.mybatisplus.core.override.PageMapperMethod.(PageMapperMethod.java:58)

at com.baomidou.mybatisplus.core.override.PageMapperProxy.cachedMappeandroidrMethod(PageMapperProxy.java:70)

at com.baomidou.mybatisplus.core.override.PageMapperProxy.invoke(PageMapperProxy.java:63)

at com.sun.proxy.$Proxy91.findList(Unknown Source)

at com.company.console.service.TsContentService.findList(TsContentService.java:551)

at com.company.console.service.TsContentService$$FastClassBySpringCGLIB$$9b0ef0c2.invoke()

at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)

at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:684)

at com.company.console.service.TsContentService$$EnhancerBySpringCGLIB$$dbf1df98.findList()

at com.company.console.service.TsContentService$$FastClassBySpringCGLIB$$9b0ef0c2.invoke()

at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)

at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:684)

at com.company.console.service.TsContentService$$EnhancerBySpringCGLIB$$cdc1e5a2.findList()

at com.company.console.interfaces.controller.TsContentManageController.contents(TsContentManageController.java:60)

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(Mejavascriptthod.java:498)

at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:215)

at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:142)

at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102)

at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895)

at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:800)

at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)

at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1038)

at org.springframework.web.servlet.DispatcherServlet.DOService(DispatcherServlet.java:942)

at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:998)

at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:890)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:634)

at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:875)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)

at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)

at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)

at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)

at org.apache.shiro.web.开发者_开发入门servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)

at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)

at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)

at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:449)

at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365)

at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)

at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)

at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)

at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362)

at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appliwww.devze.comcationFilterChain.java:193)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)

at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99)

at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)

at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:92)

at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)

at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:93)

at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)

at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200)

at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)

at org.apache.catalina.core.StandardwrapperValve.invoke(StandardWrapperValve.java:199)

at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)

at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490)

at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)

at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)

at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngwww.devze.comineValve.java:74)

at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)

at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)

at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)

at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:770)

at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1415)

at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)

at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)

at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)

at java.lang.Thread.run(Thread.java:748)

这里直接贴上我的解决办法

dao或者mapper,还有XML该怎么写还怎么写,只不过需要修改的地方在yml的配置文件里:

将:

mybatis:
mapperlocations: classpath*:mybatis/**/*.xml
configLocation: classpath:sqlmapConfig-admin-mybatis.xml

替换为:

mybatis-plus:
 mapper-locations: classpath*:mybatis/**/*.xml
 config-location: classjavascriptpath:sqlmapConfig-admin-mybatis.xml

mybatis-plus遇到的坑

1. 数据库映射枚举,不能是tinyint(1),tinyint(1)默认是boolean类型

2. 自增主键,数据库设置了自增主键后,po类需要增加@TableId(type = IdType.AUTO),或者不要id字段才能生效。

在已经使用mybatis的项目里引入mybatis-plus,结果不能共存的解决

否则会自动分配id,如下图:

在已经使用mybatis的项目里引入mybatis-plus,结果不能共存的解决

3. mybatis嵌套查询,子查询中需要查出唯一标识

在已经使用mybatis的项目里引入mybatis-plus,结果不能共存的解决

4. 用updateWrapper的update做更新操作,更新时间没有更新问题

数据库updateTime设置了 DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,仍然不会自动更新时间,需要手动设置当前时间,或者用updateById方法

5. 使用lambaQuery时,参数为空会带入到SQL中(branch_code = null),需要手动过滤,或者在eq中增加条件

在已经使用mybatis的项目里引入mybatis-plus,结果不能共存的解决

6. Integer判断为空

在已经使用mybatis的项目里引入mybatis-plus,结果不能共存的解决

7. 基础类型的判断,customerIssueFlag定义的是String类型,值是Y or N

在已经使用mybatis的项目里引入mybatis-plus,结果不能共存的解决

在已经使用mybatis的项目里引入mybatis-plus,结果不能共存的解决

8. 事务

在已经使用mybatis的项目里引入mybatis-plus,结果不能共存的解决

在已经使用mybatis的项目里引入mybatis-plus,结果不能共存的解决

9. mybatis 配置了多个数据库,除了主数据源对应的mapper.java,都不能加 @Mapper 注解,否则会报找不到

由于使用了mybatis-plus的包,默认自动全包扫描@Mapper注解。mybatis扫描生成的Mapper比其他自定义配置的bean生成对应的Mapper对象块,而自定义的mybatis@MapperScan后扫描,Dao Bean已经生成了,无法再指定数据源进行注入了。

所以如果在 @Configrution注解类中指定了扫描类,就不用再加 @Mapper注解了

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新开发

开发排行榜