iBATIS配置浅析

开发 后端
iBATIS配置是如何的呢?iBATIS配置需要注意些什么呢?这篇文章将会给你一一介绍。

iBATIS配置主要由两种文件,

(一)有关项目的总体配置,如连接的数据源,连接池,缓存等的配置,也即sqlmapconfig.xml文件的配置。

(二)sqlmap.xml文件的配置,也即对象与表的操作映射的配置。

下面分两个部分进行记录

第一部分sqlmapconfig.xml

在这个文件中总共的结构如下:

  1. ﹤?xml version="1.0" encoding="UTF-8"?﹥   
  2.  
  3. ﹤!DOCTYPE sqlMapConfig PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN" "http://www.iBATIS.com/dtd/sql-map-config-2.dtd"﹥   
  4.  
  5. ﹤sqlMapConfig﹥   
  6.  
  7. ﹤properties resource=""﹥在这里将项目(工程)的所有资源文件包含进来,将相对与src路径的资源文件的路径以及文件名包含进来   
  8.  
  9. ﹤settings  cacheModelsEnabled="true" 全局控制sqlMapClient的缓存   
  10.  
  11. enhancementEnabled="true"全局控制运行时字节码增强,优化javabean的属性性能   
  12.  
  13. lazyLoadingEnabled="true" 延迟加载   
  14.  
  15. errorTracingEnabled="true"   
  16.  
  17. maxRequests="32" 同时执行sql语句的最大线程数,通常大小是maxTransactions的10倍,并且总是大于maxTransactions和maxSessions的总和。减小这个值能够提高性能。  
  18.  
  19. maxSessions="10"   
  20.  
  21. maxTransactions="5"   
  22.  
  23. useStatementNamespaces="false"  是否启动全局的sqlmap名字空间。如果启动则应用时,必须加上名字空间:queryForObject(sqlMap的名字空间.statementName)   
  24.   /﹥   
  25.  
  26. //这个节点是设置工程的总体性能,根据名称来设置   
  27.  
  28. ﹤typeAlias alias="person" type="com.Jdnis.ibatis.model.Person" /﹥  
  29.  
  30.   ---﹥这个节点是将长的路径名等用短的进行替代,也就是用上面的person来代表右边的person类   
  31.  
  32. ﹤transactionManager type="JDBC"﹥ type指定事务管理器:JDBC,JTA,EXTERNAL,三者的区别后面再讲到   
  33.  
  34. ﹤dataSource type="SIMPLE"﹥ type值由:SIMPLE,DBCP,JNDI三者的使用后面再讲   
  35.  
  36. ﹤property name="JDBC.Driver" value="com.mysql.jdbc.Driver" /﹥   
  37.  
  38. ﹤property name="JDBC.ConnectionURL" value="jdbc:mysql://localhost/person" /﹥   
  39.  
  40. ﹤property name="JDBC.Username" value="root" /﹥   
  41.  
  42. ﹤property name="JDBC.Password" value="root" /﹥   
  43.  
  44. ﹤property name="Pool.MaximumActiveConnections" value="10" /﹥   
  45.  
  46. ﹤property name="Pool.MaximumIdleConnections" value="5" /﹥   
  47.  
  48. ﹤property name="Pool.MaximumCheckoutTime" value="120000" /﹥   
  49.  
  50. ﹤property name="Pool.TimeToWait" value="500" /﹥   
  51.  
  52. ﹤property name="Pool.PingQuery" value="select 1 from sample" /﹥   
  53.  
  54. ﹤property name="Pool.PingEnabled" value="false" /﹥   
  55.  
  56. ﹤property name="Pool.PingConnectionsOlderThan" value="1" /﹥   
  57.  
  58. ﹤property name="Pool.PingConnectionsNotUsedFor" value="1" /﹥   
  59.  
  60. ﹤/dataSource﹥   
  61.  
  62. ﹤/transactionManager﹥    

这个节点是来对iBATIS配置数据源,数据库连接等等信息的。
 
﹤sqlMap resource="com/neusoft/ibatis/map/person.xml" /﹥

将系统中的对象与数据库表的映射文件都包含进来上面采用的时相对路径,当然也可以用绝对路径:﹤sqlmap url="file:///C:/config/person.xml"

﹤/sqlMapConfig﹥

 第二部分:sqlmap.xml映射文件

  1. ﹤?xml version="1.0" encoding="UTF-8"?﹥   
  2.  
  3. ﹤!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" "http://www.iBATIS.com/dtd/sql-map-2.dtd"﹥   
  4.  
  5. ﹤sqlMap namespace="Person"﹥   
  6.  
  7. ﹤cacheModel id="personCache" type="LRU"﹥   
  8.  
  9. ﹤flushInterval hours="24"/﹥   
  10.  
  11. ﹤property name="size" value="1000"/﹥   
  12.  
  13. ﹤/cacheModel﹥   
  14.     
  15.    ﹤typeAlias alias="person" type="com.Jdnis.ibatis.model.Person" /﹥   
  16.      
  17.    ﹤parameterMap id="personParam" class="person"﹥   
  18.       ﹤parameter property="id"/﹥   
  19.        ......   
  20.    ﹤/parameterMap﹥   
  21.  
  22.    ﹤resultMap id="personResult" class="person"﹥   
  23.       ﹤result property="id" column="PER_ID"/﹥   
  24.          ......   
  25.    ﹤/resultMap﹥   
  26.  
  27.    ﹤statement id="insertPerson" parameterClass="person"﹥   
  28.      INSERT INTO persons VALUES(#id#,#firstName#,#lastName#,#birthDate#,#weight#,#height#)   
  29.    ﹤/statement﹥   
  30.    其他﹤statement﹥,﹤insert﹥,﹤update﹥,﹤select﹥,﹤delete﹥,﹤procedure﹥   
  31. ﹤/sqlMap﹥  

iBATIS配置注解:

﹤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

  1. insert id="insertPerson-Oracl" parameterClass="person"﹥   
  2.    ﹤selectKey resultClass="int" keyProperty="id"﹥   
  3.       SELECT STOCKIDSEQUENCE.NEXTVAL AS ID FROM DUAL   
  4.    ﹤/selectKey﹥   
  5.    insert into   
  6.    PERSON(PER_ID,PER_FIRST.....)   
  7.    values(#id#,#firstName#....);   
  8. ﹤/insert﹥  

对于SQLServer

  1. insert id="insertPerson-sqlServer" parameterClass="person"﹥   
  2.    insert into   
  3.    PERSON(PER_FIRST.....)   
  4.    values(#firstName#....);   
  5.    ﹤selectKey resultClass="int" keyProperty="id"﹥   
  6.       SELECT @@IDENTITY AS ID   
  7.    ﹤/selectKey﹥   
  8. ﹤/insert﹥  

﹤3﹥存储过程

  1. ﹤parameterMap id="swapParameters" class="map"﹥   
  2.    ﹤parameter property="email1" jdbcType="varchar" javaType="java.lang.String" model="INOUT"/﹥   
  3. ﹤parameter property="email12" jdbcType="varchar" javaType="java.lang.String" model="INOUT"/﹥   
  4.   ﹤/parameterMap﹥   
  5.   ﹤procedure id="swapEmailAddresses" parameterMap="swapParameters"﹥   
  6.     {call swap_email_addres(?,?)}   
  7.   ﹤/procedure﹥  

﹤4﹥parameterClass 输入参数的类类型

﹤5﹥resultClass 输出参数的类类型

﹤6﹥parameterMap

用到预处理的PreparedStatement,将要进行预处理的数据,先放到parameterMap元素中,接着引用parameterMap元素:例如:

  1. ﹤parameterMap id="insert-person-param" class="person"﹥   
  2.   ﹤parameter property="id"/﹥   
  3.   ﹤parameter property="firstName"/﹥   
  4.   ﹤parameter property="lastName"/﹥   
  5.   ﹤parameter property="birthDate"/﹥   
  6.   ﹤parameter property="weight"﹥   
  7.   ﹤parameter property="height"/﹥   
  8. ﹤/parameterMap﹥   
  9. ﹤statement id="insertPerson" parameterMap="insert-person-param"﹥   
  10.   insert into person values(?,?,?,?,?,?);   
  11. ﹤/statement﹥ 

 ﹤7﹥resultMap结果映射到预先定义的resultMap中

  1. ﹤resultMap id="get-person" resultClass="person"﹥   
  2.   ﹤result property="id" column="PER_ID"/﹥   
  3.   ﹤result property="firstName" column="PER_FIRST_NAME"/﹥   
  4.   ......   
  5. ﹤/resultMap﹥   
  6. ﹤statement id="getPerson" resuleMap="get-person"﹥   
  7.   select * from person   
  8. ﹤statement﹥  

﹤8﹥cacheModel定义查询缓存

  1. ﹤cacheModel id="person-cache" implementation="LRU"﹥   
  2.   ﹤flushInterval hours="24"﹥   
  3.   ﹤flushOnExecute statement="insertPerson"/﹥   
  4.   ﹤flushOnExecute statement="updatePerson"/﹥   
  5.   ﹤flushOnExecute statement="deletePerson"/﹥   
  6.    ......    
  7.   ﹤property name="size" value="1000"/﹥   
  8. ﹤/cacheModel﹥   
  9. ﹤statement id="getPerson" parameterClass="int" cacheModel="person-cache"﹥   
  10.   ﹤![CDATA[select * from person where PER_ID=#id#]]﹥   
  11. ﹤/statement﹥ 

注解:每隔24小时,就会清除缓冲区,除非执行了insertPerson,updatePerson,deletePerson操作(立即清除缓冲区)

iBATIS配置的基本相关就向你介绍到这里,希望对你有所帮助。

【编辑推荐】

  1. iBATIS工作原理浅析
  2. iBATIS七大特性详谈
  3. iBATIS不适合使用的四种情况浅析
  4. iBATIS发展方向的四方面浅析
  5. iBATIS快速创建应用浅析
责任编辑:仲衡 来源: CSDN博客
相关推荐

2009-07-22 15:01:01

iBATIS SQLM

2009-07-22 09:44:05

iBATIS Para

2009-07-17 16:49:18

iBATIS XML配

2009-07-21 11:17:46

iBATISDAO的配置

2009-07-22 16:27:24

iBATIS配置类iBATIS操作类

2009-07-15 17:58:07

iBATIS 动态映射

2009-07-22 10:42:59

iBATIS Cach

2009-07-16 10:23:30

iBATIS工作原理

2009-07-21 17:39:50

iBATIS的多对多映

2009-07-17 10:32:45

iBATIS MapB

2009-07-15 17:19:31

iBATIS Ecli

2009-07-22 10:03:11

iBATIS Resu

2009-07-16 09:14:26

iBATIS DAO

2009-07-20 18:00:16

iBATIS DAO事

2009-07-22 16:02:14

iBATIS参数

2009-07-17 09:44:40

iBATIS教程

2009-07-17 10:59:59

iBATIS接口

2009-07-17 17:05:44

iBATIS缓存cacheModel

2009-07-22 15:21:00

iBATIS SQLM

2009-07-16 13:08:09

iBATIS快速创建应
点赞
收藏

51CTO技术栈公众号