<?xml version="1.0" encoding="UTF-8" ?> <sqlMap namespace="Account" > <!-- ============================================= <resultMap name="name" class="name" extend="resultMapId" > <result property="name" column="name" columnIndex="name" nullValue="value" select="name" resultMap="name" lazyLoad="true/false" dbType="" /> <procedure name="name" parameterMap="name" > <statement name="name" parameterClass="name" parameterMap="name" resultClass="name" resultMap="name" listClass="name" > <parameterMap name="name" class="" > <parameter property="name" dbType="" output="true/false" type="" nullValue="" extend="parameterMapId" /> ============================================= --> <cacheModel id="account-cache" implementation="LRU" > <flushInterval hours="24"/> <flushOnExecute statement="UpdateAccountViaInlineParameters"/> <flushOnExecute statement="UpdateAccountViaParameterMap"/> <property name="size" value="10"/> </cacheModel> <!-- <cacheModel name="account-cache" implementation="LRU" > <flushInterval hours="24"/> <flushOnExecute statement="UpdateAccountViaInlineParameters"/> <flushOnExecute statement="UpdateAccountViaParameterMap"/> <property name="CacheSize" value="50"/> </cacheModel> --> <alias> <typeAlias alias="HundredsBool" type="IBatisNet.DataMapper.Test.Domain.HundredsTypeHandlerCallback, IBatisNet.DataMapper.Test"/> </alias> <resultMap id="account-result" class="Account" > <result property="Id" column="Account_Id"/> <result property="FirstName" column="Account_FirstName"/> <result property="LastName" column="Account_LastName"/> <result property="EmailAddress" column="Account_Email" nullValue="no_email@provided.com"/> <result property="BannerOptions" column="Account_Banner_Option" typeHandler="OuiNonBool"/> <result property="CartOptions" column="Account_Cart_Option" typeHandler="HundredsBool"/> </resultMap> <resultMap id="indexed-account-result" class="Account"> <result property="Id" column="Account_Id" columnIndex="0"/> <result property="FirstName" column="Account_FirstName" columnIndex="1"/> <result property="LastName" column="Account_LastName" columnIndex="2"/> <result property="EmailAddress" column="Account_Email" columnIndex="3" nullValue="no_email@provided.com"/> </resultMap> <resultMap id="account-result-nullable-email" class="Account"> <result property="Id" column="Account_Id"/> <result property="FirstName" column="Account_FirstName"/> <result property="LastName" column="Account_LastName"/> <result property="EmailAddress" column="Account_Email"/> </resultMap> <resultMap id="email-result" class="string"> <result property="value" column="Account_Email"/> </resultMap> <resultMap id="account-hashtable-result" class="array"> <result property="Id" column="Account_Id"/> <result property="FirstName" column="Account_FirstName"/> <result property="LastName" column="Account_LastName"/> <result property="EmailAddress" column="Account_Email"/> </resultMap> <!-- ============================================= MAPPED STATEMENTS - w/Inline Parameters ============================================= --> <select id="GetAllAccountsAsArrayListViaResultClass" resultClass="TList"> select Account_Id as Id, Account_FirstName as FirstName, Account_LastName as LastName, Account_Email as EmailAddress from Accounts order by Account_Id </select> <select id="GetAccountsDynamic" resultMap="account-result" parameterClass="Hashtable" > select * from Accounts <dynamic prepend="where"> <isParameterPresent> <isNotEmpty prepend="and" property="FirstName" > Account_FirstName LIKE '%$FirstName$%' </isNotEmpty> <isNotEmpty prepend="and" property="LastName" > Account_LastName LIKE '%$LastName$%' </isNotEmpty> <isNotEmpty prepend="and" property="EmailAddress" > Account_Email LIKE '%$EmailAddress$%' </isNotEmpty> </isParameterPresent> </dynamic> order by Account_LastName limit 0, $MaximumAllowed$ </select> <select id="SelectWithProperty" resultMap="account-result"> select * from Accounts where Account_FirstName = ${accountName} </select> <select id="GetCachedAccountsViaResultMap" resultMap="account-result" cacheModel="account-cache" > select * from Accounts order by Account_Id </select> <select id="GetNoAccountWithCache" parameterClass="Integer" resultMap="account-hashtable-result" cacheModel="account-cache"> select * from Accounts where Account_Id = #value# </select> <select id="GetAccountAsHashtable" parameterClass="Integer" resultMap="account-hashtable-result"> select * from Accounts where Account_Id = #value# </select> <select id="GetAllAccountsAsHashMapViaResultMap" resultMap="account-hashtable-result"> select * from Accounts order by Account_Id </select> <select id="GetAccountAsHashtableResultClass" parameterClass="int" resultClass="array"> select Account_Id as Id, Account_FirstName as FirstName, Account_LastName as LastName, Account_Email as EmailAddress from Accounts where Account_Id = #value# </select> <select id="GetAllAccountsAsHashtableViaResultClass" resultClass="array"> select Account_Id as Id, Account_FirstName as FirstName, Account_LastName as LastName, Account_Email as EmailAddress from Accounts order by Account_Id </select> <select id="GetAccountViaColumnName" parameterClass="int" resultMap="account-result"> select Account_Id, Account_FirstName, Account_LastName, Account_Email, Account_Banner_Option, Account_Cart_Option from Accounts where Account_Id = #value# </select> <select id="GetAccountViaColumnIndex" parameterClass="int" resultMap="indexed-account-result"> select Account_Id, Account_FirstName, Account_LastName, Account_Email from Accounts where Account_Id = #value# </select> <select id="GetAllAccountsViaResultMap" resultMap="account-result"> select * from Accounts order by Account_Id </select> <select id="GetAllAccountsViaResultClass" resultClass="Account"> select Account_Id as Id, Account_FirstName as FirstName, Account_LastName as LastName, Account_Email as EmailAddress from Accounts order by Account_Id </select> <select id="GetFewAccountsViaResultMap" resultMap="account-result"> <![CDATA[ select * from Accounts where Account_Id < 2 order by Account_Id ]]> </select> <select id="GetNoAccountsViaResultMap" resultMap="account-result"> select * from Accounts where Account_Id > 1000 order by Account_Id </select> <select id="GetAccountNullableEmail" resultMap="account-result-nullable-email"> select Account_Id, Account_FirstName, Account_LastName, Account_Email from Accounts where Account_Id = #value# </select> <select id="GetAccountViaResultClass" resultClass="Account"> <![CDATA[ select Account_Id as Id, Account_FirstName as FirstName, Account_LastName as LastName, Account_Email as EmailAddress from Accounts where Account_Id = #value# ]]> </select> <select id="GetAccountViaInlineParameters" resultMap="indexed-account-result"> select Account_Id, Account_FirstName, Account_LastName, Account_Email from Accounts where Account_Id = #Id# and Account_Id = #Id# </select> <select id="GetEmailAddressViaResultClass" resultClass="string"> select Account_Email as value from Accounts where Account_Id = #value# </select> <select id="GetEmailAddressViaResultMap" parameterClass="int" resultMap="email-result"> select Account_Email from Accounts where Account_Id = #value# </select> <select id="GetAllEmailAddressesViaResultClass" resultClass="string"> select Account_Email from Accounts order by Account_Id </select> <select id="GetAllEmailAddressesViaResultMap" resultMap="email-result"> select Account_Email from Accounts order by Account_Id </select> <insert id="InsertAccountViaParameterMap" parameterMap="account-insert-params"> insert into Accounts (Account_Id, Account_FirstName, Account_LastName, Account_Email, Account_Banner_Option, Account_Cart_Option) values (?, ?, ?, ?, ?, ?) </insert> <update id="UpdateAccountViaParameterMap" parameterMap="update-params"> update Accounts set Account_FirstName = ?, Account_LastName = ?, Account_Email = ? where Account_Id = ? </update> <update id="UpdateAccountViaParameterMap2" parameterMap="update-params2"> update Accounts set Account_Id = ?, Account_FirstName = ?, Account_LastName = ?, Account_Email = ? where Account_Id = ? </update> <delete id="DeleteAccountViaInlineParameters"> delete from Accounts where Account_Id = #Id# </delete> <select id="GetAccountComplexMapping" resultMap="indexed-account-result" parameterClass="array"> select * from Accounts where Account_FirstName = #Account.FirstName# And Account_LastName = #Order.City# </select> <select id="GetDynamicOrderedEmailAddressesViaResultMap" resultMap="email-result"> select Account_Email from Accounts order by $value$ </select> <!-- Dynamic statements --> <select id="GetAllAccountsViaResultMapWithDynamicElement" resultMap="account-result"> select * from Accounts where Account_Email $value$ '%@%' order by Account_Id </select> <select id="SimpleDynamicSubstitution" parameterClass="Hashtable" resultClass="Account"> $statement$ </select> <!-- Public Fields --> <insert id="InsertAccountViaPublicFields"> insert into Accounts (Account_Id, Account_FirstName, Account_LastName, Account_Email) values (#Id#, #FirstName#, #LastName#, #EmailAddress# ) </insert> <!-- Inline Parameters --> <update id="UpdateAccountViaInlineParameters" parameterClass="Account"> update Accounts set Account_FirstName = #FirstName#, Account_LastName = #LastName#, Account_Email = #EmailAddress, dbType=VarChar, nullValue=no_email@provided.com# where Account_Id = #Id# </update> <insert id="InsertAccountViaInlineParameters" parameterClass="Account" > insert into Accounts (Account_Id, Account_FirstName, Account_LastName, Account_Email) values (#Id#, #FirstName#, #LastName#, #EmailAddress, dbType=VarChar, nullValue=no_email@provided.com# ) </insert> <insert id="InsertAccountNullableEmail" parameterClass="Account" > insert into Accounts (Account_Id, Account_FirstName, Account_LastName, Account_Email) values ( #Id#, #FirstName#, #LastName#, #EmailAddress, dbType=VarChar# ) </insert> <insert id="InsertAccountUknownParameterClass"> insert into Accounts (Account_Id, Account_FirstName, Account_LastName, Account_Email) values ( #Id#, #FirstName#, #LastName#, #EmailAddress, dbType=VarChar# ) </insert> <delete id="DeleteAccount" parameterClass="Account"> delete from Accounts where Account_Id = #Id# and Account_Id = #Id# </delete> <!-- Extends statement --> <select id="GetAllAccounts" resultMap="indexed-account-result"> select Account_Id, Account_FirstName, Account_LastName, Account_Email from Accounts </select> <select id="GetAllAccountsOrderByName" extends="GetAllAccounts" resultMap="indexed-account-result"> order by Account_FirstName </select> <select id="GetOneAccount" extends="GetAllAccounts" resultMap="indexed-account-result"> where Account_Id = #value# </select> <select id="GetSomeAccount" extends="GetAllAccounts" parameterClass="Hashtable" resultMap="indexed-account-result"> where Account_Id between #lowID# and #hightID# </select> <select id="SelectAccountJIRA29" parameterClass="map" resultClass="Account"> select Account_Id as Id, Account_FirstName as FirstName, Account_LastName as LastName, Account_Email as EmailAddress from Accounts where Account_FirstName = '##$AccountName$##' </select> <select id="SelectAccountJIRA29-2" parameterClass="Hashtable" resultClass="Account"> select Account_Id as Id, Account_FirstName as FirstName, Account_LastName as LastName, Account_Email as EmailAddress from Accounts where 1=1 <isNotEmpty prepend="AND" property="Foo"> (Account_FirstName = '##$Foo$##') </isNotEmpty> </select> <select id="GetAccountWithRepeatingProperty" parameterClass="Account" resultMap="indexed-account-result"> select Account_Id, Account_FirstName, Account_LastName, Account_Email from Accounts where Account_Id = #Id# and Account_Id = #Id# and Account_FirstName = #FirstName# and Account_LastName = #LastName# and Account_Id = #Id# </select> <select id="GetAllAccountsViaCustomTypeHandler" resultMap="account-result"> select * from Accounts order by Account_Id </select> <!-- JIRA-110 --> <select id="GetManyAccound" resultClass="Account"> SELECT Account_Id as Id, Account_FirstName as FirstName, Account_LastName as LastName, Account_Email as EmailAddress FROM Accounts </select> <select id="Get1Account" extends="GetManyAccound" resultClass="Account">WHERE Account_Id=1</select> <statement id="GetAccounts" resultMap="account-result"> SELECT * FROM Accounts </statement> <!-- JIRA-110 --> <insert id="InsertAccountDynamic" parameterClass="Account"> INSERT INTO Accounts (Account_Id, Account_FirstName, Account_LastName, Account_Email) VALUES(#Id#, #FirstName#, #LastName# <dynamic prepend=","> <isNotNull prepend="," property="EmailAddress"> #EmailAddress# </isNotNull> <isNull prepend="," property="EmailAddress"> null </isNull> </dynamic> ) </insert> <!-- accounts and orders --> <select id="getAccountWithOrders" resultMap="Account-with-Orders"> SELECT Accounts.Account_Id as Account_Id, Accounts.Account_FirstName as Account_FirstName, Accounts.Account_LastName as Account_LastName, Accounts.Account_Email as Account_Email, Accounts.Account_Banner_Option as Account_Banner_Option, Accounts.Account_Cart_Option as Account_Cart_Option, Orders.Order_Id as Order_Id, Orders.Order_Date as Order_Date, Orders.Order_CardType as Order_CardType, Orders.Order_CardNumber as Order_CardNumber, Orders.Order_CardExpiry as Order_CardExpiry, Orders.Order_Street as Order_Street, Orders.Order_City as Order_City, Orders.Order_Province as Order_Province, Orders.Order_PostalCode as Order_PostalCode, Orders.Order_FavouriteLineItem as Order_FavouriteLineItem FROM accounts LEFT JOIN orders ON accounts.account_id = orders.account_id </select> <resultMap id="Account-with-Orders" class="AccountWithOrders" groupBy="Account_Id"> <result property="Id" column="Account_Id"/> <result property="FirstName" column="Account_FirstName"/> <result property="LastName" column="Account_LastName"/> <result property="EmailAddress" column="Account_Email" /> <result property="Orders" resultMapping="account-orders" /> </resultMap> <resultMap id="account-orders" class="Order"> <result property="Id" column="Order_Id"/> <result property="Date" type="date" column="Order_Date" nullValue="0001-01-01 00:00:00"/> <result property="CardExpiry" column="Order_CardExpiry"/> <result property="CardType" column="Order_CardType"/> <result property="CardNumber" column="Order_CardNumber"/> <result property="Street" column="Order_Street"/> <result property="City" column="Order_City"/> <result property="Province" column="Order_Province"/> <result property="PostalCode" column="Order_PostalCode"/> </resultMap> <!-- For procedure, the parameters of the parameterMap must in the same order as for the procedure paramaters--> <procedure id="InsertAccountViaStoreProcedure" parameterMap="account-insert-params"> ps_InsertAccount </procedure> <procedure id="SwapEmailAddresses" parameterMap="swap-params"> ps_swap_email_address </procedure> <!-- ============================================= OPTIONAL EXPLICIT PARAMETER MAP ============================================= --> <parameterMap id="swap-params"> <parameter property="email1" column="First_Email" /> <parameter property="email2" column="Second_Email" /> </parameterMap> <parameterMap id="account-insert-params"> <parameter property="Id" /> <parameter property="FirstName" /> <parameter property="LastName" /> <parameter property="EmailAddress" nullValue="no_email@provided.com"/> <parameter property="BannerOptions" dbType="Varchar" type="bool"/> <parameter property="CartOptions" column="Account_Cart_Option" typeHandler="HundredsBool"/> </parameterMap> <parameterMap id="update-params"> <parameter property="FirstName" /> <parameter property="LastName" /> <parameter property="EmailAddress" nullValue="no_email@provided.com"/> <parameter property="Id" /> </parameterMap> <parameterMap id="update-params2"> <parameter property="Id" /> <parameter property="FirstName" /> <parameter property="LastName" /> <parameter property="EmailAddress" nullValue="no_email@provided.com"/> <parameter property="Id" /> </parameterMap> </sqlMap>