zoukankan      html  css  js  c++  java
  • MyBatis <if>标签的一些问题

    1、常见错误:

    There is no getter for property named 'parentId' in 'class java.lang.Long'(或者String)

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

    sql是这样写的:

    sql1:

    <select id="queryByParentId" parameterType="long" resultMap="beanMap">
            SELECT * FROM <include refid="t_pt_category"/>
            <where>
                isdel = 0
                <if test="parentId != null">
                    AND parent_id = #{parentId}
                </if>
            </where>
            ORDER BY parent_id
        </select>

    此时,就报了上面的错误。

    解决1:

    把<if>标签去掉传参还是直接传递传递long,如下:sql2

    <select id="queryByParentId" parameterType="long" resultMap="beanMap">
            SELECT * FROM <include refid="t_pt_category"/>
            <where>
                isdel = 0
               AND parent_id = #{parentId}
                <!--<if test="parentId != null">
                    AND parent_id = #{parentId}
                </if> -->
            </where>
            ORDER BY parent_id
        </select>    

    这样也sql2是可以的。

    解决2:保持sql1不变,在dao层把参数换成map类型,

    Map<String, Object> params = new HashMap<>(1);
    params.put("parentId", parentId);

    此时再执行,是可以的。

    (一般通用的全部的参数都是放到map中,这种最常用)

    解决3:改写sql1,如下,全部的参数都换成"_parameter",如下sql3:

    <select id="queryByParentId" parameterType="long" resultMap="beanMap">
            SELECT * FROM <include refid="t_pt_category"/>
            <where>
                isdel = 0
                <if test="_parameter != null">
                    AND parent_id = #{_parameter}
                </if>
            </where>
            ORDER BY parent_id
        </select>

    此时直接传递long也是可以的。

    ps:我还是倾向于第二种解决方法,都用map来进行传参。

  • 相关阅读:
    webserver服务器
    轮子哥的网站地址
    构建javaweb服务的docker镜像和容器化启动服务
    spring-cloud-alibaba-gateway
    markdown-记笔记常用语法
    java-生成公私钥命令
    阿里云oss文件服务器
    mybatis-mapper.xml一个标签支持执行多个sql语句
    docker安装nacos
    spring-cloud-alibaba-nacos
  • 原文地址:https://www.cnblogs.com/gmq-sh/p/5624781.html
Copyright © 2011-2022 走看看