首页 > 代码库 > IBATIS

IBATIS

CreateTime--2017年5月29日13:56:15
Author:Marydon

一、IBATIS

  iBATIS一词来源于“internet”和“abatis”的组合,是一个由Clinton Begin在2002年发起的开放源代码项目。于2010年6月16号被谷歌托管,改名为MyBatis。是一个基于SQL映射支持Java和·NET的持久层框架。

  (一)基本用法    

  CreateTime--2016年12月9日17:45:21

    1.1.1 iBATIS的isNotNull和isNotEmpty的区别

<isNotNull prepend="," property="FREMARK">    FREMARK = #FREMARK#</isNotNull><isNotEmpty prepend="," property="FBEGINDATE">    FBEGINDATE = TO_DATE(#FBEGINDATE#,‘yyyy-MM-dd‘)</isNotEmpty>

      isNotNull相当于

if(FREMARK){    FREMARK = #FREMARK#}

      该字段内容可以为空,即FREMARK=

      isNotEmpty相当于  

if(FREMARK != null && FREMARK != ""){    FREMARK = #FREMARK#}

      前台传过来的字段中不仅要包括FREMARK,并且FREMARK的内容不能为空,才会执行

  UpdateTime--2017年1月22日15:15:03

    1.1.2 常用标签

      1.1.2.1 字段不等于具体的值:column=="value"  

      语法:

        <isEqual prepend="" property="" compareValue=""></isEqual>

      举例:  

<isEqual prepend="and" property="FCOMLVL" compareValue="-1">    FCOMLVL IS NULL</isEqual>

      1.1.2.2 字段等于具体的值:column!="value"

      语法:

        <isNotEqual prepend="" property="" compareValue=""></isNotEqual>

      举例:

<isNotEqual prepend="and" property="FPLVCODE" compareValue="1">    FPLVCODE=#FPLVCODE#</isNotEqual>

      1.1.2.3 字段不为空:column!=null  

      语法:

        <isNotNull prepend="" property=""></isNotNull>

      举例:

<isNotNull prepend="," property="FJCMYEAR">    FJCMYEAR=#FJCMYEAR#</isNotNull>

      1.1.2.4 字段非空且不是空字符串:column!=null && column!=""

      语法:

        <isNotEmpty prepend="" property=""></isNotEmpty>

      举例:

<isNotEmpty prepend="and" property="FICDFM">    FICDFM=#FICDFM#</isNotEmpty>

      1.1.2.5 字段存在,且为空:column!=null&&column==""

      语法:

        <isEmpty prepend="" property=""></isEmpty>

      举例:        

<isNotEmpty property="CLICOM" >     order by A.FCLINHITS DESC,length(A.FZJM) ASC,FICDCODE </isNotEmpty><isEmpty property="CLICOM">    <isNotEmpty property="HOSCOM" >        order by A.FINHOSHITS DESC,length(A.FZJM) ASC,FICDCODE    </isNotEmpty>    <isEmpty property="HOSCOM">        order by A.FINHOSHITS DESC,length(A.FZJM) ASC,FICDCODE    </isEmpty></isEmpty>

    1.1.2.6 字段不存在:column==null

    语法:

      <isNull prepend="" property=""></isNull>    

    1.1.3 XML文件中如何使用">"和"<"

    方法一:      

      使用
      <![CDATA[

      ]]>

    举例:

<![CDATA[      X1.ORGDEGREE <= #ORGDEGREE_Z#]]>

    方法二:

      大于用 &gt; 表示,小于用 &lt; 表示

    1.1.4 增删改查

<insert id="insertTSORGDIAITEM" parameterClass="map">    INSERT INTO 表名</insert>
<update id="updateTDICTICDCODE"  parameterClass="map">    UPDATE 表名</update>
<delete id="delTSORGDIAITEM" parameterClass="map">    DELETE FROM 表名</delete>
<select id="getTSORGDIAITEM" parameterClass="map" remapResults="true" resultClass="java.util.HashMap" cacheModel="cacheTSORGDIAITEM">    SELECT 字段 FROM 表名</select>

    1.1.5 动态拼接WHERE查询条件

      1.1.5.1 声明动态WHERE条件

<sql id="isReported_where">    <dynamic prepend="where">        <isNotEmpty prepend=" " property="FPROVLEVELLIMIT">            x1.FPROVLEVELLIMIT=#FPROVLEVELLIMIT#        </isNotEmpty>        <isNotEmpty prepend="and" property="FCOUNLEVELLIMIT">            x1.FCOUNLEVELLIMIT=#FCOUNLEVELLIMIT#        </isNotEmpty>        <isNotEmpty prepend="and" property="FTOWNLEVELLIMIT">            x1.FTOWNLEVELLIMIT=#FTOWNLEVELLIMIT#        </isNotEmpty>        <isNotEmpty prepend="and" property="FVILLLEVELLIMIT">            x1.FVILLLEVELLIMIT=#FVILLLEVELLIMIT#        </isNotEmpty>    </dynamic></sql>

      注意:

        a.dynamic prepend="值",这个地方的值视情况而定,一般为""或"where";

        b.isNotEmpty 第一个prepend的值为" "或"and",必须有值。

      1.1.5.2 引用引用SQL

<!-- 引用通用SQL --><include refid="TSORGDIAITEM_WHERE"/>

    1.1.6 ibatis配置文件常用配置

<sqlMapConfig>    <settings cacheModelsEnabled="true" lazyLoadingEnabled="true"        enhancementEnabled="true" useStatementNamespaces="true"        statementCachingEnabled="true" classInfoCacheEnabled="true" /></sqlMapConfig>

    说明:    

cacheModelsEnabled//是否启动ibatis中的缓存功能;lazyLoadingEnabled//是否同时懒加载带来极大的性能提升;useStatementNamespaces//是否使用 domain xml 文件中 namespace 别名配置//iBATIS的默认是不会启动命名空间的,若使用,需声明该值为trueenhancementEnabled//是否需要POJO启动Java字节码增强功能,可以提升getter/setter的调用效能避免Java反射所带来的性能开销。剩下两个默认值都为trueclassInfoCacheEnabled /*With this setting enabled, iBATIS will maintain a cache of introspected classes. This will lead to a  significant reduction in startup time if many classes are reused.*/statementCachingEnabled (iBATIS 2.3.0以后版本中有)/*With this setting enabled, iBATIS will maintain a local cache of prepared statements. This can lead to significant performance improvements.*/

 

      

  

  (二)IBATIS + ORACLE

    1.2.1 分页SQL  

<!-- 开头 --><isNotNull prepend="" property="end">    SELECT * FROM (</isNotNull>
<!-- 结尾 --><isNotNull prepend="" property="end">    <![CDATA[ WHERE ROWNUM<=#END#) WHERE ROWINDEX>=#START# ]]></isNotNull>

    1.2.2 $column$

    执行sql语句时,控制台输出的语句,在该位置不会以问号的形式出现,而是直接填充其对应的值    

    1.2.3 日期类比较大小

<isNotEmpty prepend="and" property="BEGINDATE">    <![CDATA[        T.SCHEDULE_DATE >= TO_DATE(#BEGINDATE#,‘yyyy-MM-dd‘)    ]]></isNotEmpty><isNotEmpty prepend="and" property="ENDDATE">    <![CDATA[        T.SCHEDULE_DATE <= TO_DATE(#ENDDATE#,‘yyyy-MM-dd‘)    ]]></isNotEmpty>

 

 

IBATIS