org.apache.ibatis.binding.BindingException: Mapper method 'com.example.demo.mapper.UserMapper.findCo

<select id="findCountByContditon" resultMap="user" parameterType="com.example.demo.po.User">
        select
        count(id)
        from user
        <where>
            <if test="name != null and name != ''">
                name like  #{name}
            </if>
            <if test="createTime != null">
                and create_time  &lt; #{createTime}
            </if>
        </where>
    </select>

测试代码:

@Test
    public void testUserByCondtion() {
        User user = new User();
        user.setName("%快");
//        user.setCreateTime(new Date());
        Integer countByContditon = userMapper.findCountByContditon(user);
        System.out.println(countByContditon);
    }

代码报错消息:

org.apache.ibatis.binding.BindingException: Mapper method 'com.example.demo.mapper.UserMapper.findCountByContditon attempted to return null from a method with a primitive return type (int).

	at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:102)
	at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:93)
	at com.sun.proxy.$Proxy78.findCountByContditon(Unknown Source)
	at com.example.demo.mapper.UserMapperTest.testUserByCondtion(UserMapperTest.java:106)
	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.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:675)
	at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60)
	at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:125)
	at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:132)
	at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:124)
	at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:74)
	at org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(ExecutableInvoker.java:115)
	at org.junit.jupiter.engine.execution.ExecutableInvoker.lambda$invoke$0(ExecutableInvoker.java:105)
	at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:104)
	at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:62)
	at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:43)
	at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:35)
	at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:104)
	at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:98)
	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$6(TestMethodTestDescriptor.java:202)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:198)
	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:135)
	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:69)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:135)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:125)
	at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:135)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:123)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:122)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:80)
	at java.util.ArrayList.forEach(ArrayList.java:1249)
	at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:125)
	at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:135)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:123)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:122)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:80)
	at java.util.ArrayList.forEach(ArrayList.java:1249)
	at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:125)
	at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:135)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:123)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:122)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:80)
	at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:32)
	at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57)
	at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:51)
	at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:229)
	at org.junit.platform.launcher.core.DefaultLauncher.lambda$execute$6(DefaultLauncher.java:197)
	at org.junit.platform.launcher.core.DefaultLauncher.withInterceptedStreams(DefaultLauncher.java:211)
	at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:191)
	at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:128)
	at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:74)
	at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
	at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
	at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)

2019-12-13 19:55:12.630  INFO 7644 --- [extShutdownHook] com.alibaba.druid.pool.DruidDataSource   : {dataSource-1} closed
2019-12-13 19:55:12.631  INFO 7644 --- [extShutdownHook] o.s.s.concurrent.ThreadPoolTaskExecutor  : Shutting down ExecutorService 'applicationTaskExecutor'

Process finished with exit code -1

刚开始以为数据为空的原因就在count函数加了coalesce默认为0

<select id="findCountByContditon" resultMap="user" parameterType="com.example.demo.po.User">
        select
        coalesce(count(id),0)
        from user
        <where>
            <if test="name != null and name != ''">
                name like  #{name}
            </if>
            <if test="createTime != null">
                and create_time  &lt; #{createTime}
            </if>
        </where>
    </select>

结果还是报错。最后发现原来是返回类型写错了。这里我要的是int类型,结果我我返回user类型。

正确代码:

<select id="findCountByContditon" resultType="int" parameterType="com.example.demo.po.User">
        select
        coalesce(count(id),0)
        from user
        <where>
            <if test="name != null and name != ''">
                name like  #{name}
            </if>
            <if test="createTime != null">
                and create_time  &lt; #{createTime}
            </if>
        </where>
    </select>

结果:

2019-12-13 20:01:51.331  INFO 16112 --- [           main] o.s.s.web.DefaultSecurityFilterChain     : Creating filter chain: any request, [org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@5ea4300e, org.springframework.security.web.context.SecurityContextPersistenceFilter@27d33393, org.springframework.security.web.header.HeaderWriterFilter@443effcb, org.springframework.security.web.csrf.CsrfFilter@53f4c1e6, org.springframework.security.web.authentication.logout.LogoutFilter@709ed6f3, org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter@372ca2d6, org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter@642f9a77, org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter@5a1c3cb4, org.springframework.security.web.authentication.www.BasicAuthenticationFilter@7b306b9f, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@41eb94bc, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@4b97c4ad, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@76ad6715, org.springframework.security.web.session.SessionManagementFilter@517a2b0, org.springframework.security.web.access.ExceptionTranslationFilter@3cd9aa64, org.springframework.security.web.access.intercept.FilterSecurityInterceptor@25aeb5ac]
2019-12-13 20:01:51.556  INFO 16112 --- [           main] com.example.demo.mapper.UserMapperTest   : Started UserMapperTest in 7.569 seconds (JVM running for 9.704)
2019-12-13 20:01:52.362  INFO 16112 --- [           main] com.alibaba.druid.pool.DruidDataSource   : {dataSource-1} inited
Fri Dec 13 20:01:52 CST 2019 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
2019-12-13 20:01:52.583 DEBUG 16112 --- [           main] c.e.d.m.UserMapper.findCountByContditon  : ==>  Preparing: select coalesce(count(id),0) from user WHERE name like ? 
2019-12-13 20:01:52.612 DEBUG 16112 --- [           main] c.e.d.m.UserMapper.findCountByContditon  : ==> Parameters: %快(String)
2019-12-13 20:01:52.642 DEBUG 16112 --- [           main] c.e.d.m.UserMapper.findCountByContditon  : <==      Total: 1
6
2019-12-13 20:01:52.695  INFO 16112 --- [extShutdownHook] com.alibaba.druid.pool.DruidDataSource   : {dataSource-1} closed
2019-12-13 20:01:52.695  INFO 16112 --- [extShutdownHook] o.s.s.concurrent.ThreadPoolTaskExecutor  : Shutting down ExecutorService 'applicationTaskExecutor'

Process finished with exit code 0

 

有兴趣的可以关注公众号:码上行走


版权声明:本文为ldlly0505原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。