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 映射文件的结构。

  • 相关阅读:
    June. 26th 2018, Week 26th. Tuesday
    June. 25th 2018, Week 26th. Monday
    June. 24th 2018, Week 26th. Sunday
    June. 23rd 2018, Week 25th. Saturday
    June. 22 2018, Week 25th. Friday
    June. 21 2018, Week 25th. Thursday
    June. 20 2018, Week 25th. Wednesday
    【2018.10.11 C与C++基础】C Preprocessor的功能及缺陷(草稿)
    June.19 2018, Week 25th Tuesday
    June 18. 2018, Week 25th. Monday
  • 原文地址:https://www.cnblogs.com/lcngu/p/5095492.html
Copyright © 2011-2022 走看看