首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

21.6  IBatis设计模式的介绍

IBatis设计模式是使得SQL语句或者存储对象与实体对象容易相互映射起来的设计模式技术。本系统是通过Struts与IBatis整合技术开发的,下面将介绍IBatis相关知识。

21.6.1  IBatis设计模式的组成

1.SQL Map

SQL Map是IBatis设计模式的核心部分,它需要提供一个XML文件来取得数据库的连接及实现简单Java对象与SQL的映射声明。

SQL Map并不仅仅是一个XML文件,它其实一个设计模式。在执行映射声明时,SQL Map将创建一个JDBC的PreparedStatement实例(当通过JDBC对数据库进行操作时经常用到PreparedStatement实例),用在XML中描述的对象作为PreparedStatement实例的参数,执行PreparedStatement并从Result中创建结果对象。

2.附带的工具类

IBatis的jar包中附带了一系列很有用的工具类。

q    Resources类

作用是从classpath中加载系统资源,提供了易于使用的方法。

q    SimpleDataSource类

作用是JDBC 2.0的DataSource接口的一个简单实现。

q    ScriptRunner类

用于执行SQL语句,例如创建数据库schema,插入默认数据以及测试数据等。

21.6.2  构建IBatis设计模式的SQL Map配置代码

在IBatis设计模式的SQL Map中,需要配置XML文件来声明一些基本信息(加载数据库驱动、URL、数据库用户登录密码等)。该XML文件类似Hibernate的配置文件“hibernate.cfg.xml”,SQL Map初始化时,会自动在系统中查询这个文件,并读取其中的配置信息。

XML配置文件的名称并不重要,可以由程序员来指定,在本例配置文件名称为DataAccess.xml,存放在src文件夹下。在XML配置文件中通常会配置如下持久层的信息。

q    数据库连接JDBC

q    SQL Map映射文件的加载

q    SQL Map的配置和优化设置

下面将分段介绍本例中DataAccess.xml配置代码。

1.设置XML配置文件版本信息

DataAccess.xml文件版本信息代码如下。

例程21-6:光盘\mr\21\wyBooks\web\src\DataAccess.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>作为根节点是必不可少的。随后使用<settings>元素、<transaction Manager>元素和<sqlMap>元素。

2.设置<settings>元素

在<settings>元素中提供了多个属性来配置和优化SQL Map运行的实例,代码如下。

<sqlMapConfig>

  <settings cacheModelsEnabled="true" enhancementEnabled="true" lazyLoadingEnabled="true" errorTracingEnabled="true" maxRequests="32" maxSessions="10" maxTransactions="5" useStatementNamespaces="false"/>

cacheModelsEnabled属性:是否启动SqlMapClient上的缓存机制。

enhancementEnabled属性:是否启用字节码增强机制以提升取值和赋值的方法(getXXX()/setXXX())调用效能,避免使用Java反射所带来的性能开销。

lazyLoadingEnabled属性:是否启用延迟加载机制。

errorTracingEnabled属性:是否启用错误日志,在开发期间建议设置为“True”以方便调试。

maxRequests属性:最大并发请求数。

maxSessions属性:最大Session数。即当前最大允许的并发SqlMapClient数。设定maxSessions必须在maxTransactions和maxRequests之间,即max Transactions =< max Sessions=<maxRequests。

maxTransactions:最大并发事务数。

useStatementNamespaces属性:指定了在SQL Map映射文件中是否用全限定名来引用映射声明。

3.<transactionManager>元素

<transactionManager>元素定义了IBatis的事务管理器,代码如下。

例程21-7:光盘\mr\21\wyBooks\\src\DataAccess.xml

  <transactionManager type="JDBC">

    <dataSource type="SIMPLE">

      <property name="JDBC.Driver" value="net.sourceforge.jtds.jdbc.Driver"/>

<!--JDBC驱动-->

      <property name="JDBC.ConnectionURL" value="jdbc:jtds:sqlserver://localhost:1433/db_wyBooks"/>

<!--数据库URL地址-->

      <property name="JDBC.Username" value="sa"/>

<!--数据库用户名-->

      <property name="JDBC.Password" value=""/>

<!--数据库用户密码-->

      <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

            userinfo"/>

<!--数据库连接检测语句-->

      <property name="Pool.PingEnabled" value="false"/>

<!--是否允许检测连接状态-->

      <property name="Pool.PingConnectionsOlderThan" value="1"/>

<!--对持久连接时间超过设定值(毫秒)的连接进行检测-->

      <property name="Pool.PingConnectionsNotUsedFor" value="1"/>

<!--对空闲超过设定值(毫秒)的连接进行检测-->

    </dataSource>

  </transactionManager>

type属性:指定了所使用事务管理器的类型。该属性值可以是一个别名,也可以是一个类名,本例所使用的JDBC就是一个别名,由IBatis提供。

<dataSource>元素:<transactionManager>元素的子元素<dataSource>为JDBC数据源设置了一系列参数,这些参数将被用于连接数据库,在SQL Mapp架构中提供了3种JDBC连接方法,可以利用type属性来设置这3种方式。

(1)SIMPLE

IBatis提供的基本连接池的实现,当容器没有提供数据源时可以选择它。对应IBatis实现类为com.iBatis.sqlmap.engine.datasource.SimpleDataSourceFactory。本例就是使用SimpleDataSourceFactory作为连接池。

(2)DBCP

IBatis使用Apache DBCP连接池所提供的服务,当无J2EE容器提供DataSource服务时,可以使用该选项,对应IBatis实现类为com.iBatis. sqlmap.engine. datasource. Dbcp Data SourceFactory。

(3)JNDI

IBatis提供了对象JNDI命名服务的支持,它可以在容器中利用JNDI从上下文中找到连接池的实现。对应IBatis实现类为com.iBatis. sqlmap.engine. datasource. JndiData Source Factory。

4.<sqlMap>元素

<sqlMap>元素指定了映射文件的位置,配置中可出现多个sqlMap元素,以指定项目内所包含的所有映射文件,代码如下。

  <sqlMap resource="com/dao/ManagerDao.xml"/>    <!--映射对管理表操作的XML文件-->

  <sqlMap resource="com/dao/PlaceDao.xml"/>       <!--映射对图书位置表操作的XML文件-->

  <sqlMap resource="com/dao/BookSortDao.xml"/>    <!--映射图书类型表操作的XML文件-->

  <sqlMap resource="com/dao/BookDao.xml"/>       <!--映射图书表操作的XML文件-->

  <sqlMap resource="com/dao/TypeReaderDao.xml"/>  <!--映射读者类型的XML文件-->

  <sqlMap resource="com/dao/ReaderDao.xml"/>      <!--映射读者表的XML文件-->

  <sqlMap resource="com/dao/BookSellDao.xml"/>     <!--映射图书销售表的XML文件-->

  <sqlMap resource="com/dao/BorrowBookDao.xml"/>  <!--映射图书借阅表的XML文件-->

</sqlMapConfig>

注意:<sqlMap>映射的XML文件在后面的章节进行介绍。

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论