首页 > 代码库 > 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#]]>
方法二:
大于用 > 表示,小于用 < 表示
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