49--持久性

关于持久性在最早的Delphi单元中,就曾介绍过。持久性是数据库中读取,保存,或删除数据的过程。毫无疑问持久性是web应用程序中的一个重要的特性,之前都是用JDBC来完成只要用到读取和显示数据。多少年来,这一直是Java最令人厌恶的部分。诚然你可以使用JDBC与数据库交互,当前大多数应用程序与数据库交互是为了存取资料。毕竟,JDBC API为从Java访问数据库提供了一个统一的标准。但是,JDBC代码编码还是比较繁琐的,需要考虑很多的异常,你要知道出现异常时要知道怎么去抓取异常和关闭数据库连接,当然不同的数据库所提供的JDBC标准也是不一样的。

在06年我们使用Spring时,发现他对于持久性支持非常到位。对于JDBC框架将JDBC的检测式的异常转化一个公共的RuntimeException结构。对于异常提供了精确的出错信息些。在Spring中实现持久性策略有几种方式:Hibernate, iBATIS, JDBC, JDO和OJB。实际中我用过了前面2者,Hibernate使用起来在Demo后者学习阶段感觉还是不错的,它也是持久层应用中流行的选择。但在实际的项目中,感觉Hibernate真正运用于项目还是比较麻烦的,它比较适合那种先有设计类然后再有数据库的开发方式,然而在我经历的项目多半是集成项目,数据库模型早就存在了。所以这个时候iBATIS更加适合这样的项目,事实上作为开发人员只要在XML文件中预先写好SQL语句就可以了。如果我们从一个基于JDBC的应用程序迁移到iBATIS是一个非常简单的事情。iBATIS不但快速和高效,而且隐藏了SQL。利用iBATIS的SQL Map,开发人员可以将SQL写进XML文件,基于它们的查询结果来填充对象。和Spring/Hibernate组合一样,

iBATIS是个开源的持久性框架,允许你对一种关系数据库使用模型对象进行操作。相比Hibernate可以使用使用SQL语句,同时也利用JDBC。让一切在简单的XML文件中完成此操作,从Java类中制取SQL。这样看来ibatis并不是一个O/R的映射,只是一种Data Mapper。ibatis有两种模式:Data Mapper和Metadata Mapping。区别在于,ORM(Metadata Mappers)将类映射到数据库的表,iBATIS (Data Mapper)将输入和输出映射到一个接口。很多时候当我们都是基于成型的数据库,你需要将多个表中的数据取出来填充到一个对象时,像iBATIS这样的Data Mapper就有用武之地。在Spring中可以简单配置并使用它们。配置BATIS只需要三个jar包即可,一般是 ibatis-common.jar这是一个公共类的jar包。另一个是ibatis-sqlmap.jar供SQLMaps调用的。还有一个commons-logging.jar,日志框架。

集成iBATIS,先为对象创建一个SQL Map。其实是一个XML文件,包含将查询的结果映射到对象的SQL 语句。sql-mapsconfig.xml,用来指明对象的.xmlSQL Map的位置。applicationContext-ibatis.xml用来配置数据库的Data Source。集成的便是依靠sqlclientfactory。transactionManager将指定一个JDBC 连接从指定数据库绑定到线程上,让每个datasource可以使用一个独立的线程连接。iBATIS提供了各种缓存的策略在对象的SQL.xml里添加cachemode即可。

(未完待续.......)

熬之滴水成石:Spring--精简的J2EE(7)的更多相关文章

  1. 熬之滴水成石:最想深入了解的内容--windows内核机制(15)

    66--内存管理(4) 说说在windows中内存空间初始化的事,开始的开始通过处理器的分页机制,预先建立相应足够的页表以便页表来访问物理内存.预先建立的这个物理内存的是windows自己的加载程序, ...

  2. 熬之滴水成石:最想深入了解的内容--windows内核机制(6)

    58 进程和线程(3) 说完进程再说说线程,线程相比于进程其实有更多可说的内容.首先实现线程调用的数据结构是个栈,该栈记录了调用方法的信息这里面也包括了函数调用及返回的地址.线程肯定是属于某个进程,其 ...

  3. 输出日志实例改成用Spring的AOP来实现

    1.采用Interception Around通知的形式实现 Interception Around通知会在Join Point的前后执行,实现Interception Around通知的类需要实现接 ...

  4. 学习源码的第八个月,我成了Spring的开源贡献者

    @ 目录 我的经历 碰到的问题 1.担心闹乌龙 2.不知道要怎么提交 3.英文 4.担心问题描述的不清楚 给你的建议 我的经历 关注我的朋友都知道,关注两个字划重点,要考! 我最近一直在写Spring ...

  5. spring入门教程——笔记

    Spring学习笔记(1)----简单的实例 ---------------------------------   首先需要准备Spring包,可从官方网站上下载.   下载解压后,必须的两个包是s ...

  6. Spring Boot 快速入门笔记

    Spirng boot笔记 简介 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发 ...

  7. Spring系列(零) Spring Framework 文档中文翻译

    Spring 框架文档(核心篇1和2) Version 5.1.3.RELEASE 最新的, 更新的笔记, 支持的版本和其他主题,独立的发布版本等, 是在Github Wiki 项目维护的. 总览 历 ...

  8. 不错的Spring学习笔记(转)

    Spring学习笔记(1)----简单的实例 ---------------------------------   首先需要准备Spring包,可从官方网站上下载.   下载解压后,必须的两个包是s ...

  9. 学会使用Spring注解

      概述 注释配置相对于 XML 配置具有很多的优势: 它可以充分利用 Java 的反射机制获取类结构信息,这些信息可以有效减少配置的工作.如使用 JPA 注释配置 ORM 映射时,我们就不需要指定 ...

随机推荐

  1. 浅谈JavaScript性能

    最近在JavaScript性能方面有所感悟,把我的经验分给大家: 说到JavaScript,就不得不说它的代码的运行速度—— 在我初学JavaScript的时候,只是觉得它是一个很强大的脚本.渐渐的, ...

  2. C语言 链表

    原文:C语言 链表 最近在复习数据结构,想把数据结构里面涉及的都自己实现一下,完全是用C语言实现的. 自己编写的不是很好,大家可以参考,有错误希望帮忙指正,现在正处于编写阶段,一共将要实现19个功能. ...

  3. Python什么是值或引用函数参数

    这篇文章是Python前往遇到有疑问的功能. 下面一段是原有的基础教程Python函数. 按值传递參数和按引用传递參数 全部參数(自变量)在Python里都是按引用传递.假设你在函数里改动了參数,那么 ...

  4. 快速构建Windows 8风格应用14-ShareContract概述及原理

    原文:快速构建Windows 8风格应用14-ShareContract概述及原理 本篇博文主要介绍Share Contract概述.Share Contract实现原理.实现Share Contra ...

  5. Linux:最终用途cat命令查看不可见的字符

    常,的程序或软件,并没有语法错误,你检查其内容没有发现相关问题.这是时间,因为你用普通的文本编辑软件来查看,有很多的字符显示不出来的,但在最终用途cat命令可以很easy地检測出是否存在这些字符. ~ ...

  6. leetcode第32题--Search in Rotated Sorted Array

    Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7 migh ...

  7. xheditor 进阶

    xhEditor提供两种方式初始化编辑器: 方法1:利用class属性来初始化和传递各种初始化参数,例:  class="xheditor {skin:'default'}" 方法 ...

  8. 10.读google测试之道有感

    (一)读google测试之道有感.  

  9. 使用vs2010复制粘贴代码时特别卡用一段时间就特别卡重启也没用

    vs2010编写代码一段时间后复制粘贴特别卡,下拉条也特别卡,这个状况困扰了我两个月,实在忍不住了,去网上搜了搜 有网友说是快捷键冲突,所以我就把其他程序结束了,结果莫名奇妙的瞬间就不卡了.最终弄明白 ...

  10. 跨域访问 REST API

    跨域访问 Web Service (REST API) 虽然 JQuery 也能通过授权header实现跨域, 但SharePoint 提供了更简单的方法,它被实现在SP.RequestExecuto ...