ibatis : sqlMap 的一般配置
// 比较标准的sqlMap配置,省略sql-map-config.xml..
CebitCorpInfo.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMap
PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN"
"http://www.ibatis.com/dtd/sql-map-2.dtd">
<sqlMap namespace="CebitCorpInfo">
<typeAlias alias="supply" type="com.biz518.product.domain.Supply" />
<resultMap id="info_map" class="com.biz.cebit.domain.CebitCorpInfo">
<result property="id" column="id"/>
<result property="title" column="title"/>
<result property="content" column="content" jdbcType="CLOB" javaType = "java.lang.String"/>
<result property="issdate" column="issdate"/>
<result property="corpid" column="corpid"/>
</resultMap>
<select id="getCebitCorpInfoById" parameterClass="java.lang.Integer" resultMap="info_map">
select * from cebitcorpinfo where id = #value#
</select>
<select id="getCebitCorpInfoListByCorp" parameterClass="java.lang.Integer"
resultClass="com.biz.cebit.domain.CebitCorpInfo">
select * from cebitcorpinfo where corpid = #value#
</select>
<update id="updateCebitCorpInfo" parameterClass="com.biz.cebit.domain.CebitCorpInfo">
update cebitcorpinfo set
<isNotEqual prepend="" property="id" compareValue="0">
id=#id#
</isNotEqual>
<isNotEmpty prepend="," property="title">
title=#title#
</isNotEmpty>
<isNotEmpty prepend="," property="content">
content=#content#
</isNotEmpty>
<isNotEqual prepend="," property="corpid" compareValue="0">
corpid=#corpid#
</isNotEqual>
<isNotEmpty prepend="," property="issdate">
issdate=#issdate#
</isNotEmpty>
<dynamic prepend="where">
<isNotEqual prepend="" property="id" compareValue="0">
id=#id#
</isNotEqual>
</dynamic>
</update>
<delete id="delCebitCorpInfoById" parameterClass="java.lang.Integer">
delete from cebitcorpinfo where id = #value#
</delete>
<insert id="insertCebitCorpInfo" parameterClass="com.biz.cebit.domain.CebitCorpInfo">
<selectKey resultClass="int" keyProperty="id">
SELECT seq_cebitcorpinfo.NEXTVAL FROM DUAL
</selectKey>
insert into cebitcorpinfo(
<isNotEmpty prepend="" property="id">
id
</isNotEmpty>
<isNotEmpty prepend="," property="title">
title
</isNotEmpty>
<isNotEmpty prepend="," property="content">
content
</isNotEmpty>
<isNotEmpty prepend="," property="corpid">
corpid
</isNotEmpty>
<isNotEmpty prepend="," property="issdate">
issdate
</isNotEmpty>
)values(
<isNotEmpty prepend="" property="id">
#id#
</isNotEmpty>
<isNotEmpty prepend="," property="title">
#title#
</isNotEmpty>
<isNotEmpty prepend="," property="content">
#content#
</isNotEmpty>
<isNotEmpty prepend="," property="corpid">
#corpid#
</isNotEmpty>
<isNotEmpty prepend="," property="issdate">
#issdate#
</isNotEmpty>
)
</insert>
</sqlMap>
// typeAlias 别名
// parameterClass 是指传入的参数类型
// 当查询结果中有 CLOB 时,可以使用 resultMap 来处理 (一般正常情况直接用 resultClass = 某个VO类)
// <isNotEqual prepend="" property="id" compareValue="0"> id = #id# </isNotEqual> 意思是当这个 id (property) 不等于(isNotEqual) 0 (compareValue) 的时候 , 添加 id = #id# , prepend是"预先"的意思,指在 id = #id# 前面需要加的
// isNotEmpty 和 isNotEqual 类似,意思是 不为空时. 由于 id 是 int 类型,所以用了 isNotEqual
// <dynamic prepend="where"> 是指 当满足条件时,动态加一个 where
// <selectKey> 支持主键自动生成,keyProperty="id"定义了主键名称
<!-- Oracle -->
<insert id="insertProduct-ORACLE" parameterClass="com.domain.Product">
<selectKey resultClass="int" keyProperty="id" >
SELECT STOCKIDSEQUENCE.NEXTVAL AS ID FROM DUAL
</selectKey>
insert into PRODUCT (PRD_ID,PRD_DESCRIPTION) values (#id#,#description#)
</insert>
<!-- Microsoft SQL Server -->
<insert id="insertProduct-MS-SQL" parameterClass="com.domain.Product">
insert into PRODUCT (PRD_DESCRIPTION) values (#description#)
<selectKey resultClass="int" keyProperty="id" >
SELECT @@IDENTITY AS ID
</selectKey>
insert 对应数据库的 insert 操作,该操作返回本次操作插入记录的主键值。
select 对应数据库的 select 操作,该操作返回特定的 POJO 或 对象。
update 对应数据库的 update 操作,该操作返回被更新的记录个数。
delete 对应数据库的 delete 操作,该操作返回被删除的记录个数。
procedure 对应数据库存储过程。
statement 类型最为通用,可以代替以上所有的类型。但由于缺乏操作直观性故不推荐。
</insert>
// 注意: 当数据库字段名和类中属性名不一样时,需要隐式转换下,DEMO如下:
<statement id="getPoduct" resultClass="com.iatis.example.Product">
select
PRD_ID as id,
PRD_DESCRIPTION as description
from PRODUCT
where PRD_ID = #value#
</statement>
动态 Mapped Statement 之 Iterate
Iterate 的属性:
prepend - 可被覆盖的 SQL 语句组成部分,添加在语句的前面(可选)
property - 类型为 java.util.List 的用于遍历的元素(必选)
open - 整个遍历内容体开始的字符串,用于定义括号(可选)
close -整个遍历内容体结束的字符串,用于定义括号(可选)
conjunction - 每次遍历内容之间的字符串,用于定义 AND 或 OR(可选)
例子:
遍历类型为 java.util.List 的元素。
<iterate prepend="AND" property="uerNameList" open="(" close=")" onjunction="OR" >
username=#userNameList[]#
</iterate>
// 注意:使用<iterate>时,在List元素名后面包括方括号[]非常重要,方括号[]将对象标记为List,以防解析器简单地将List输出成String。
浙公网安备 33010602011771号