ibatis配置详解
[size=small][/size]ibatis配置主要由两种文件,
(一)有关项目的总体配置,如连接的数据源,连接池,缓存等的配置,也即sqlmapconfig.xml文件的配置。
(二)sqlmap.xml文件的配置,也即对象与表的操作映射的配置。
下面分两个部分进行记录
第一部分sqlmapconfig.xml
在这个文件中总共的结构如下:
﹤?xmlversion="1.0"encoding="utf-8"?﹥
﹤!doctypesqlmapconfigpublic"-//ibatis.com//dtdsqlmapconfig2.0//en""http://www.ibatis.com/dtd/sql-map-config-2.dtd"﹥
﹤sqlmapconfig﹥
﹤propertiesresource=""﹥在这里将项目(工程)的所有资源文件包含进来,将相对与src路径的资源文件的路径以及文件名包含进来
﹤settingscachemodelsenabled="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)
/﹥
//这个节点是设置工程的总体性能,根据名称来设置
﹤typealiasalias="person"type="com.jdnis.ibatis.model.person"/﹥
---﹥这个节点是将长的路径名等用短的进行替代,也就是用上面的person来代表右边的person类
﹤transactionmanagertype="jdbc"﹥type指定事务管理器:jdbc,jta,external,三者的区别后面再讲到
﹤datasourcetype="simple"﹥type值由:simple,dbcp,jndi三者的使用后面再讲
﹤propertyname="jdbc.driver"value="com.mysql.jdbc.driver"/﹥
﹤propertyname="jdbc.connectionurl"value="jdbc:mysql://localhost/person"/﹥
﹤propertyname="jdbc.username"value="root"/﹥
﹤propertyname="jdbc.password"value="root"/﹥
﹤propertyname="pool.maximumactiveconnections"value="10"/﹥
﹤propertyname="pool.maximumidleconnections"value="5"/﹥
﹤propertyname="pool.maximumcheckouttime"value="120000"/﹥
﹤propertyname="pool.timetowait"value="500"/﹥
﹤propertyname="pool.pingquery"value="select1fromsample"/﹥
﹤propertyname="pool.pingenabled"value="false"/﹥
﹤propertyname="pool.pingconnectionsolderthan"value="1"/﹥
﹤propertyname="pool.pingconnectionsnotusedfor"value="1"/﹥
﹤/datasource﹥
﹤/transactionmanager﹥
[/pre]
这个节点是来对ibatis配置数据源,数据库连接等等信息的。
﹤sqlmapresource="com/neusoft/ibatis/map/person.xml"/﹥
将系统中的对象与数据库表的映射文件都包含进来上面采用的时相对路径,当然也可以用绝对路径:﹤sqlmapurl="file:///c:/config/person.xml"
﹤/sqlmapconfig﹥
第二部分:sqlmap.xml映射文件
﹤?xmlversion="1.0"encoding="utf-8"?﹥
﹤!doctypesqlmappublic"-//ibatis.com//dtdsqlmap2.0//en""http://www.ibatis.com/dtd/sql-map-2.dtd"﹥
﹤sqlmapnamespace="person"﹥
﹤cachemodelid="personcache"type="lru"﹥
﹤flushintervalhours="24"/﹥
﹤propertyname="size"value="1000"/﹥
﹤/cachemodel﹥
﹤typealiasalias="person"type="com.jdnis.ibatis.model.person"/﹥
﹤parametermapid="personparam"class="person"﹥
﹤parameterproperty="id"/﹥
......
﹤/parametermap﹥
﹤resultmapid="personresult"class="person"﹥
﹤resultproperty="id"column="per_id"/﹥
......
﹤/resultmap﹥
﹤statementid="insertperson"parameterclass="person"﹥
insertintopersonsvalues(#id#,#firstname#,#lastname#,#birthdate#,#weight#,#height#)
﹤/statement﹥
其他﹤statement﹥,﹤insert﹥,﹤update﹥,﹤select﹥,﹤delete﹥,﹤procedure﹥
﹤/sqlmap﹥
[/pre]
ibatis配置注解:
﹤1﹥statement
属性:id(名称),parameterclass(输入参数的类型),resultclass(输出参数的类型),parametermap(nameofparametermap),resultmap(nameofreaultmap),cachemodel(nameofcachemodel),其中只有一个必选属性:id
statement的体时sql语句,当sql有特殊字符时,将它放进cdata块中如:﹤![cdata[select*frompersonwhereper_d﹥#id#]]﹥
﹤2﹥自动生成主键
通过﹤insert﹥子元素﹤selectkey﹥来支持自动生成的键值,例如:
对于oracle
﹤insertid="insertperson-oracl"parameterclass="person"﹥
﹤selectkeyresultclass="int"keyproperty="id"﹥
selectstockidsequence.nextvalasidfromdual
﹤/selectkey﹥
insertinto
person(per_id,per_first.....)
values(#id#,#firstname#....);
﹤/insert﹥
[/pre]
对于sqlserver
﹤insertid="insertperson-sqlserver"parameterclass="person"﹥
insertinto
person(per_first.....)
values(#firstname#....);
﹤selectkeyresultclass="int"keyproperty="id"﹥
select@@identityasid
﹤/selectkey﹥
﹤/insert﹥
[/pre]
﹤3﹥存储过程
﹤parametermapid="swapparameters"class="map"﹥
﹤parameterproperty="email1"jdbctype="varchar"javatype="java.lang.string"model="inout"/﹥
﹤parameterproperty="email12"jdbctype="varchar"javatype="java.lang.string"model="inout"/﹥
﹤/parametermap﹥
﹤procedureid="swapemailaddresses"parametermap="swapparameters"﹥
{callswap_email_addres(?,?)}
﹤/procedure﹥
[/pre]
﹤4﹥parameterclass输入参数的类类型
﹤5﹥resultclass输出参数的类类型
﹤6﹥parametermap
用到预处理的preparedstatement,将要进行预处理的数据,先放到parametermap元素中,接着引用parametermap元素:例如:
﹤parametermapid="insert-person-param"class="person"﹥
﹤parameterproperty="id"/﹥
﹤parameterproperty="firstname"/﹥
﹤parameterproperty="lastname"/﹥
﹤parameterproperty="birthdate"/﹥
﹤parameterproperty="weight"﹥
﹤parameterproperty="height"/﹥
﹤/parametermap﹥
﹤statementid="insertperson"parametermap="insert-person-param"﹥
insertintopersonvalues(?,?,?,?,?,?);
﹤/statement﹥
[/pre]
﹤7﹥resultmap结果映射到预先定义的resultmap中
﹤resultmapid="get-person"resultclass="person"﹥
﹤resultproperty="id"column="per_id"/﹥
﹤resultproperty="firstname"column="per_first_name"/﹥
......
﹤/resultmap﹥
﹤statementid="getperson"resulemap="get-person"﹥
select*fromperson
﹤statement﹥
[/pre]
﹤8﹥cachemodel定义查询缓存
﹤cachemodelid="person-cache"implementation="lru"﹥
﹤flushintervalhours="24"﹥
﹤flushonexecutestatement="insertperson"/﹥
﹤flushonexecutestatement="updateperson"/﹥
﹤flushonexecutestatement="deleteperson"/﹥
......[color=indigo][/color]
﹤propertyname="size"value="1000"/﹥
﹤/cachemodel﹥
﹤statementid="getperson"parameterclass="int"cachemodel="person-cache"﹥
﹤![cdata[select*frompersonwhereper_id=#id#]]﹥
﹤/statement﹥
[/pre]
注解:每隔24小时,就会清除缓冲区,除非执行了insertperson,updateperson,deleteperson操作(立即清除缓冲区)
ibatis配置的基本相关就向你介绍到这里,希望对你有所帮助。
本贴来自天极网群乐社区--http://q.yesky.com/group/review-18217232.html