mybatis中加了if标签做判断,为什么报如下错误

发布于 2022-09-13 01:05:44 字数 2437 浏览 14 评论 0

<select id="selectcallHour" parameterType="java.lang.String" resultType="com.sunyard.monitor.domain.General" resultMap="callHour">

        select *
        from abc t1
                 left join def t2
                           on t1.object_id = t2.object_id
        where t2.object_name in
              <if test="opt!=null and '0'== opt">
                  ('GRQU_ALL')
              </if>
                <if test="opt!=null and '1' == opt">
                    ('ZH_MM','XYK_MM')
                </if>

          and substr(time_key, 1, 8) = to_char(trunc(sysdate), 'yyyymmdd')
        

    </select>
2021-08-11 17:39:19.169  INFO 72216 --- [           main] com.sunyard.monitor.runner.GenesysInit   : 项目启动完毕,初始化genesys完毕
2021-08-11 17:39:23.406  INFO 72216 --- [nio-8000-exec-2] o.a.c.c.C.[.[localhost].[/monitor]       : Initializing Spring DispatcherServlet 'dispatcherServlet'
2021-08-11 17:39:23.410  INFO 72216 --- [nio-8000-exec-2] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
2021-08-11 17:39:23.412  INFO 72216 --- [nio-8000-exec-2] o.s.web.servlet.DispatcherServlet        : Completed initialization in 2 ms
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'opt' in 'class java.lang.String'
    at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:77)
    at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:446)
    at com.sun.proxy.$Proxy59.selectList(Unknown Source)
    at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:230)
    at org.apache.ibatis.binding.MapperMethod.executeForMany(MapperMethod.java:147)
    at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:80)
    at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:58)
    at com.sun.proxy.$Proxy60.selectcallHour(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)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

扶醉桌前 2022-09-20 01:05:44

首先mybatis查询入参一般使用@Param注解

List<Integer> selectCallHour(@Param("opt") String opt);

之后可以在sql中使用opt进行条件判断/#{opt}取到值

其次mybatis不支持IN (XXX,XXX)的直接写法,需要将IN的集合处理为入参查询;
多个list入参需要构造一个entity传参,下面我给你补充了

1. 多list入参查询entity

image.png

2.入参处理+mapper方法调用

image.png

3.mapper.java

image.png

4.mapper.xml

image.png

控制台sql+输出打印

1.不传opt(null)

image.png

2.opt=0

image.png

3.opt=1

image.png

夜司空 2022-09-20 01:05:44
<select id="selectcallHour" parameterType="java.lang.String" resultType="com.sunyard.monitor.domain.General" resultMap="callHour">
        select *
        from abc t1
                 left join def t2
                           on t1.object_id = t2.object_id
    <where> 
        t2.object_name in
        <if test="opt!=null and '0'== opt">
                  ('GRQU_ALL')
        </if>
        <if test="opt!=null and '1' == opt">
                    ('ZH_MM','XYK_MM')
        </if>
        and substr(time_key, 1, 8) = to_char(trunc(sysdate), 'yyyymmdd')
    </where>

</select>
隔岸观火 2022-09-20 01:05:44

你可以去掉parameterType="java.lang.String"
mapper
image.png
xml
image.png

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文