Mybatis报错 target is null for method size

org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException:
### Error querying database.  Cause: java.lang.NullPointerException: target is null for method size
### Cause: java.lang.NullPointerException: target is null for method size
        at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:77)
        at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:446)
        at com.sun.proxy.$Proxy147.selectList(Unknown Source)
        at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:230)
        at com.baomidou.mybatisplus.core.override.PageMapperMethod.executeForMany(PageMapperMethod.java:173)
        at com.baomidou.mybatisplus.core.override.PageMapperMethod.execute(PageMapperMethod.java:86)
        at com.baomidou.mybatisplus.core.override.PageMapperProxy.invoke(PageMapperProxy.java:64)
        at com.sun.proxy.$Proxy154.patrolOverviewDeptDetail(Unknown Source)
        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)
        at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:344)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:198)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
        at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:139)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
        at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:212)
        at com.sun.proxy.$Proxy155.patrolOverviewDeptDetail(Unknown Source)
        at com.cserver.saas.system.module.estate.patrol.service.impl.WyPatrolLineServiceImpl.patrolOverviewDetail(WyPatrolLineServiceImpl.java:327)
        at com.cserver.saas.system.module.estate.patrol.service.impl.WyPatrolLineServiceImpl.getPatrolOverviewDetailData(WyPatrolLineServiceImpl.java:250)
        at com.cserver.saas.system.module.estate.patrol.service.impl.WyPatrolLineServiceImpl.downLoadOverviewDetail(WyPatrolLineServiceImpl.java:385)
        at com.cserver.saas.system.module.estate.patrol.service.impl.WyPatrolLineServiceImpl$$FastClassBySpringCGLIB$$31975a5a.invoke(<generated>)
        at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
        at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:685)
        at com.cserver.saas.system.

 真是神奇的,感觉和版本有关系,这样的方式之前完全没啥问题 projects != null and projects.size()>0,现在在这里 却必须要去掉projects.size()>0大小判断,

<if test="projects != null and projects.size()>0 and (areaIds==null or areaIds.size()==0) and opArea=='no'">
    and item.PROJECT in
    <foreach collection="projects" item="project" open="(" separator="," close=")">
        #{project}
    </foreach>
    and t.AREA_ID is null
</if>

 正确表示

<if test="projects != null and (areaIds==null ) and opArea=='no'">
    and item.PROJECT in
    <foreach collection="projects" item="project" open="(" separator="," close=")">
        #{project}
    </foreach>
    and t.AREA_ID is null
</if>
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MyBatis自定义插件是针对MyBatis的四大对象(Executor、StatementHandler、ParameterHandler、ResultSetHandler)进行拦截的。这些对象分别负责执行SQL语句、处理参数、处理查询结果等功能。通过自定义插件,我们可以在这些对象的方法执行前后插入自己的逻辑代码,实现自定义的功能扩展或拦截处理。 要实现一个自定义插件,首先需要定义一个实现了Interceptor接口的类。在这个类中,需要实现intercept()方法和plugin()方法。intercept()方法是要进行拦截的方法,在这个方法中,可以编写我们自己的逻辑代码。plugin()方法用于封装目标对象,可以返回目标对象本身或者返回一个代理对象。 在自定义插件中,通常还可以使用setProperties()方法来配置插件的属性。这些属性可以用于配置接口实现对象的参数。 下面是一个官方示例的自定义插件实现代码: @Intercepts({@Signature(type = Executor.class, method = "query", args = {MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class})}) public class TestInterceptor implements Interceptor { public Object intercept(Invocation invocation) throws Throwable { Object target = invocation.getTarget(); //被代理对象 Method method = invocation.getMethod(); //代理方法 Object[] args = invocation.getArgs(); //方法参数 // 在方法执行前插入自己的逻辑代码 Object result = invocation.proceed(); //调用原方法 // 在方法执行后插入自己的逻辑代码 return result; } public Object plugin(Object target) { return Plugin.wrap(target, this); } } 这只是一个简单的示例,你可以根据自己的需求来编写自定义插件的逻辑代码。通过自定义插件,你可以扩展MyBatis的功能,实现自己的业务需求。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [MyBatis 自定义插件](https://blog.csdn.net/qq_27870421/article/details/120734472)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [mybatis实现自定义插件](https://blog.csdn.net/u013565163/article/details/118033069)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值