动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Java教程 ]的信息

本月文章推荐
.Java核心代码例程之:CalendarDe.
.Java 中文问题 集锦.
.纯Java周历的写法.
.用Eclipse进行可视化Java界面设计.
.使用Java Swing 创建一个XML编辑.
.Displaytag1.1版发布了.
.Java对象持久化技术之Hibernate入.
.?运算符.
.14.7.4 Addition operator.
.用J2ME编写手机短消息发送程序.
.基于Java 2平台的引用类使用指南.
.Type 属性.
.Javascript实例教程(19) 使用HoT.
.MD5的JavaBean实现.
.EJB技术之旅(三).
.轻松掌握Java泛型(第3部分).
.Eclipse插件JBClipse 0.2 新版发.
.一个浏览图片程序.
.min 方法.
.实现类似XP风格的快速按钮.

使用ORM工具进行数据访问

发表日期:2008-1-5 |



  简介
  Spring在资源治理,DAO实现支持以及实物策略等方面提供了与Hibernate, JDO和iBATIS SQL映射的集成。 对Hibernate,Spring使用了很多IoC的方便的特性提供了一流的支持,帮助你处理很多典型的Hibernate整合的问题。所有的这些都遵守Spring通用的事务和DAO异常体系。
  
  当您选择使用O/R映射来创建数据访问应用程序的时候,Spring的增加部分就会向您提供重要的支持。首先你应该了解的是,一旦你使用了Spring对O/R映射的支持,你不需要亲自作所有的事情。在决定花费力气,冒着风险建造类似的内部底层结构之前,我们都建议您考虑和利用Spring的解决方案。不管你使用的是何种技术,大部分的O/R映射支持都可以以library样式被使用,因为所有的东西都是被设计成一组可重复利用的JavaBeans。在ApplicationContext和BeanFactory中使用更是提供了配置和部署简单的好处,因此,这一章里的大多数例子都是在ApplicationContext中配置。
  
  使用Spring构建你的ORM应用的好处包括:
  l 避免绑定非凡的技术,答应mix-and-match的实现策略。虽然Hibernate非常强大,灵活,开源而且免费,但它还是使用了自己的特定的API。此外有人也许会争辩:iBatis更轻便而且在不需要复杂的O/R映射策略的应用中使用也很优秀。能够选择的话,使用标准或抽象的API来实现主要的应用需求,通常是更好的。尤其,当你可能会因为功能,性能或其他方面的原因而需要切换到另一个实现的时候。举例来说,Spring对Hibernate事务和异常的抽象,以及能够让你轻松交换mapper和DAO对象(实现数据访问功能)的IoC机制,这两个特性可以让你在不牺牲Hibernate性能的情况下,在你的应用程序中隔离Hibernate的相关代码。处理DAO的高层次的service代码不需要知道DAO的具体实现。这个方法可以很轻易使用mix-and-match方案互不干扰地实现数据访问层(比如在一些地方用Hibernate,一些地方使用JDBC,其他地方使用iBatis),mix-and-match有利于处理遗留下来的代码以及利用各种技术(JDBC,Hibernate,iBatis)的优点。
  
  测试简单
  Spring的IoC使得很轻易替换掉不同的实现,Hibernate SessionFacotory的位置,datasource, 事务治理, 映射对象的实现。这样就很轻易隔离测试持久化相关代码的各个部分。
  l 普通的资源治理。Spring的application context能够处理诸如Hibernate 的SessionFactory, JDBC的datasource,iBatis的SQLMaps配置对象以及其他相关资源的定位和配置。这使得这些配置的值很轻易被治理和修改。Spring提供了有效,简单和安全的Hibernate Session处理。一般的使用Hibernate的代码则需要使用同一个Hibernate Session对象以确保有效和恰当地事务处理。而Spring让我们可以很轻易透明地创建和绑定一个session到当前线程;你可以使用以下两种办法之一:声明式的AOP方法拦截器,或通过使用一个外部的template包装类在Java代码层次实现。这样,Spring就解决了在很多Hibernate论坛上出现的使用问题。
  
  异常包装
  Spring能够包装Hibernate异常,把它们从专有的,checked exception变为一组抽象的runtime exception。这样你就可以仅仅在恰当的层处理大部分的不可恢复的异常,使你避免了很多讨厌的catch/throw以及异常声明。你还是可以在你需要的地方捕捉和处理异常。回想一下JDBC异常(包括与DB相关的方言)被转变为同样的异常体系,这就意味着你可以在一致的编程模型中处理JDBC操作。
  l 综合的事务治理。Spring答应你包装你的ORM代码,通过使用声明式的AOP方法拦截器或者在代码级别使用外部的template包装类。不管使用哪一种,事务相关的语义都会为你处理,万一有异常发生也会帮你做适当的事务操作(比如rollback)。就象我们下面要讨论的一样,你能够使用和替换各种transaction managers,却不会使你的Hibernate相关的代码受到影响。更好的是,JDBC相关的代码可以完全和Hibernate代码integrate transactionaly。这对于处理那些没有用Hibernate或iBatis实现的功能非常有用。
  
  1.2.Hibernate
  1.2.1.资源治理
  典型的应用经常会被重复的资源治理代码搞胡乱。很多项目尝试创造自己的方案解决这个问题,有时会为了编程方便牺牲适当的故障处理。对于恰当的资源处理Spring提倡令人瞩目的简单的解决方案:使用templating的IoC,比如基础的class和回调接口,或者提供AOP拦截器。基础的类负责固定的资源处理,以及将特定的异常转换为unchecked异常体系。Spring引进了DAO异常体系,可适用于任何数据访问策略。
  对于直接使用JDBC的情况,前面章节提到的JdbcTemplate类负责处理connection,正确地把SQLExeption变为DataAccessException体系(包括将与数据库相关的SQL错误代码变成有意义的异常类)。它同时支持JTA和JDBC事务,通过它们各自的Spring transaction managers。
  Spring同样也提供了对Hibernate和JDO的支持:一个HibernateTemplate/JdoTemplate类似于JdbcTemplate,HibernateInterceptor/JdoInterceptor,以及一个Hibernate/JDO transaction manager。主要的目的是:能够清楚地划分应用层次而不管使用何种数据访问和事务技术;使应用对象之间的耦合松散。业务对象(BO)不再依靠于数据访问和事务策略;不再有硬编码的资源lookup;不再有难于替换的singletons;不再有自定义的服务注册。一个简单且坚固的方案连接了应用对象,并且使它们可重用尽可能地不依靠容器。虽然所有的数据访问技术都能独立使用,但是与Spring application context结合更好一些,它提供了基于XML的配置和普通的与Spring 无关的JavaBean实例。在典型的Spring app中,很多重要的对象都是JavaBeans:数据访问template,数据访问对象(使用template),transaction managers, 业务对象(使用数据访问对象和transaction managers),web view resolvers, web controller(使用业务对象)等等。
  
  1.2.2.在application context中定义资源
  为了避免将应用对象贴紧硬编码的资源lookup,Spring答应你像定义普通bean一样在application context中定义诸如JDBC DataSource,Hibernate SessionFactory的资源。需要访问这些资源的应用对象只需要持有这些预定义实例的引用。下面的代码演示如何创建一个JDBC DataSource和Hibernate SessionFactory:
  <beans>
  <bean id="myDataSource"
  class="org.springframework.jndi.JndiObjectFactoryBean">
  <property name="jndiName">
  <value>java:comp/env/jdbc/myds</value>
  </property>
  </bean>
  <bean id="mySessionFactory"
  class="org.springframework.orm.hibernate.LocalSessionFactoryBean">
  <property name="mappingResources">
  <list>
  <value>prodUCt.hbm.xml</value>
  </list>
  </property>
  <property name="hibernateProperties">
  <props>
  <prop key="hibernate.dialect">
  net.sf.hibernate.dialect.mysqlDialect
  </prop>
  </props>
  </property>
  <property name="dataSource">
  <ref bean="myDataSource"/>
  </property>
  </bean>
  ……
  </beans>
  你可以将一个JNDI定位的DataSource换为一个本地定义的如DBCP的BasicDataSource,如下面的代码:
  <bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource"
  destroy-method="close">
  <property name="driverClassName">
  <value>org.hsqldb.jdbcDriver</value>
  </property>
  <property name="url">
  <value>jdbc:hsqldb:hsql://localhost:9001</value>
  </property>
  <property name="username">
  <value>sa</value>
  </property>
  <property name="passWord">
  <value></value>
  </property>
  </bean>
  
  当然你也可以把本地的SessionFactory换为JNDI定位的,但是假如不是在EJB上下文中,这是不需要的。(查看“容器资源 vs 本地资源”一节)
  
  1.2.3.反转控制:Template和Callback
  对于可以成为定制的数据访问对象或业务对象的方法来说,基本的模板编程模型看起来像下面所示的代码那样。对于外部对象没有任何实现特定接口的要求,它只需要提供一个Hibernate的SessionFacotry。它可以从任何地方得到,比较适宜的方法是作为从Spring 的application context中得到的bean引用:通过简单的setSessionFactory这个bean属性setter。下面的代码显示了在application context中一个DAO的定义,它引用了上面定义的SessionFactory,同时展示了一个DAO方法的具体实现。
  <beans>
  <bean id=”myProductDao” class=”product.ProductDaoImpl”>
  <property name=”sessionFactory”>
  <ref bean=”mySessionFactory”/>
  </property>
  </bean>
  ….
  </beans>
  
  public class ProductDaoImpl implements productDao{
  private SessionFactory sessionFactory;
  public void setSessionFactory(SessionFactory sessionFactory) {
  this.sessionFactory = sessionFactory;
  }
  public List loadProductsByCategory(final String category) {
  HibernateTemplate hibernateTemplate =
  new HibernateTemplate(this.sessionFactory);
  return (List) hibernateTemplate.execute(
  new Hi
上一篇:Java 学习之了解 Java 的运行环境 人气:349
下一篇:JProfiler跟踪和检查系统性能的好工具 人气:1197
浏览全部Java的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-10-10 企业网站智能管理系统(TZIMS) v6
2008-10-10 拓文asp.net网站内容管理系统 v6
2008-10-10 动网论坛PHP版 v2.0++ Build 081
2008-10-10 免费时代CMS v5.0
2008-10-10 wodig第四季中文DIGG社区 v4.1 b
2008-10-10 老Y文章管理系统 v2.2 bulid 081
2008-10-10 魔法盒动感相册 ASP+SQL版 v2.0
2008-10-10 Asoft签到管理系统 v3.0 Pack1
2008-10-10 哥特人音乐网潮流留言本 v1.1
2008-9-29 酷狗音乐(原KuGoo)2008 v5.310 正
2008-9-29 QQTab 1.1
2008-9-29 网络传送带 Net Transport 2.64a
2008-9-29 谷歌金山词霸v1.8
2008-9-29 TweakVI 1.0 Build 1090
2008-9-29 ACDSee Pro 2.5 Build 333 汉化绿
2008-9-29 Winamp v5.541(2189) 周明波简体
2008-9-27 CCleaner 2.12.651
2008-9-27 Mozilla Thunderbird 2.0.0.17 英
  发表评论
姓 名: 验证码:
内 容:
站长工具:网站收录查询 | Google PR查询 | ALEXA排名查询 | CSS在线编辑器 | 广告代码 | js/vbs加密 | md5加密 | 进制转换 | UTF-8 转换工具 | Html转换js | Html转换asp | Html转换php | Html转换perl
实用工具:汉字翻译拼音 | 拼音字典 | 符号对照表 | 个税计算 | 实时汇率查询换算 | 经典小工具 | 汉字简繁转换 | 普通单位换算 | 公制单位换算 | 生辰老黄历 | 国内电话区号 | 国家代码与域名缩写 | 文字加密解密 | 健康查询 | 万年历 | 汉字横竖排版 | 手机号码查询 | 计算器 | ip搜索
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号