<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMap
PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap namespace="Account">
<typeAlias alias="Account" type="test.Account"/>
<!--列表查詢,返回Account Object的List-->
<resultMap id="AccountResult" class="Account">
<result property="id" column="ID"/>
<result property="firstName" column="FIRST_NAME"/>
<result property="lastName" column="LAST_NAME"/>
<result property="emailAddress" column="EMAIL"/>
</resultMap>
<select id="selectAllAccounts" resultMap="AccountResult">
select * from ACCOUNT
</select>
<!--列表查詢,返回HashMap的List -->
<!--resultMap無需再通過JDBC ResultSetMetaData 來動態獲取字段信息,性能有提高-->
<resultMap id="mapResult" class="java.util.HashMap">
<result property="roleid" column="ROLEID"/>
<result property="rolename" column="ROLENAME"/>
<result property="id" column="ID"/>
<result property="firstName" column="FIRST_NAME"/>
<result property="lastName" column="LAST_NAME"/>
<result property="emailAddress" column="EMAIL"/>
<result property="dt" column="DT"/>
</resultMap>
<select id="selectAllAccountsWithMap" resultMap="mapResult">
select B.ROLEID, B.ROLENAME, A.ID, A.FIRST_NAME,A.LAST_NAME,A.EMAIL,A.DT
from ACCOUNT A left outer join ROLE B on A.ROLEID = B.ROLEID
ORDER BY A.ID DESC
</select>
<!--動態構造查詢條件-->
<select id="getUsers" parameterClass="user" resultMap="get-user-result">
Select id,name,sex from t_user
<dynamic prepend="WHERE">
<isNotEmpty prepend="AND" property="name">
(name like #name#)
</isNotEmpty>
<isNotEmpty prepend="AND" property="address">
(address like #address#)
</isNotEmpty>
</dynamic>
</select>
<isNotEmpty prepend="AND" property="name">
( name=#name#
<isNotEmpty prepend="AND" property="address">
address=#address#
</isNotEmpty>
)
</isNotEmpty>
<select id="dynamicGetAccountList" resultMap="account-result" >
select * from ACCOUNT
<dynamic prepend="WHERE">
<isNotNull prepend="AND" property="firstName" open=”(“ close=”)”>
ACC_FIRST_NAME = #firstName#
<isNotNull prepend="OR" property="lastName">
ACC_LAST_NAME = #lastName#
</isNotNull>
</isNotNull>
<isNotNull prepend="AND" property="emailAddress">
ACC_EMAIL like #emailAddress#
</isNotNull>
<isGreaterThan prepend="AND" property="id" compareValue="0">
ACC_ID = #id#
</isGreaterThan>
</dynamic>
order by ACC_LAST_NAME
</select>
<isParameterPresent> <isNotParameterPresent> <isNull> <isNotNull> <isEmpty> <isNotEmpty>
<isEqual> <isNotEqual> <isGreaterThan> <isGreaterEqual> <isLessThan> <isLessEqual>
<!-- Sql片段的是用-->
<sql id="selectItem_fragment">
FROM items WHERE parentid = 6
</sql>
<select id="selectItemCount" resultClass="int">
SELECT COUNT(*) AS total
<include refid="selectItem_fragment"/>
</select>
<select id="selectItems" resultClass="Item">
SELECT id, name
<include refid="selectItem_fragment"/>
</select>
<!--緩存-->
<cacheModel id="product-cache" type="LRU">
<flushInterval hours="24"/>
<flushOnExecute statement="insertProduct"/>
<flushOnExecute statement="updateProduct"/>
<flushOnExecute statement="deleteProduct"/>
<property name=”size” value=”1000” />
</cacheModel>
<select id=”getProductList” parameterClass=”int” cacheModel=”product-cache”>
select * from PRODUCT where PRD_CAT_ID = #value#
</select>
<!—對XML支持 -->
<select id="getPerson" parameterClass=”int” resultClass="xml" xmlResultName=”person”>
SELECT
PER_ID as id,
PER_FIRST_NAME as firstName,
PER_LAST_NAME as lastName,
PER_BIRTH_DATE as birthDate,
PER_WEIGHT_KG as weightInKilograms,
PER_HEIGHT_M as heightInMeters
FROM PERSON
WHERE PER_ID = #value#
</select>
<person>
<id>1</id>
<firstName>Clinton</firstName>
<lastName>Begin</lastName>
<birthDate>1900-01-01</birthDate>
<weightInKilograms>89</weightInKilograms>
<heightInMeters>1.77</heightInMeters>
</person>
<!—字符串替換
select * from $tableName$
Important Note 1: This support will only substitute Strings, so it is not appropriate for complex data types like Date or Timestamp.
Important Note 2: If you use this support to alter a table name, or a column list, in an SQL select statement,then you should always specify remapResults=“true”
-->.
<!—關聯查詢方式,有1/N問題-->
<sqlMap namespace="User">
<typeAlias alias="user" type="com.ibatis.sample.User"/>
<typeAlias alias="address" type="com.ibatis.sample.Address"/>
<resultMap id="get-user-result" class="user">
<result property="id" column="id"/>
<result property="name" column="name"/>
<result property="sex" column="sex"/>
<result property="addresses" column="id" select="User.getAddressByUserId"/>
</resultMap>
<select id="getUsers" parameterClass="java.lang.String" resultMap="get-user-result">
<![CDATA[Select id,name,sex from t_user where id = #id#]]>
</select>
<select id="getAddressByUserId" parameterClass="int" resultClass="address">
<![CDATA[select address,zipcode from t_address where user_id = #userid# ]]>
</select>
</sqlMap>
<resultMap id="get-user-result" class="user">
<result property="id" column="id"/>
<result property="name" column="name"/>
<result property="sex" column="sex"/>
<result property="address" column="t_address.address"/>
<result property="zipCode" column="t_address.zipcode"/>
</resultMap>
<select id="getUsers" parameterClass="java.lang.String" resultMap="get-user-result">
<![CDATA[select* from t_user,t_address where t_user.id=t_address.user_id]]>
</select>
保證User 類中包含address和zipCode兩個String型屬性。
<!—關聯查詢,無1/N問題-->
<resultMap id="AccountResultWithRole" class="Account" groupBy="id">
<result property="id" column="ID"/>
<result property="firstName" column="FIRST_NAME"/>
<result property="lastName" column="LAST_NAME"/>
<result property="emailAddress" column="EMAIL"/>
<result property="role" resultMap="Account.roleResult"/>
</resultMap>
<resultMap id="roleResult" class="test.Role">
<result property="roleid" column="ROLEID"/>
<result property="rolename" column="ROLENAME"/>
</resultMap>
<select id="selectAccountByIdWithRole" parameterClass="int" resultMap="AccountResultWithRole">
select B.ROLEID, B.ROLENAME, A.ID, A.FIRST_NAME,A.LAST_NAME,A.EMAIL from ACCOUNT A left outer join ROLE B on A.ROLEID = B.ROLEID where A.ID = #id#
</select>
<!--查詢-->
<select id="selectAccountById" parameterClass="int" resultClass="Account">
select ID as id,FIRST_NAME as firstName,LAST_NAME as lastName, EMAIL as emailAddress from ACCOUNT where ID = #id#
</select>
<!--新增-->
<insert id="insertAccount" parameterClass="Account">
insert into ACCOUNT (FIRST_NAME,LAST_NAME,EMAIL,PID,DT)
values (#firstName:VARCHAR#, #lastName:VARCHAR#, #emailAddress:VARCHAR#,#pid:INTEGER:0#,#dt:TIME#)
<selectKey resultClass="int" type="post" keyProperty="id">
SELECT @@IDENTITY AS ID
</selectKey>
</insert>
<!--更新-->
<update id="updateAccount" parameterClass="Account">
update ACCOUNT set
FIRST_NAME = #firstName:VARCHAR#,
LAST_NAME = #lastName:VARCHAR#,
EMAIL = #emailAddress:VARCHAR#
where
ID = #id#
</update>
<!--刪除-->
<delete id="deleteAccountById" parameterClass="int">
delete from ACCOUNT where ID = #id#
</delete>
<!--存儲過程,如果沒有返回列表,procTest的resultMap可以省略-->
<parameterMap id="procParamMap" class="java.util.HashMap" >
<parameter property="id" jdbcType="INTEGER" javaType="java.lang.Integer" mode="IN"/>
<parameter property="outid" jdbcType="INTEGER" javaType="java.lang.Integer" mode="OUT"/>
<parameter property="errMsg" jdbcType="VARCHAR" javaType="java.lang.String" mode="OUT"/>
</parameterMap>
<resultMap id="procResultMap" class="java.util.HashMap" >
<result property="a" column="AAA"/>
<result property="b" column="BBB"/>
<result property="c" column="CCC"/>
</resultMap>
<procedure id="procTest" parameterMap="procParamMap" resultMap="procResultMap">
{call test_sp_1 (?,?,?)}
</procedure>
</sqlMap>
Ibatis配置文件中的sqlMap
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.