Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 312|回复: 0

Mybatis中if标签初次使用带来的异常问题以及解决方案

[复制链接]
  • TA的每日心情
    奋斗
    2024-9-22 15:19
  • 签到天数: 795 天

    [LV.10]以坛为家III

    2050

    主题

    2108

    帖子

    72万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    724084
    发表于 2021-6-14 12:17:51 | 显示全部楼层 |阅读模式

    问题 :

    org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'unitId' in 'class java.lang.Integer'...

    那么什么情况下会发生“There is no getter for property named in ‘class java.lang.Integer’”错误呢?

    其实是在这种情况下:

     <select id="getRiskMember" resultMap="BaseResultMap" parameterType="Integer">
        select * from Classdemo
        <where> <if test="id!= null"> and id= #{id} </if>
        </where>
    </select>

    注意看,是在if test=验证的时候发生的 “There is no getter for property named in ‘class java.lang.Integer’”,

    而并非是and id= #{id} 的时候发生的错误。

    解决方案:

    1.用" _parameter "来代替。

    <select id="getRiskMember" resultMap="BaseResultMap" parameterType="Integer">

        select * from Classdemo
        <where>
          <if test="_parameter != null">

            and id= #{id}
           </if>

        </where>

    </select>

     
    

     2.全部的参数都换成"_parameter",

    <select id="queryById" parameterType="long" resultMap="HashMap">
        SELECT * FROM <include refid="t_pt_category"/>
            <where>
                1 = 1
                <if test="_parameter != null">
                    AND id = #{_parameter}
                </if>
            </where>
            ORDER BY id
    </select>

    3.多个参数出现的错误解决

    if 标签中常见的多判断条件的错误写法: 

    <if test=" takeWay == '1' and workday != null "> 

    改为<if test='takeWay == "1" and workday != null '>   请注意符号 "" 即可。

    或改为<if test="takeWay == '1'.toString() and workday != null "> 即可。

    原因是:mybatis是用OGNL表达式来解析的,在OGNL的表达式中,’1’会被解析成字符,

    而java是强类型的,char 和 一个string 会导致不等,所以if标签中的sql不会被解析。 

    总结下使用方法:单个的字符要写到双引号里面,或者使用.toString()才能解决!

    <select id="getExperienceMapper" resultType="HashMap" parameterType="Integer">
      select DISTINCT o.NAME, p.PLAIN_NUM, p.CURRENT_NUM

         from cpc_organization o, cpc_plan p, cpc_meeting m
        <where>
          <if test="_parameter != null">
            and m.PLAN_ID=p.ID and m.ORG_ID=o.PARENT_ID
          </if>
          <if test=' "_parameter==1" '>
            and m.END_TIME between '2018-01-01' and '2018-03-31'
          </if>
        </where>
    </select>

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-10-6 04:29 , Processed in 0.059898 second(s), 29 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表