Ibatis配置详解【转载】
ibatis与hibernate都是持久层的额技术框架,这里看看ibatis的配置:作为自己以后的参考:
ibstis的配置主要由两种文件,
(一)有关项目的总体配置,如连接的数据源,连接池,缓存等的配置,也即sqlmapconfig.xml文件的配置。
(二)sqlmap.xml文件的配置,也即对象与表的操作映射的配置。
下面分两个部分进行记录
第一部分 sqlmapconfig.xml 在这个文件中总共的结构如下: <?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=""> ------->在这里将项目(工程)的所有资源文件包含进来,将相对与src路径的资源文件的路径以及文件名包含进来 <settings cacheModelsEnabled="true" --->全局控制sqlMapClient的缓存 enhancementEnabled="true" --->全局控制运行时字节码增强,优化javabean的属性性能 lazyLoadingEnabled="true" --->延迟加载 errorTracingEnabled="true" maxRequests="32" ---->同时执行sql语句的最大线程数,通常大小是maxTransactions的10倍,并且总是大于maxTransactions和maxSessions的总和。减小这个值能够提高性能。 maxSessions="10" maxTransactions="5" useStatementNamespaces="false" --->是否启动全局的sqlmap名字空间。如果启动则应用时,必须加上名字空间:queryForObject(sqlMap的名字空间.statementName) /> --------->这个节点是设置工程的总体性能,根据名称来设置 <typeAlias alias="person" type="com.Jdnis.ibatis.model.Person" /> ----->这个节点是将长的路径名等用短的进行替代,也就是用上面的person来代表右边的person类 <transactionManager type="JDBC"> -->type指定事务管理器:JDBC,JTA,EXTERNAL,三者的区别后面再讲到 <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> ------->这个节点是来配置数据源,数据库连接等等信息的。 <sqlMap resource="com/neusoft/ibatis/map/person.xml" /> -->将系统中的对象与数据库表的映射文件都包含进来上面采用的时相对路径,当然也可以用绝对路径:<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> 注解: <1>statement 属性:id(名称),parameterClass(输入参数的类型),resultClass(输出参数的类型),parameterMap(name of parameterMap),resultMap(name of reaultMap),cacheModel(name of cacheModel),其中只有一个必选属性:id statement 的体时sql语句,当sql有特殊字符时,将它放进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 输入参数的类类型 <5>resultClass 输出参数的类类型 <6>parameterMap 用到预处理的PreparedStatement,将要进行预处理的数据,先放到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结果映射到预先定义的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小时,就会清除缓冲区,除非执行了insertPerson,updatePerson,deletePerson操作(立即清除缓冲区)