• 关于Mybatis的几个问题


    今天在用mybatis开发的时候遇到两个问题,下面一一列出并给出解决方案。

    问题一

    最开始我设置的实体类中有个字段如isParent为boolean类型,set和get方法是eclispe自动生成的。

        private boolean isParent;
    
        public boolean isParent() {
            return isParent;
        }
    
        public void setParent(boolean isParent) {
            this.isParent = isParent;
        }    

    在xml中是这么写的

    <select id="getChildrenByParentId" parameterType="java.lang.String" resultType="org.sjzcgl.common.data.CommonTree">
            SELECT ID,
                   NAME,
                   CASE
                     WHEN EXISTS (SELECT 1 FROM TREE_YJS A WHERE A.PARENT_ID = T.ID) THEN
                      '1'
                     ELSE
                      '0'
                   END isParent,
                   PARENT_ID parentId,
                   IS_METADATA_TYPE isMetadataType,
                   SFYX
              FROM TREE_YJS T
              WHERE T.SFYX = '1'
                <if test="_parameter != null and _parameter != ''">
                    AND T.PARENT_ID = #{0,jdbcType=VARCHAR}
                </if>
                <if test="_parameter == null or _parameter == ''">
                    AND T.PARENT_ID IS NULL
                </if>
        </select>

    其中CASE WHEN EXISTS (SELECT 1 FROM TREE_YJS A WHERE A.PARENT_ID = T.ID) THEN '1' ELSE '0' END isParent ,对于isParent这个字段无论是返回的是字符串‘1’、‘0‘,还是数字1、0,又或者直接是true、false都不能转换为booean。

    解决方案:将isParent修改为String类型,并且修改get方法。

     

        private String isParent;
    
        public void setParentId(String parentId) {
            this.parentId = parentId;
        }
                
        public boolean getIsParent() {
            if(this.isParent.equals("1"))
                return true;
            else
                return false;
        }

     

    问题二

    还是这个xml,入参是String类型,但是在<if>标签里面(红色部分)不识别。

     

        <select id="getChildrenByParentId" parameterType="java.lang.String" resultType="org.sjzcgl.common.data.CommonTree">
            SELECT ID,
                   NAME,
                   CASE
                     WHEN EXISTS (SELECT 1 FROM TREE_YJS A WHERE A.PARENT_ID = T.ID) THEN
                      '1'
                     ELSE
                      '0'
                   END isParent,
                   PARENT_ID parentId,
                   IS_METADATA_TYPE isMetadataType,
                   SFYX
              FROM TREE_YJS T
              WHERE T.SFYX = '1'
                <if test="parentId != null and parentId != ''">
                    AND T.PARENT_ID = #{0,jdbcType=VARCHAR}
                </if>
                <if test="parentId == null or parentId == ''">
                    AND T.PARENT_ID IS NULL
                </if>
        </select>

     

    解决方案:后来查到原因,在mybatis中String参数只用了一次,就不会报错,如果第二段代码还用来判断了不为空,多次使用的话,它就会报错,经更改之后的代码如下,将参数改为_parameter,这样它就会知道,你一直使用的都是传进来的String。

     

        <select id="getChildrenByParentId" parameterType="java.lang.String" resultType="org.sjzcgl.common.data.CommonTree">
            SELECT ID,
                   NAME,
                   CASE
                     WHEN EXISTS (SELECT 1 FROM TREE_YJS A WHERE A.PARENT_ID = T.ID) THEN
                      '1'
                     ELSE
                      '0'
                   END isParent,
                   PARENT_ID parentId,
                   IS_METADATA_TYPE isMetadataType,
                   SFYX
              FROM TREE_YJS T
              WHERE T.SFYX = '1'
                <if test="_parameter != null and _parameter != ''">
                    AND T.PARENT_ID = #{0,jdbcType=VARCHAR}
                </if>
                <if test="_parameter == null or _parameter == ''">
                    AND T.PARENT_ID IS NULL
                </if>
        </select>

     

     

     

     

    身体是革命的本钱,爱跑步,爱生活!
  • 相关阅读:
    Internet Explorer 11:不要再叫我IE
    C#汉字转拼音
    winfrom设置当前画面始终显示在最前面
    解决 winform打开网页 和WebBrowser打开链接360误报拦截的问题
    dataGridView使用指南系列一、回车换行或换列完美解决方案
    C#--WinForm项目主窗体设计
    C#后台解析 json 动态解析 通用(Dictionary)
    在windows下安装git中文版客户端并连接gitlab
    检测到在集成的托管管道模式下不适用的ASP.NET设置的解决方法(非简单设置为【经典】模式)
    关闭窗体后,进程仍然在运行的问题重现与解决
  • 原文地址:https://www.cnblogs.com/caozx/p/8858171.html
Copyright © 2020-2023  润新知