`
angkorpeach
  • 浏览: 121952 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

基于IBATIS框架发布包、标准化开发安装实施

阅读更多

本文是我和同事陈为徐进共同完成,主要的配置和说明借鉴夏昕的《ibatis开发指南》,稍微增加的了点东西。 附件中包含所需要的jar包

基于IBATIS框架发布包、标准化开发安装实施
1 所需jar文件
1.1 主要jar文件
         ibatis-2.3.0.677.jar
1.2 辅助jar文件
         log4j-1.2.14.jar
         ojdbc14.jar
2 配置文件及说明
2.1 SqlMapConfig.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>

<!--  在这里配置jdbc.propertis,在配置datasource的时候,用${}获得jdbc.properties里的属性的值,这个配置是可选的--> 
<properties resource="jdbc.properties " />
<!-- 
settings参数详细说明:
cacheModelsEnabled 是否启用SqlMapClient上的缓存机制.建议设为"true";

enhancementEnabled 是否针对POJO启用字节码增强机制以提升getter/setter的调用效能,避免使用JavaReflect所带来的性能开销。同时,这也为Lazy Loading带来了极大的性能提升。建议设为"true";
       
lazyLoadingEnabled 是否启用延迟加载机制,建议设为"true"

errorTracingEnabled 是否启用错误日志,在开发期间建议设为"true" 以方便调试;

maxRequests 最大并发请求数(Statement并发数);

maxSessions 最大并发事务数;

maxTransactions 最大Session 数。即当前最大允许的并发SqlMapClient数。
    maxSessions设定必须介于maxTransactions和maxRequests之间,即
    maxTransactions<maxSessions=<maxRequests;

useStatementNamespaces 是否使用Statement命名空间。这里的命名空间指的是映射文件中,sqlMap节点的namespace属性,如在上例中针对t_user表的映射文件sqlMap节点:
        <sqlMap namespace="User">
这里,指定了此sqlMap节点下定义的操作均从属于"User"命名空间。在useStatementNamespaces="true"的情况下,Statement调用需追加命名空间,
          如:sqlMap.update("User.updateUser",user);
      否则直接通过Statement名称调用即可,
          如:sqlMap.update("updateUser",user);
         但请注意此时需要保证所有映射文件中,Statement定义无重名。
-->
 <settings
  cacheModelsEnabled="true" 
  enhancementEnabled="true"
  lazyLoadingEnabled="true"
  errorTracingEnabled="true"
  maxRequests="32"
  maxSessions="10"
  maxTransactions="5"
  useStatementNamespaces="false"
 />
 
<transactionManager type="JDBC">
<dataSource type="SIMPLE">
<!—配置JDBC 驱动 -->
<property name="JDBC.Driver" value="${driver}"/>
<!-- 数据库URL -->
<property name="JDBC.ConnectionURL" value="${url}"/>
<!-- 数据库用户名 -->
<property name="JDBC.Username" value="${username}"/>
<!-- 数据库用户密码 -->
<property name="JDBC.Password" value="${password}"/>
<!-- 数据库连接池可维持的最大容量 -->
<property name="Pool.MaximumActiveConnections" value="10"/>
<!-- 数据库连接池中允许的挂起(idle)连接 -->
<property name="Pool.MaximumIdleConnections" value="5"/>
<!-- 数据库联接池中,连接被某个任务所允许占用的最大时间,如果超过这个时间限定,连接将被强制收回 (毫秒)-->
<property name="Pool.MaximumCheckoutTime" value="120000"/>
<!-- 当线程试图从连接池中获取连接时,连接池中无可用连接可供使用,此时线程将进入等待状态,直到池中出现空闲连接。此参数设定了线程所允许等待的最长时间 (毫秒)-->
<property name="Pool.TimeToWait" value="500"/>
</dataSource>
</transactionManager>

 <!-- sqlMap 节点指定了映射文件的位置 -->
 <sqlMap resource="com/zrar/wxxt/config/User.xml"/> 
……<!—更多的配置文件 -->
【注意:】在这里配置映射文件的时候,指定的是映射文件的路径,而不是包名,不能写成com.zrar.wxxt.config.User.xml
</sqlMapConfig>

 2.2 Jdbc.properties
        driver= oracle.jdbc.driver.OracleDriver
        url= jdbc:oracle:thin:@192.168.3.45:1521:pure
        username= wxxt
        password= arkj123


2.3 映射文件(以User.xml为例)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN"
 "http://www.ibatis.com/dtd/sql-map-2.dtd">
<sqlMap namespace="User">
<!-- 定义了本映射文件中的别名,以避免过长变量值在resultClass或parameterClass中的反复书写 -->
 <typeAlias alias="user" type="com.zrar.wxxt.entity.User" />
<!-- 
定义了本映射文件中使用的Cache机制,这里申明了一个名为"dwylbxjbxxCache"的cacheModel,之后可以在Statement申明中对其进行引用,通过Select statement获取的数据,使用cacheModel "dwylbxjbxxCache"进行缓存。之后如果程序再次用此Statement进行数据查询,即直接从缓存中读取查询结果,而无需再去数据库查询。
cacheModel主要有下面几个配置点:
 flushInterval :设定缓存有效期,如果超过此设定值,则将此CacheModel的缓存清空。
 size:本CacheModel中最大容纳的数据对象数量。
flushOnExecute:指定执行特定Statement时,将缓存清空。如updateUser操作将更新数据库中的用户信息,这将导致缓存中的数据对象与数据库中的实际数据发生偏差,因此必须将缓存清空以避免脏数据的出现。
-->
 <cacheModel id="userCatche" type="LRU">
  <flushInterval hours="6"/>
<!—updateUser和下面update标签的id相同-->
<flushOnExecute statement="updateUser"/>
  <property name="size" value="1000"/>
 </cacheModel>

 <select 
id="getUser" 
parameterClass="java.lang.String" 
resultClass="user"
<!—userCatche与上面定义的cacheModel标签的id相同-->
cacheModel=" userCatche ">
<!-- 
#name#,井号之间的字符串,必需与com.zrar.wxxt.entity.User中的属性名相同,如果传入的参数不是实体类而是map,井号之间的字符串则必需以map中的key值相同
-->
     select id, name, sex from t_user where name = #name#
 </select>
 
 <update id="updateUser" parameterClass="user">
<!—
注意:<![CDATA[……]]>
该标签是为了以防sql语句中有与xml标签冲突的字符存在可以省略
-->
  <![CDATA[
  UPDATE t_user SET name=#name#, sex=#sex# WHERE id = 3
  ]]>
 </update>
 
 <insert id="insertUser" parameterClass="user">
  <![CDATA[
  INSERT INTO t_user (id, name, sex) VALUES (#id#, #name#, #sex#)
  ]]>
 </insert>
 
 <delete id="deleteUser" parameterClass="java.lang.String">
  delete from t_user where id = #value#
 </delete>
 
 <select id="queryUser"
  parameterClass="java.util.Map"
  resultClass="user"
  cacheModel=" userCatche "
 >
  SELECT * FROM 
  $tableName$ 
  【注意:】$tableName$ 为动态表名,通过实体类中的属性名或者Map中的Key值匹配。

<!-- 
Dynamic 节点和判定节点中的prepend属性,指明了本节点中定义的SQL子句在主体SQL中出现时的前缀。
相当于在之前的sql语句后加上 WHERE 语句
-->
<dynamic prepend="WHERE">

<!-- 
 isEmpty 节点,该节点属于一元节点,如果属性为Collection或者String,其size是否<1,如果非以上两种类型,则通过
 String.valueOf(属性值)获得其String类型的值后,判断其size是否<1;
 isNotEmpty节点 和 isEmpty节点相反。
 其他一元节点:
  <isPropertyAvailable> 参数类中是否提供了此属性
  <isNotPropertyAvailable> 与<isPropertyAvailable>相反
  <isNull> 属性值是否为NULL
  <isNotNull> 与<isNull>相反
-->
 <isNotEmpty prepend="AND" property="name">
   (name like #name#) 
【注意:】此句相当于:如果的name不为空,则在 WHERE 语句后面加上 name like ‘name’,ibatis会自动判断是否需要加上 and
 </isNotEmpty>

 【注意:上面列出了一元节点,ibatis还提供了二元节点,具体清空可也查阅相关资料】
</dynamic>
</select>

</sqlMap>

 
3 Java类
3.1 SqlMapConfig.java 获得SqlMapClient的实例

public class SqlMapConfig {
 private static final SqlMapClient sqlMap;
 static {// static块中的语句只会在第一次加载这个类的时候执行
  try {
   String resource = "sqlMapConfig.xml";
   Reader reader = Resources.getResourceAsReader(resource);
   sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
  } catch (Exception e) {
   e.printStackTrace();
// 在这里将异常抛出来,是为了能在日志文件里更好的跟踪该异常
   throw new RuntimeException("Error initializing MyAppSqlConfig class. Cause:" + e);
  }
 }

 public static SqlMapClient getSqlMapInstance() {
  return sqlMap;
 }
}
  • lib.rar (1.7 MB)
  • 下载次数: 25
分享到:
评论

相关推荐

    JAVA技术架构及开发规范文档.pdf

    数据持久层基于iBatis框架,通过SQLMap配置进行数据库读写,有利于数据库的优化。为了提高效率,系统还引入了缓存处理机制,降低数据库交互次数。 总体来看,这份文档详尽地描述了JAVA技术架构的各个层面,从前端的...

    软件开发综合实践实验报告Ⅰ概述

    - Struts2:基于MVC的Web应用框架。 - Hibernate:对象关系映射(ORM)框架,简化数据库操作。 - JPA:Java持久化API,标准的ORM规范。 - Spring:提供全面的企业级应用开发框架,包括依赖注入、AOP、事务管理等。 -...

    OA办公自动化开题报告任务书

    J2EE提供了企业级应用开发的标准化环境,而Struts2、Spring和iBatis则分别负责表现层、业务逻辑层和数据访问层的实现,构建松耦合的架构。 2. **数据库设计**:选用MySql5.1作为数据库,存储和管理办公数据,支持...

    企业级统一开发平台解决方案PPT课件.pptx

    技术架构包括展示层、控制层、业务展现页面、平台控制器、业务逻辑组件、平台标准逻辑组件、平台服务、Ibatis、JDBC、逻辑层、持久层、MongDB、HDFS、RDBM、MongDB、HDFS、异常处理、缓存工具、页面框架、平台控件和...

    AppFuse 2.0 RC1 Documentation

    这表明AppFuse提供了简化Web开发流程、提高开发效率的多种特性,如模板化代码生成、预配置框架集成等,减少了常见的开发任务负担,让开发者能够专注于业务逻辑的实现。 ### AppFuse 2.0 RC1文档概览 文档由mraible...

    工作流Activit的介绍与应用.doc

    总的来说,Activiti是一个强大且灵活的BPM解决方案,它简化了企业级工作流程的管理和实施,通过自动化和标准化工作流程,提升了企业的运营效率。通过深入理解和熟练运用Activiti,开发者可以构建出高效、可扩展的...

    sliver crm-开源

    4. **iBATIS框架**:iBATIS 2.3 - 这是一个SQL映射框架,它将SQL语句与Java代码分离,实现了持久层操作的简单化。iBATIS允许开发者直接在XML配置文件中编写SQL,提高了代码的可读性和维护性。 5. **ExtJS库**:...

    Spring-Reference_zh_CN(Spring中文参考手册)

    基于原生的iBATIS API的DAO实现 12.6. JPA 12.6.1. 在Spring环境中建立JPA 12.6.1.1. LocalEntityManagerFactoryBean 12.6.1.2. LocalContainerEntityManagerFactoryBean 12.6.1.3. 处理多个持久化单元 12.6.2. ...

    java面试知识

    - **MyBatis (原Ibatis)**:半ORM框架,提供动态SQL支持。 - **JDBC**:直接与数据库交互,灵活性高但编码繁琐。 ##### Hibernate的运行原理 - **Session**:负责持久化操作。 - **SessionFactory**:创建Session...

Global site tag (gtag.js) - Google Analytics