zoukankan      html  css  js  c++  java
  • Ibatis学习总结2--SQL Map XML 配置文件

    SQL Map 使用 XML 配置文件统一配置不同的属性,包括 DataSource 的详细配置信息, SQL Map 和其他可选属性,如线程管理等。以下是 SQL Map 配置文件的一个例子: SqlMapConfig.xml。

     1 <?xml version="1.0" encoding="UTF-8" ?>
     2 
     3 <!DOCTYPE sqlMapConfig
     4 
     5 PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN" "http://www.ibatis.com/dtd/sql-map-config-2.dtd">
     6 <!-- Always ensure to use the correct XML header as above! -->
     7 
     8 <sqlMapConfig>
     9 
    10 <!-- The properties (name=value) in the file specified here can be used placeholders in this config file (e.g. “${driver}”. The file is relative to the classpath and is completely optional. -->
    11 <properties resource=" examples/sqlmap/maps/SqlMapConfigExample.properties " />
    12 
    13 
    14 <!-- These settings control SqlMapClient configuration details, primarily to do with transaction management. They are all optional (more detail later in this document). -->
    15 <settings cacheModelsEnabled="true" enhancementEnabled="true" lazyLoadingEnabled="true" maxRequests="32" maxSessions="10" maxTransactions="5"
    16 useStatementNamespaces="false"
    17 
    18 />
    19 
    20 <!-- Type aliases allow you to use a shorter name for long fully qualified class names. -->
    21 
    22 <typeAlias alias="order" type="testdomain.Order"/>
    23 
    24 
    25 <!-- Configure a datasource to use with this SQL Map using SimpleDataSource. Notice the use of the properties from the above resource -->
    26 <transactionManager type="JDBC" >
    27 
    28 <dataSource type="SIMPLE">
    29 
    30 <property name="JDBC.Driver" value="${driver}"/>
    31 
    32 <property name="JDBC.ConnectionURL" value="${url}"/>
    33 
    34 <property name="JDBC.Username" value="${username}"/>
    35 
    36 <property name="JDBC.Password" value="${password}"/>
    37 
    38 <property name="JDBC.DefaultAutoCommit" value="true" />
    39 
    40 <property name="Pool.MaximumActiveConnections" value="10"/>
    41 
    42 
    43 
    44 <property name="Pool.MaximumIdleConnections" value="5"/>
    45 
    46 <property name="Pool.MaximumCheckoutTime" value="120000"/>
    47 
    48 <property name="Pool.TimeToWait" value="500"/>
    49 
    50 <property name="Pool.PingQuery" value="select 1 from ACCOUNT"/>
    51 
    52 <property name="Pool.PingEnabled" value="false"/>
    53 
    54 <property name="Pool.PingConnectionsOlderThan" value="1"/>
    55 
    56 <property name="Pool.PingConnectionsNotUsedFor" value="1"/>
    57 
    58 </dataSource>
    59 
    60 </transactionManager>
    61 
    62 
    63 <!-- Identify all SQL Map XML files to be loaded by this SQL map. Notice the paths are relative to the classpath. For now, we only have one… -->
    64 <sqlMap resource="examples/sqlmap/maps/Person.xml" />
    65 
    66 </sqlMapConfig>

    SQL Map 配置文件的各组成部分。

    • <properties>元素

      SQL Map 配置文件拥有唯一的<properties>元素,用于在配置文件中使用标准的 Java 属 性文件(name=value)。这样做后,在属性文件中定义的属性可以作为变量在 SQL Map 配 置文件及其包含的所有 SQL Map 映射文件中引用。例如,如果属性文件中包含属性:

      driver=org.hsqldb.jdbcDriver

      SQL   Map   配置文件 及其每个 映射文件 都可以使 用占位符 ${driver} 来代 表值。

      org.hsqldb.jdbcDriver。例如:

      1 <property name="JDBC.Driver" value="${driver}"/>

      这个元素在开发,测试和部署各阶段都很有用。它可以使在多个不同的环境中重新配置 应用和使用自动生成工具(如 ANT)变得容易。属性文件可以从类路径中加载(使用 resource 熟悉),也可以从合法的 URL 中加载(使用 url 属性)。例如,要加载固定路径的属性文件, 使用:

      1 <properties url=”file:///c:/config/my.properties” />
    • <setting>元素:                                                                                                                                                                                <setting>元素用于配置和优化 SqlMapClient 实例的各选项。<setting>元素本身及其所有 的属性都是可选的。下表列出了<setting>元素支持的属性及其功能:

     maxRequests

    同时执行 SQL 语句的最大线程数。大于这个值的线程将阻塞直到另一个线程执行完成。不同的 DBMS

    有不同的限制值,但任何数据库都有这些限制。通 常这个值应该至少是 maxTransactions(参见以下) 的 10   倍,并且总 是大于 maxSessions   和 maxTranactions。减小这个参数值通常能提高性能。

    例如:maxRequests=“256” 缺省值:512

    maxSessions

     同一时间内活动的最大 session 数。一个 session 可以

    是代码请求的显式 session,也可以是当线程使用 SqlMapClient 实例(即执行一条语句)自动获得的 session。它应该总是大于或等于 maxTransactions 并 小于 maxRequests。减小这个参数值通常能减少内存 使用。

    例如:maxSessions=“64” 缺省值:128

    maxTransactions

     

    同时进入 SqlMapClient.startTransaction()的最大线程

    数。大于这个值的线程将阻塞直到另一个线程退出。 不同的 DBMS 有不同的限制值,但任何数据库都有 这些限制。这个参数值应该总是小于或等于 maxSessions 并总是远远小于 maxRequests。减小这 个参数值通常能提高性能。

    例如:maxTransactions=“16” 缺省值:32

    cacheModelsEnabled

     全局性 地启 用或禁用 SqlMapClient   的所有 缓存 

    model。调试程序时使用。

    例如:cacheModelsEnabled=“true” 缺省值:true(启用)

    lazyLoadingEnabled

     全局性地启用或禁用SqlMapClient的所有延迟加载。

    调试程序时使用。

    例子:lazyLoadingEnabled=“true” 缺省值:true(启用)

    enhancementEnabled

     全局性地启用或禁用运行时字节码增强,以优化访

    问 Java Bean 属性的性能,同时优化延迟加载的性能。

    例子:enhancementEnabled=“true” 缺省值:false(禁用)

    useStatementNamespaces

     

    如果启用本属性,必须使用全限定名来引用 mapped

    statement。Mapped  statement 的全限定名由 sql-map

    的名称和 mapped-statement 的名称合成。例如:

    queryForObject(“sqlMapName.statementName”);

    例如:useStatementNamespaces=“false” 缺省值:false(禁用)

    • <typeAlias>元素

      <typeAlias>元素让您为一个通常较长的、全限定类名指定一个较短的别名。例如:

      <typeAlias alias="shortname" type="com.long.class.path.Class"/>

      在 SQL Map 配置文件预定义了几个别名。它们是:

      事务管理器别名

      JDBC JTA

      EXTERNAL

      com.ibatis.sqlmap.engine.transaction.jdbc.JdbcTransactionConfig com.ibatis.sqlmap.engine.transaction.jta.JtaTransactionConfig

      com.ibatis.sqlmap.engine.transaction.external.ExternalTransactionConfig

      Data Source Factory 别名

      SIMPLE DBCP

      JNDI

      com.ibatis.sqlmap.engine.datasource.SimpleDataSourceFactory com.ibatis.sqlmap.engine.datasource.DbcpDataSourceFactory

      com.ibatis.sqlmap.engine.datasource.JndiDataSourceFactory

    • <transactionManager>元素

    1.0 转换注意事项:SQL Map 1.0 允许配置多个数据源。这引起了一些不好的实践。因此,

    2.0 版本只允许一个数据源。要使用多个部署/配置参数,您最好使用多个属性文件,不同的 系统使用不同的属性文件,或在创建 SQL Map  时传入不同的属性文件。

    <transationManager>元素让您为 SQL Map 配置事务管理服务。属性 type 指定所使用的 事务管理器类型。这个属性值可以是一个类名,也可以是一个别名。包含在框架的三个事务 管理器分别是:JDBC,JTA 和 EXTERNAL。

    ¤ JDBC:通过常用的 Connection commit()和 rollback()方法,让 JDBC 管理事务。

    ¤ JTA:本事务管理器使用一个 JTA 全局事务,使 SQL Map 的事务包括在更大的事 务范围内,这个更大的事务范围可能包括了其他的数据库和事务资源。这个配置需 要一个 UserTransaction 属性,以便从 JNDI 获得一个 UserTransaction。

    ¤ EXTERNAL:这个配置可以让您自己管理事务。您仍然可以配置一个数据源,但 事务不再作为框架生命周期的一部分被提交或回退。这意味着 SQL Map 外部应用 的一部分必须自己管理事务。这个配置也可以用于没有事务管理的数据库(例如只读数据库)。

    • <datasource>元素

      <datasource>是<transactionManager>的一部分,为 SQL Map 数据源设置了一系列参数。 目前 SQL Map 架构只提供三个 DataSource Factory,但您也可以添加自己的实现。下面详细 地讨论 DataSourceFactory 的三个实现及其例子。

      SimpleDataSourceFactory

      SimpleDataSourceFactory 为 DataSource 提供了一个基本的实现,适用于在没有 J2EE 容 器提供 DataSource 的情况。它基于 iBatis 的 SimpleDataSource 连接池实现。

       1 <transactionManager type="JDBC">
       2 <dataSource type="SIMPLE">
       3 <property name="JDBC.Driver" value="org.postgresql.Driver"/>
       4 <property name="JDBC.ConnectionURL" value="jdbc:postgresql://server:5432/dbname"/>
       5 <property name="JDBC.Username" value="user"/>
       6 <property name="JDBC.Password" value="password"/>
       7 <!-- OPTIONAL PROPERTIES BELOW -->
       8 <property name="Pool.MaximumActiveConnections" value="10"/>
       9 <property name="Pool.MaximumIdleConnections" value="5"/>
      10 <property name="Pool.MaximumCheckoutTime" value="120000"/>
      11 <property name="Pool.TimeToWait" value="10000"/>
      12 <property name="Pool.PingQuery" value="select * from dual"/>
      13 <property name="Pool.PingEnabled" value="false"/>
      14 <property name="Pool.PingConnectionsOlderThan" value="0"/>
      15 <property name="Pool.PingConnectionsNotUsedFor" value="0"/>
      16 </dataSource>
      17 </transactionManager>

      DbcpDataSourceFactory

      DbcpDataSourceFactory 实现使用 Jakarta DBCP(Database Connection Pool)的 DataSource API 提供连接池服务。适用于应用/Web 容器不提供 DataSource 服务的情况,或执行一个单 独的应用。DbcpDataSourceFactory 中必须要配置的参数例子如下:

       1 <transactionManager type="JDBC">
       2 <dataSource type="DBCP">
       3 <property name="JDBC.Driver" value="${driver}"/>
       4 <property name="JDBC.ConnectionURL" value="${url}"/>
       5 <property name="JDBC.Username" value="${username}"/>
       6 <property name="JDBC.Password" value="${password}"/>
       7 <!-- OPTIONAL PROPERTIES BELOW -->
       8 <property name="Pool.MaximumActiveConnections" value="10"/>
       9 <property name="Pool.MaximumIdleConnections" value="5"/>
      10 <property name="Pool.MaximumWait" value="60000"/>
      11 <!-- Use of the validation query can be problematic. If you have difficulty, try without it. -->
      12 <property name="Pool.ValidationQuery" value="select * from ACCOUNT"/>
      13 <property name="Pool.LogAbandoned" value="false"/>
      14 <property name="Pool.RemoveAbandoned" value="false"/>
      15 <property name="Pool.RemoveAbandonedTimeout" value="50000"/>
      16 </datasource>
      17 </transactionManager>

      JndiDataSourceFactory

      JndiDataSourceFactory 在应用容器内部从 JNDI Context 中查找 DataSource 实现。当使用 应用服务器,并且服务器提供了容器管理的连接池和相关 DataSource 实现的情况下,可以 使用 JndiDataSourceFactory。使用 JDBC  DataSource  的标准方法是通过 JNDI  来查找。 JndiDataSourceFactory 必须要配置的属性如下:

      1 <transactionManager type="JDBC" >
      2 <dataSource type="JNDI">
      3 <property name="DataSource" value="java:comp/env/jdbc/jpetstore"/>
      4 </dataSource>
      5 </transactionManager>

      以上配置使用了常用的 JDBC 事务管理。但对于容器管理的资源,您可能需要象下面的 例子一样配置,让它能和全局事务一起工作:

      1 <transactionManager type="JTA" >
      2 <property name="UserTransaction" value="java:/ctx/con/UserTransaction"/>
      3 <dataSource type="JNDI">
      4 <property name="DataSource" value="java:comp/env/jdbc/jpetstore"/>
      5 </dataSource>
      6 </transactionManager>

      注意,UserTransaction 属性指向 UserTransaction 实例所在的 JNDI 位置。JTA 事务管理 需要它,以使 SQL Map 能够参与涉及其他数据库和事务资源的范围更大的事务。

    • <sqlMap>元素

      <sqlMap> 元素用于包括 SQL  Map  映射文件和其他的 SQL  Map  配置文件。每个 SqlMapClient  对象使用的所有 SQL  Map  映射文件都要在此声明。映射文件作为 stream resource 从类路径或 URL 读入。您必须在这里指定所有的 SQL Map 文件。例子如下:

      1 <!-- CLASSPATH RESOURCES -->
      2 <sqlMap resource="com/ibatis/examples/sql/Customer.xml" />
      3 <sqlMap resource="com/ibatis/examples/sql/Account.xml" />
      4 <sqlMap resource="com/ibatis/examples/sql/Product.xml" />
      5 <!-- URL RESOURCES -->
      6 <sqlMap url="file:///c:/config/Customer.xml " />
      7 <sqlMap url="file:///c:/config/Account.xml " />
      8 <sqlMap url="file:///c:/config/Product.xml" />

      后面将总结SQL Map XML 映射文件的结构。

  • 相关阅读:
    android.mk 文件中变量
    【转】An Intuitive Guide To Exponential Functions & e
    卷积相关
    opencv 调试时不显示图像
    Luhn 算法-- 信用卡号码的校验
    perl 脚本实现简单搜索修改文件并生成diff文件
    【转】gcc: multiple definition of [转]
    【转】undefined reference问题总结
    【转】pthread_cond_t怎么使用
    linux编程使用记录
  • 原文地址:https://www.cnblogs.com/lcngu/p/5095492.html
Copyright © 2011-2022 走看看