• ibatis 配置参数解析


    1  parameterClass  是 SQL要传进来的参数的类型。(通常可以是Map对象,也可以是基础数据类型)

    2  resultMap也是你要返回的值类型,字面上理解,它就是结果集的映射,就是将返回的记录逐个字段的映射赋值给对象的属性上。其实如果没有特殊需求的话我们完全可以使用resultclass来代替它,因为如果字段与属性一模一样的话,查询出来数据集会自动匹配到resultclass指定的类的实例对象,如果字段名不在属性中的话,那这个字段将不会被返回的实例体类对象接受,相当于没有查询出这个字段一样的。

    resultMap 有一个重要的发生是class,它将决定这个resultmap对应的实例的类,换句话讲,它的作用是指出结果集要映射的数据类型。

    3 resultclass 指的是在select查询中的返回数据类型

    <![CDATA[ ----sql-----]]>含义

    SQL中经常有与xml规范相冲突的字符对xml映射文件的合法性造成影响。<![CDATA[ ]] 标记来避免冲突,但是在SQl 配置中有动态语句的时候,还是有一些细节需要注意。

    有时候"  <= "  会对xml映射文件的合法性造成影响。

     1 <select id="find" parameterClass="java.util.Map" resultClass="java.lang.Long">  
     2 <![CDATA[    
     3 select id 
     4 from tableA a, 
     5      tableB b 
     6  <dynamic prepend="WHERE"> 
     7  <isNotNull prepend="AND" property="startDate"> 
     8   a.act_time >= #startDate#  
     9   and a.act_time <= #endDate# 
    10   and a.id = b.id  
    11  </isNotNull>     
    12  </dynamic>   
    13   ]]>  
    14 </select>  
    View Code

    在时候,将整个sql语句用<![CDATA[ ]]>标记来避免冲突,在一般情况下都是可行的,但是由于  sql配置中有动态语句 (where  部分),将导致系统无法识别动态判断部分,导致整个SQl语句非法。

     1 <select id="find" parameterClass="java.util.Map" resultClass="java.lang.Long">  
     2 select id
     3 from tableA a,
     4      tableB b
     5  <dynamic prepend="WHERE">
     6  <isNotNull prepend="AND" property="startDate">
     7   a.act_time >= #startDate# 
     8   and a.act_time <= #endDate#
     9   and a.id = b.id 
    10  </isNotNull>    
    11  </dynamic>  
    12 </select>
    View Code

    所以,正确的做法,缩小范围,只对有字符冲突的部分进行标记并调整。

     1 <select id="find" parameterClass="java.util.Map" resultClass="java.lang.Long">  
     2 select id
     3 from tableA a,
     4      tableB b
     5  <dynamic prepend="WHERE">
     6  <isNotNull prepend="AND" property="startDate">
     7   a.act_time >= #startDate# 
     8   <![CDATA[ and a.act_time <= #endDate#  ]]>
     9   and a.id = b.id 
    10  </isNotNull>    
    11  </dynamic>  
    12 </select>
    View Code

    总结,在CDATA的时候,只用把可能产生冲突的那段代码包含就可以了,不要盲目的包含。

    #  与  $  的 区别

    ibatis中,我们使用 sqlMap 进行 sql查询时需要引用 参数,在参数引用中遇到的符号  #  和 $之间的区分为,#可以进行与编译,进行类型匹配,而$不进行数据类型匹配,例如:

    select  *  from table  where  id =#id# ,其中如果字段为字符型,那么#id#表示的就是'id'类型,如果id为整型,那么#id#就是id类型。

    select * from table where id =$id$,如果字段id为整型,sql语句就不会出错,但是如果字段id为字符型,那么sql语句应该写成select *  from table where id ='$id$'

  • 相关阅读:
    openssl自签名证书
    linux系统中查看文件系统类型的几种方法
    python运维常用模块(五)——文件目录对比模块filecmp
    需求流程图最新
    使用LR完成接口测试记录
    html img图片等比例缩放
    C# 只改变一个给定日期时间 的时间部分
    html 的 img 标签如何把base64转换并显示图片
    C# 复制文件到指定文件夹
    Git常用命令及方法大全
  • 原文地址:https://www.cnblogs.com/shuanlei/p/4517799.html
Copyright © 2020-2023  润新知