iBatis中使用动态查询

iBatis中使用动态查询

iBatis中的动态查询还是比较好用的 
如果想深入学习,可以参考 Manning.iBATIS.in.Action.Jan.2007 
下面给出几个例子和dtd定义: 
<select id="selectDispatchedKey" parameterClass="KeyAndKeyFlowInfo" resultMap="KeyAndKeyFlowResult"> 
select distinct 
KEY_ID, 
USER_ID, 
INITIATOR, 
INIT_DATE, 
INITIATOR_EMAIL, 
SGS_KEY.BRANCH_NAME, 
APPROVER, 
APPROVER_EMAIL, 
APPROVE_DATE 
from 
SGS_KEY, 
SGS_KEY_FLOW 
where SGS_KEY.APPLY_FLOW_ID=SGS_KEY_FLOW.KEY_FLOW_ID 
<dynamic prepend="and" open="(" close=")"> 
<isNotNull property="ki.userId" prepend="and" removeFirstPrepend="false"> 
USER_ID = #ki.userId# 
</isNotNull> 
<isNotNull property="kfi.initiator" prepend="and"> 
INITIATOR = #kfi.initiator# 
</isNotNull> 
<isNotNull property="kfi.initDate" prepend="and"> 
INIT_DATE = #kfi.initDate# 
</isNotNull> 
</dynamic> 
</select> 

<update id="updateKeyFlow" parameterClass="KeyFlowInfo"> 
update SGS_KEY_FLOW set 
<dynamic> 
KEY_FLOW_ID =#keyFlowId# 
<isNotNull property="branchName" prepend=","> 
BRANCH_NAME = #branchName# 
</isNotNull> 
<isNotEqual property="operation" prepend="," compareProperty="operation" compareValue="0"> 
OPERATION = #operation# 
</isNotEqual> 
<isNotNull property="initiator" prepend=","> 
INITIATOR = #initiator# 
</isNotNull> 
<isNotNull property="initiatorEmail" prepend=","> 
INITIATOR_EMAIL = #initiatorEmail# 
</isNotNull> 
<isNotNull property="initDate" prepend=","> 
INIT_DATE = #initDate# 
</isNotNull> 
<isNotNull property="approver" prepend=","> 
APPROVER = #approver# 
</isNotNull> 
<isNotNull property="approverEmail" prepend=","> 
APPROVER_EMAIL = #approverEmail# 
</isNotNull> 
<isNotNull property="approveDate" prepend=","> 
APPROVE_DATE = #approveDate# 
</isNotNull> 
<isNotEqual property="keyNum" prepend="," compareProperty="keyNum" compareValue="0"> 
KEY_NUM = #keyNum# 
</isNotEqual> 
<isNotNull property="applyReason" prepend=","> 
APPLY_REASON = #applyReason# 
</isNotNull> 
<isNotNull property="rejectReason" prepend=","> 
REJECT_REASON = #rejectReason# 
</isNotNull> 
</dynamic> 
where 
KEY_FLOW_ID =#keyFlowId# 
</update> 
0:26 2008-2-20补充: 

让iBatis中的insert返回主键 [ibatis insert 返回 自增主键] 
iBatis SQL-map 文件书写注意事项 


http://ibatis.apache.org/dtd/sql-map-2.dtd 中有<dynamic>的定义 
<!-- - - - - - - - - - - - - - - - - - - - - - - - - <br> DYNAMIC ELEMENTS <br>- - - - - - - - - - - - - - - - - - - - - - - - --> 
<!ELEMENT dynamic (#PCDATA | include | iterate | isParameterPresent | isNotParameterPresent | isEmpty | isNotEmpty | isNotNull | isNull | isNotEqual | isEqual | isGreaterThan | isGreaterEqual | isLessThan | isLessEqual | isPropertyAvailable | isNotPropertyAvailable)*> 
<!ATTLIST dynamic >
prepend CDATA #IMPLIED 
open CDATA #IMPLIED 
close CDATA #IMPLIED 

<!ELEMENT isNotNull (#PCDATA | include | iterate | isParameterPresent | isNotParameterPresent | isEmpty | isNotEmpty | isNotNull | isNull | isNotEqual | isEqual | isGreaterThan | isGreaterEqual | isLessThan | isLessEqual | isPropertyAvailable | isNotPropertyAvailable)*> 
<!ATTLIST isNotNull >
prepend CDATA #IMPLIED 
open CDATA #IMPLIED 
close CDATA #IMPLIED 
property CDATA #IMPLIED 
removeFirstPrepend (true|false) #IMPLIED 

<!ELEMENT isNull (#PCDATA | include | iterate | isParameterPresent | isNotParameterPresent | isEmpty | isNotEmpty | isNotNull | isNull | isNotEqual | isEqual | isGreaterThan | isGreaterEqual | isLessThan | isLessEqual | isPropertyAvailable | isNotPropertyAvailable)*> 
<!ATTLIST isNull >
prepend CDATA #IMPLIED 
open CDATA #IMPLIED 
close CDATA #IMPLIED 
property CDATA #IMPLIED 
removeFirstPrepend (true|false) #IMPLIED 

<!ELEMENT isNotPropertyAvailable (#PCDATA | include | iterate | isParameterPresent | isNotParameterPresent | isEmpty | isNotEmpty | isNotNull | isNull | isNotEqual | isEqual | isGreaterThan | isGreaterEqual | isLessThan | isLessEqual | isPropertyAvailable | isNotPropertyAvailable)*> 
<!ATTLIST isNotPropertyAvailable >
prepend CDATA #IMPLIED 
open CDATA #IMPLIED 
close CDATA #IMPLIED 
property CDATA #REQUIRED 
removeFirstPrepend (true|false) #IMPLIED 

<!ELEMENT isPropertyAvailable (#PCDATA | include | iterate | isParameterPresent | isNotParameterPresent | isEmpty | isNotEmpty | isNotNull | isNull | isNotEqual | isEqual | isGreaterThan | isGreaterEqual | isLessThan | isLessEqual | isPropertyAvailable | isNotPropertyAvailable)*> 
<!ATTLIST isPropertyAvailable >
prepend CDATA #IMPLIED 
open CDATA #IMPLIED 
close CDATA #IMPLIED 
property CDATA #REQUIRED 
removeFirstPrepend (true|false) #IMPLIED 

<!ELEMENT isEqual (#PCDATA | include | iterate | isParameterPresent | isNotParameterPresent | isEmpty | isNotEmpty | isNotNull | isNull | isNotEqual | isEqual | isGreaterThan | isGreaterEqual | isLessThan | isLessEqual | isPropertyAvailable | isNotPropertyAvailable)*> 
<!ATTLIST isEqual >
prepend CDATA #IMPLIED 
open CDATA #IMPLIED 
close CDATA #IMPLIED 
property CDATA #IMPLIED 
removeFirstPrepend (true|false) #IMPLIED 
compareProperty CDATA #IMPLIED 
compareValue CDATA #IMPLIED 

<!ELEMENT isNotEqual (#PCDATA | include | iterate | isParameterPresent | isNotParameterPresent | isEmpty | isNotEmpty | isNotNull | isNull | isNotEqual | isEqual | isGreaterThan | isGreaterEqual | isLessThan | isLessEqual | isPropertyAvailable | isNotPropertyAvailable)*> 
<!ATTLIST isNotEqual >
prepend CDATA #IMPLIED 
open CDATA #IMPLIED 
close CDATA #IMPLIED 
property CDATA #IMPLIED 
removeFirstPrepend (true|false) #IMPLIED 
compareProperty CDATA #IMPLIED 
compareValue CDATA #IMPLIED 

<!ELEMENT isGreaterThan (#PCDATA | include | iterate | isParameterPresent | isNotParameterPresent | isEmpty | isNotEmpty | isNotNull | isNull | isNotEqual | isEqual | isGreaterThan | isGreaterEqual | isLessThan | isLessEqual | isPropertyAvailable | isNotPropertyAvailable)*> 
<!ATTLIST isGreaterThan >
prepend CDATA #IMPLIED 
open CDATA #IMPLIED 
close CDATA #IMPLIED 
property CDATA #IMPLIED 
removeFirstPrepend (true|false) #IMPLIED 
compareProperty CDATA #IMPLIED 
compareValue CDATA #IMPLIED 

<!ELEMENT isGreaterEqual (#PCDATA | include | iterate | isParameterPresent | isNotParameterPresent | isEmpty | isNotEmpty | isNotNull | isNull | isNotEqual | isEqual | isGreaterThan | isGreaterEqual | isLessThan | isLessEqual | isPropertyAvailable | isNotPropertyAvailable)*> 
<!ATTLIST isGreaterEqual >
prepend CDATA #IMPLIED 
open CDATA #IMPLIED 
close CDATA #IMPLIED 
property CDATA #IMPLIED 
removeFirstPrepend (true|false) #IMPLIED 
compareProperty CDATA #IMPLIED 
compareValue CDATA #IMPLIED 

<!ELEMENT isLessThan (#PCDATA | include | iterate | isParameterPresent | isNotParameterPresent | isEmpty | isNotEmpty | isNotNull | isNull | isNotEqual | isEqual | isGreaterThan | isGreaterEqual | isLessThan | isLessEqual | isPropertyAvailable | isNotPropertyAvailable)*> 
<!ATTLIST isLessThan >
prepend CDATA #IMPLIED 
open CDATA #IMPLIED 
close CDATA #IMPLIED 
property CDATA #IMPLIED 
removeFirstPrepend (true|false) #IMPLIED 
compareProperty CDATA #IMPLIED 
compareValue CDATA #IMPLIED 

<!ELEMENT isLessEqual (#PCDATA | include | iterate | isParameterPresent | isNotParameterPresent | isEmpty | isNotEmpty | isNotNull | isNull | isNotEqual | isEqual | isGreaterThan | isGreaterEqual | isLessThan | isLessEqual | isPropertyAvailable | isNotPropertyAvailable)*> 
<!ATTLIST isLessEqual >
prepend CDATA #IMPLIED 
open CDATA #IMPLIED 
close CDATA #IMPLIED 
property CDATA #IMPLIED 
removeFirstPrepend (true|false) #IMPLIED 
compareProperty CDATA #IMPLIED 
compareValue CDATA #IMPLIED 

<!ELEMENT isEmpty (#PCDATA | include | iterate | isParameterPresent | isNotParameterPresent | isEmpty | isNotEmpty | isNotNull | isNull | isNotEqual | isEqual | isGreaterThan | isGreaterEqual | isLessThan | isLessEqual | isPropertyAvailable | isNotPropertyAvailable)*> 
<!ATTLIST isEmpty >
prepend CDATA #IMPLIED 
open CDATA #IMPLIED 
close CDATA #IMPLIED 
property CDATA #IMPLIED 
removeFirstPrepend (true|false) #IMPLIED 

<!ELEMENT isNotEmpty (#PCDATA | include | iterate | isParameterPresent | isNotParameterPresent | isEmpty | isNotEmpty | isNotNull | isNull | isNotEqual | isEqual | isGreaterThan | isGreaterEqual | isLessThan | isLessEqual | isPropertyAvailable | isNotPropertyAvailable)*> 
<!ATTLIST isNotEmpty >
prepend CDATA #IMPLIED 
open CDATA #IMPLIED 
close CDATA #IMPLIED 
property CDATA #IMPLIED 
removeFirstPrepend (true|false) #IMPLIED 

<!ELEMENT isParameterPresent (#PCDATA | include | iterate | isParameterPresent | isNotParameterPresent | isEmpty | isNotEmpty | isNotNull | isNull | isNotEqual | isEqual | isGreaterThan | isGreaterEqual | isLessThan | isLessEqual | isPropertyAvailable | isNotPropertyAvailable)*> 
<!ATTLIST isParameterPresent >
prepend CDATA #IMPLIED 
open CDATA #IMPLIED 
close CDATA #IMPLIED 
removeFirstPrepend (true|false) #IMPLIED 

<!ELEMENT isNotParameterPresent (#PCDATA | include | iterate | isParameterPresent | isNotParameterPresent | isEmpty | isNotEmpty | isNotNull | isNull | isNotEqual | isEqual | isGreaterThan | isGreaterEqual | isLessThan | isLessEqual | isPropertyAvailable | isNotPropertyAvailable)*> 
<!ATTLIST isNotParameterPresent >
prepend CDATA #IMPLIED 
open CDATA #IMPLIED 
close CDATA #IMPLIED 
removeFirstPrepend (true|false) #IMPLIED 

<!ELEMENT iterate (#PCDATA | include | iterate | isParameterPresent | isNotParameterPresent | isEmpty | isNotEmpty | isNotNull | isNull | isNotEqual | isEqual | isGreaterThan | isGreaterEqual | isLessThan | isLessEqual | isPropertyAvailable | isNotPropertyAvailable)*> 
<!ATTLIST iterate >
prepend CDATA #IMPLIED 
property CDATA #IMPLIED 
removeFirstPrepend (true|false|iterate) #IMPLIED 
open CDATA #IMPLIED 
close CDATA #IMPLIED 
conjunction CDATA #IMPLIED 
> 

你可能感兴趣的:(iBatis中使用动态查询)