• 使用ibatis开发遇到的问题总结


    开发过程中遇到问题:

    1.项目开发过程中在xml配置文件中使用$tableName$时,报"列名无效"错误,后来经过查询,发现是ibatis缓存

    了上一次查询的表结构的原因。解决办法:只需要在元素中添加  remapResults="true" 即可。

    1 <select id="select" resultClass="java.util.HashMap"  >
    2                 select * from $tableName$ where id=#id#
    3 </select>

    该查询结果映射到HashMap中,第一次使用这个语句是没有问题,但是当使用这个语句查询别的表时,报错为“列名无效”,

    分析之后原因为ibatis对上个表的结构进行了映射缓存,从结果集到HashMap的映射时按照缓存中表字段进行装载。

    使用remapResults这个属性,可以重新映射结果集

    1 <select id="select" resultClass="java.util.HashMap" remapResults="true"   >
    2         select * from $tableName$ where id=#id#
    3 </select>

    2:在ibatis的配置文件中,经常会使用parameterClass="java.util.Map",这种用法是可以的,因为map是接口

    是多态的典型用法,但是如果这样写resultClass="java.util.Map"就会报错,不能实例化对象,就是ibatis不能把

    查询到的数据映射到map接口上,解决方法:修改成resultClass="java.util.HashMap"即可。

    3:项目中遇到ibatis中parameterClass = "java.util.List" 时,那么sql语句拼接如下:

    1 <select id="selectSqlId"   parameterClass="java.util.List"  resultClass="java.util.HashMap">
    2   SELECT *
    3   FROM table_name
    4   WHERE name IN
    5   <iterate close=")" open="("  conjunction=",">
    6                 #[]#
    7   </iterate> 
    8  </select>

    4:isNull、isNotNull、isEmpty、isNotEmpty、isEquals

    则几种判断元素在ibatis中用的很多,isNotNull和isNotEmpty用的比较多,

    比如在select的where条件里,如果字段存在就拼接,不存在就不拼接

     1 <select id="selectSqlId" parameterClass="java.util.Map">
     2     select * from tableName
     3     where 1=1
     4     <isNotNull prepend="AND" property="id">
     5         id = #id#
     6 </isNotNull>
     7     <isNotNull prepend="AND" property="name">
     8         name = #name#
     9 </isNotNull>
    10 </select>

    就是如果id存在,就拼接上id这个查询条件,不存在就没有这个条件限制,name也是这样。

    isNotEmpty的用法和isNotNull一样,只是稍微有一点区别,就是isNotEmpty包括空字符串和null

    而isNotNull只包括null。

    isNULL和isEmpty的用法相反。

    isEquals:判断是否等于,等于的话就走这条分支,如下:

    1 <update id="updateSqlId" parameterClass="java.lang.String">
    2     update table_name set update_date = sysdate
    3     <isEquals prepend="," property="id1">
    4       id1=#value#
    5     </isEquals>
    6     <isEquals prepend="," property="id2">
    7       id2=#value#
    8     </isEquals>
    9 </update>

    可以根据具体情况灵活应用。

  • 相关阅读:
    前端面试题总结(js、html、小程序、React、ES6、Vue、算法、全栈热门视频资源)
    steps 步骤条、时间轴
    碰撞检测经典解决方案
    延迟渲染(Deferred Shading)技术详解
    配备透明触摸屏 看3D全息投影概念手机
    预渲染技术
    APK改之理(APK IDE)修改APK简单的入门教程
    如何获取显卡的GPU占用率和显存占用情况
    图像编辑之对比度调整 亮度对比度的算法公式
    别被你的双眼所欺骗 100张神奇的视觉欺骗图
  • 原文地址:https://www.cnblogs.com/warrior4236/p/6055748.html
Copyright © 2020-2023  润新知