- ibatis與hibernate都是持久層的額技術(shù)框架,這里看看ibatis的配置:作為自己以后的參考:
- ibstis的配置主要由兩種文件,
- (一)有關(guān)項(xiàng)目的總體配置,如連接的數(shù)據(jù)源,連接池,緩存等的配置,也即sqlmapconfig.xml文件的配置。
- (二)sqlmap.xml文件的配置,也即對(duì)象與表的操作映射的配置。
- 下面分兩個(gè)部分進(jìn)行記錄
-
- 第一部分 sqlmapconfig.xml
-
- 在這個(gè)文件中總共的結(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>
-
- <!-- 這里進(jìn)行文件的注釋說(shuō)明 -->
-
- <properties resource=""> ------->在這里將項(xiàng)目(工程)的所有資源文件包含進(jìn)來(lái),將相對(duì)與src路徑的資源文件的路徑以及文件名包含進(jìn)來(lái)
-
-
- <settings cacheModelsEnabled="true" --->全局控制sqlMapClient的緩存
- enhancementEnabled="true" --->全局控制運(yùn)行時(shí)字節(jié)碼增強(qiáng),優(yōu)化javabean的屬性性能
- lazyLoadingEnabled="true" --->延遲加載
- errorTracingEnabled="true"
- maxRequests="32" ---->同時(shí)執(zhí)行sql語(yǔ)句的最大線(xiàn)程數(shù),通常大小是maxTransactions的10倍,并且總是大于maxTransactions和maxSessions的總和。減小這個(gè)值能夠提高性能。
- maxSessions="10"
- maxTransactions="5"
- useStatementNamespaces="false" --->是否啟動(dòng)全局的sqlmap名字空間。如果啟動(dòng)則應(yīng)用時(shí),必須加上名字空間:queryForObject(sqlMap的名字空間.statementName)
-
- /> --------->這個(gè)節(jié)點(diǎn)是設(shè)置工程的總體性能,根據(jù)名稱(chēng)來(lái)設(shè)置
-
-
- <typeAlias alias="person" type="com.Jdnis.ibatis.model.Person" />
- ----->這個(gè)節(jié)點(diǎn)是將長(zhǎng)的路徑名等用短的進(jìn)行替代,也就是用上面的person來(lái)代表右邊的person類(lèi)
-
-
- <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>
-
- ------->這個(gè)節(jié)點(diǎn)是來(lái)配置數(shù)據(jù)源,數(shù)據(jù)庫(kù)連接等等信息的。
-
-
- <sqlMap resource="com/neusoft/ibatis/map/person.xml" />
- -->將系統(tǒng)中的對(duì)象與數(shù)據(jù)庫(kù)表的映射文件都包含進(jìn)來(lái)上面采用的時(shí)相對(duì)路徑,當(dāng)然也可以用絕對(duì)路徑:<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">
- <!-- 注釋說(shuō)明 -->
-
- <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>
-
- 注解:
- <1>statement
- 屬性:id(名稱(chēng)),parameterClass(輸入?yún)?shù)的類(lèi)型),resultClass(輸出參數(shù)的類(lèi)型),parameterMap(name of parameterMap),resultMap(name of reaultMap),cacheModel(name of cacheModel),其中只有一個(gè)必選屬性:id
- statement 的體時(shí)sql語(yǔ)句,當(dāng)sql有特殊字符時(shí),將它放進(jìn)CDATA塊中如:<![CDATA[select * from person where PER_D>#id#]]>
-
- <2>自動(dòng)生成主鍵
- 通過(guò)<insert>子元素<selectKey>來(lái)支持自動(dòng)生成的鍵值,例如:
- ----對(duì)于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>
- --->對(duì)于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>存儲(chǔ)過(guò)程
- <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ù)的類(lèi)類(lèi)型
- <5>resultClass 輸出參數(shù)的類(lèi)類(lèi)型
- <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定義查詢(xún)緩存
- <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小時(shí),就會(huì)清除緩沖區(qū),除非執(zhí)行了insertPerson,updatePerson,deletePerson操作(立即清除緩沖區(qū))
ibatis與hibernate都是持久層的額技術(shù)框架,這里看看ibatis的配置:作為自己以后的參考:ibstis的配置主要由兩種文件,(一)有關(guān)項(xiàng)目的總體配置,如連接的數(shù)據(jù)源,連接池,緩存等的配置,也即sqlmapconfig.xml文件的配置。(二)sqlmap.xml文件的配置,也即對(duì)象與表的操作映射的配置。下面分兩個(gè)部分進(jìn)行記錄第一部分 sqlmapconfig.xml在這個(gè)文件中總共的結(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><!-- 這里進(jìn)行文件的注釋說(shuō)明 --><properties resource=""> ------->在這里將項(xiàng)目(工程)的所有資源文件包含進(jìn)來(lái),將相對(duì)與src路徑的資源文件的路徑以及文件名包含進(jìn)來(lái)<settings cacheModelsEnabled="true" --->全局控制sqlMapClient的緩存enhancementEnabled="true" --->全局控制運(yùn)行時(shí)字節(jié)碼增強(qiáng),優(yōu)化javabean的屬性性能lazyLoadingEnabled="true" --->延遲加載errorTracingEnabled="true"maxRequests="32" ---->同時(shí)執(zhí)行sql語(yǔ)句的最大線(xiàn)程數(shù),通常大小是maxTransactions的10倍,并且總是大于maxTransactions和maxSessions的總和。減小這個(gè)值能夠提高性能。maxSessions="10"maxTransactions="5"useStatementNamespaces="false" --->是否啟動(dòng)全局的sqlmap名字空間。如果啟動(dòng)則應(yīng)用時(shí),必須加上名字空間:queryForObject(sqlMap的名字空間.statementName)/> --------->這個(gè)節(jié)點(diǎn)是設(shè)置工程的總體性能,根據(jù)名稱(chēng)來(lái)設(shè)置<typeAlias alias="person" type="com.Jdnis.ibatis.model.Person" />----->這個(gè)節(jié)點(diǎn)是將長(zhǎng)的路徑名等用短的進(jìn)行替代,也就是用上面的person來(lái)代表右邊的person類(lèi)<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>------->這個(gè)節(jié)點(diǎn)是來(lái)配置數(shù)據(jù)源,數(shù)據(jù)庫(kù)連接等等信息的。<sqlMap resource="com/neusoft/ibatis/map/person.xml" />-->將系統(tǒng)中的對(duì)象與數(shù)據(jù)庫(kù)表的映射文件都包含進(jìn)來(lái)上面采用的時(shí)相對(duì)路徑,當(dāng)然也可以用絕對(duì)路徑:<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"><!-- 注釋說(shuō)明 --><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>注解:<1>statement屬性:id(名稱(chēng)),parameterClass(輸入?yún)?shù)的類(lèi)型),resultClass(輸出參數(shù)的類(lèi)型),parameterMap(name of parameterMap),resultMap(name of reaultMap),cacheModel(name of cacheModel),其中只有一個(gè)必選屬性:idstatement 的體時(shí)sql語(yǔ)句,當(dāng)sql有特殊字符時(shí),將它放進(jìn)CDATA塊中如:<![CDATA[select * from person where PER_D>#id#]]><2>自動(dòng)生成主鍵通過(guò)<insert>子元素<selectKey>來(lái)支持自動(dòng)生成的鍵值,例如:----對(duì)于oracle<insert id="insertPerson-Oracl" parameterClass="person"><selectKey resultClass="int" keyProperty="id">SELECT STOCKIDSEQUENCE.NEXTVAL AS ID FROM DUAL</selectKey>insert intoPERSON(PER_ID,PER_FIRST.....)values(#id#,#firstName#....);</insert>--->對(duì)于sqlServer<insert id="insertPerson-sqlServer" parameterClass="person">insert intoPERSON(PER_FIRST.....)values(#firstName#....);<selectKey resultClass="int" keyProperty="id">SELECT @@IDENTITY AS ID</selectKey></insert><3>存儲(chǔ)過(guò)程<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ù)的類(lèi)類(lèi)型<5>resultClass 輸出參數(shù)的類(lèi)類(lèi)型<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定義查詢(xún)緩存<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小時(shí),就會(huì)清除緩沖區(qū),除非執(zhí)行了insertPerson,updatePerson,deletePerson操作(立即清除緩沖區(qū))