iBATIS配置淺析
iBATIS配置主要由兩種文件,
(一)有關(guān)項目的總體配置,如連接的數(shù)據(jù)源,連接池,緩存等的配置,也即sqlmapconfig.xml文件的配置。
(二)sqlmap.xml文件的配置,也即對象與表的操作映射的配置。
下面分兩個部分進(jìn)行記錄
第一部分sqlmapconfig.xml
在這個文件中總共的結(jié)構(gòu)如下:
- ﹤?xml version="1.0" encoding="UTF-8"?﹥
- ﹤!DOCTYPE sqlMapConfig PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN" "http://www.iBATIS.com/dtd/sql-map-config-2.dtd"﹥
- ﹤sqlMapConfig﹥
- ﹤properties resource=""﹥在這里將項目(工程)的所有資源文件包含進(jìn)來,將相對與src路徑的資源文件的路徑以及文件名包含進(jìn)來
- ﹤settings cacheModelsEnabled="true" 全局控制sqlMapClient的緩存
- enhancementEnabled="true"全局控制運行時字節(jié)碼增強,優(yōu)化javabean的屬性性能
- lazyLoadingEnabled="true" 延遲加載
- errorTracingEnabled="true"
- maxRequests="32" 同時執(zhí)行sql語句的最大線程數(shù),通常大小是maxTransactions的10倍,并且總是大于maxTransactions和maxSessions的總和。減小這個值能夠提高性能。
- maxSessions="10"
- maxTransactions="5"
- useStatementNamespaces="false" 是否啟動全局的sqlmap名字空間。如果啟動則應(yīng)用時,必須加上名字空間:queryForObject(sqlMap的名字空間.statementName)
- /﹥
- //這個節(jié)點是設(shè)置工程的總體性能,根據(jù)名稱來設(shè)置
- ﹤typeAlias alias="person" type="com.Jdnis.ibatis.model.Person" /﹥
- ---﹥這個節(jié)點是將長的路徑名等用短的進(jìn)行替代,也就是用上面的person來代表右邊的person類
- ﹤transactionManager type="JDBC"﹥ type指定事務(wù)管理器:JDBC,JTA,EXTERNAL,三者的區(qū)別后面再講到
- ﹤dataSource type="SIMPLE"﹥ type值由:SIMPLE,DBCP,JNDI三者的使用后面再講
- ﹤property name="JDBC.Driver" value="com.mysql.jdbc.Driver" /﹥
- ﹤property name="JDBC.ConnectionURL" value="jdbc:mysql://localhost/person" /﹥
- ﹤property name="JDBC.Username" value="root" /﹥
- ﹤property name="JDBC.Password" value="root" /﹥
- ﹤property name="Pool.MaximumActiveConnections" value="10" /﹥
- ﹤property name="Pool.MaximumIdleConnections" value="5" /﹥
- ﹤property name="Pool.MaximumCheckoutTime" value="120000" /﹥
- ﹤property name="Pool.TimeToWait" value="500" /﹥
- ﹤property name="Pool.PingQuery" value="select 1 from sample" /﹥
- ﹤property name="Pool.PingEnabled" value="false" /﹥
- ﹤property name="Pool.PingConnectionsOlderThan" value="1" /﹥
- ﹤property name="Pool.PingConnectionsNotUsedFor" value="1" /﹥
- ﹤/dataSource﹥
- ﹤/transactionManager﹥
這個節(jié)點是來對iBATIS配置數(shù)據(jù)源,數(shù)據(jù)庫連接等等信息的。
﹤sqlMap resource="com/neusoft/ibatis/map/person.xml" /﹥
將系統(tǒng)中的對象與數(shù)據(jù)庫表的映射文件都包含進(jìn)來上面采用的時相對路徑,當(dāng)然也可以用絕對路徑:﹤sqlmap url="file:///C:/config/person.xml"
﹤/sqlMapConfig﹥
第二部分:sqlmap.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="Person"﹥
- ﹤cacheModel id="personCache" type="LRU"﹥
- ﹤flushInterval hours="24"/﹥
- ﹤property name="size" value="1000"/﹥
- ﹤/cacheModel﹥
- ﹤typeAlias alias="person" type="com.Jdnis.ibatis.model.Person" /﹥
- ﹤parameterMap id="personParam" class="person"﹥
- ﹤parameter property="id"/﹥
- ......
- ﹤/parameterMap﹥
- ﹤resultMap id="personResult" class="person"﹥
- ﹤result property="id" column="PER_ID"/﹥
- ......
- ﹤/resultMap﹥
- ﹤statement id="insertPerson" parameterClass="person"﹥
- INSERT INTO persons VALUES(#id#,#firstName#,#lastName#,#birthDate#,#weight#,#height#)
- ﹤/statement﹥
- 其他﹤statement﹥,﹤insert﹥,﹤update﹥,﹤select﹥,﹤delete﹥,﹤procedure﹥
- ﹤/sqlMap﹥
iBATIS配置注解:
﹤1﹥statement
屬性:id(名稱),parameterClass(輸入?yún)?shù)的類型),resultClass(輸出參數(shù)的類型),parameterMap(name of parameterMap),resultMap(name of reaultMap),cacheModel(name of cacheModel),其中只有一個必選屬性:id
statement 的體時sql語句,當(dāng)sql有特殊字符時,將它放進(jìn)CDATA塊中如:﹤![CDATA[select * from person where PER_D﹥#id#]]﹥
﹤2﹥自動生成主鍵
通過﹤insert﹥子元素﹤selectKey﹥來支持自動生成的鍵值,例如:
對于oracle
- ﹤insert id="insertPerson-Oracl" parameterClass="person"﹥
- ﹤selectKey resultClass="int" keyProperty="id"﹥
- SELECT STOCKIDSEQUENCE.NEXTVAL AS ID FROM DUAL
- ﹤/selectKey﹥
- insert into
- PERSON(PER_ID,PER_FIRST.....)
- values(#id#,#firstName#....);
- ﹤/insert﹥
對于SQLServer
- ﹤insert id="insertPerson-sqlServer" parameterClass="person"﹥
- insert into
- PERSON(PER_FIRST.....)
- values(#firstName#....);
- ﹤selectKey resultClass="int" keyProperty="id"﹥
- SELECT @@IDENTITY AS ID
- ﹤/selectKey﹥
- ﹤/insert﹥
﹤3﹥存儲過程
- ﹤parameterMap id="swapParameters" class="map"﹥
- ﹤parameter property="email1" jdbcType="varchar" javaType="java.lang.String" model="INOUT"/﹥
- ﹤parameter property="email12" jdbcType="varchar" javaType="java.lang.String" model="INOUT"/﹥
- ﹤/parameterMap﹥
- ﹤procedure id="swapEmailAddresses" parameterMap="swapParameters"﹥
- {call swap_email_addres(?,?)}
- ﹤/procedure﹥
﹤4﹥parameterClass 輸入?yún)?shù)的類類型
﹤5﹥resultClass 輸出參數(shù)的類類型
﹤6﹥parameterMap
用到預(yù)處理的PreparedStatement,將要進(jìn)行預(yù)處理的數(shù)據(jù),先放到parameterMap元素中,接著引用parameterMap元素:例如:
- ﹤parameterMap id="insert-person-param" class="person"﹥
- ﹤parameter property="id"/﹥
- ﹤parameter property="firstName"/﹥
- ﹤parameter property="lastName"/﹥
- ﹤parameter property="birthDate"/﹥
- ﹤parameter property="weight"﹥
- ﹤parameter property="height"/﹥
- ﹤/parameterMap﹥
- ﹤statement id="insertPerson" parameterMap="insert-person-param"﹥
- insert into person values(?,?,?,?,?,?);
- ﹤/statement﹥
﹤7﹥resultMap結(jié)果映射到預(yù)先定義的resultMap中
- ﹤resultMap id="get-person" resultClass="person"﹥
- ﹤result property="id" column="PER_ID"/﹥
- ﹤result property="firstName" column="PER_FIRST_NAME"/﹥
- ......
- ﹤/resultMap﹥
- ﹤statement id="getPerson" resuleMap="get-person"﹥
- select * from person
- ﹤statement﹥
﹤8﹥cacheModel定義查詢緩存
- ﹤cacheModel id="person-cache" implementation="LRU"﹥
- ﹤flushInterval hours="24"﹥
- ﹤flushOnExecute statement="insertPerson"/﹥
- ﹤flushOnExecute statement="updatePerson"/﹥
- ﹤flushOnExecute statement="deletePerson"/﹥
- ......
- ﹤property name="size" value="1000"/﹥
- ﹤/cacheModel﹥
- ﹤statement id="getPerson" parameterClass="int" cacheModel="person-cache"﹥
- ﹤![CDATA[select * from person where PER_ID=#id#]]﹥
- ﹤/statement﹥
注解:每隔24小時,就會清除緩沖區(qū),除非執(zhí)行了insertPerson,updatePerson,deletePerson操作(立即清除緩沖區(qū))
iBATIS配置的基本相關(guān)就向你介紹到這里,希望對你有所幫助。
【編輯推薦】