Hibernate Sync DAO封装小结

转一篇我在项目BLOG上写的文章。搞Hibernate Sync花了一段时间,算小结一下吧。


Hibernate Sync虽然不是很强大,但是,对于一般的简单应用来说,也是足以应付了。

最近在研究DBUnit,想把单元测试引入到咱们的数据库DAO测试中来。做了一些试验,我也对DBUnit做了一些封装,以后写基于DBUnit 的TestCase就像写Junit的单元测试那样简单:) 如果有需要的话,我可以整理一下关于数据库DAO测试的内容,给大家汇报一下:)

在做例子的过程中,我使用Hibernate Sync来生成DAO方法。为什么选用Hibernate Sync,因为它简单,并且生成的类恰好够用,并且也适合在它上面做开发,建模更加复杂的ORM映射。

好了,闲话不讲。本文的主要内容是研究Hibernate Sync DAO的设计,并通过代码示例来探讨Hibernate Sync对Hibernate的良好封装。

它的DAO继承体系如下:dao继承体系
dao可 以看到_BaseRootDAO是所有DAO的基类,_RootDAO基本上可以忽略,没有实质作用。BaseBugDAO:提供对于Bug实体的常用增 删改查操作。BugDAO主要是给我们用的,如果我们需要写其它的DAO方法,可以写在这个里头。另外,它也遵循普遍的OO原则,对于BugDAO类,也 实现了相应的BugDAO接口,在iface包下。(按照我们的代码编写规范,这样定义接口名称可是不行的。我们需要把BugDAO接口改成 IBugDAO)。

它的Entity继承体系如下:entity

可以看到,在Hibernate中,实体是比较纯粹的,就是实现了Serialize接口的对象,并不会在该实体对象中含有很多CRUD操作。我认 为这是正确的设计。回过头来,BaseBug就对应着我们的数据库,我们不用去修改BaseBug。Bug对象,我们可以增加属性和方法,可以将其改造成 有血有肉的领域对象。这个后面再说。

应该说,DAO做到这个程度基本上已经可以了。它让我们减少了编写DAO的工作量,同时在代码质量上是有保证的。在整个DAO层次中,最为核心的类 就是_BaseRootDAO。研究这个类,可以让我们更加了解Hibernate的使用方式:Configuration -> SessionFactory -> Session (ThreadLocal)
自己读代码嘛,从下往上看看_BaseRootDAO是如何封装Hibernate的。

java 代码
 
  1. public java.util.List findAll () {  
  2.  Session s = null;  
  3.  try {  
  4.    s = getSession(); //首先去取得Session。跟踪进去  
  5.    return findAll(s); //然后通过Session.find(×××)来实现findAll操作,这步下去是Session使用方面的东西,有兴趣自己跟踪。  
  6.   } finally {  
  7.    closeSession(s);  
  8.   }  
  9.  }  

算了,在这上 面分析代码太麻烦。如果有兴趣的话,直接跟踪代码进去看看。就知道它什么时候去创建SessionFactory,什么时候去new Configuration,然后什么时候去config,还可以看到它是怎么支持多个SessionFactory的,以及它是怎么重用Session 的,凡此总总。

在使用Hibernate Sync过程中也遇到一些问题:

1. 关于Content is not allowed in prolog问题。这个问题困扰了我2个小时,最终发现我根本就没有去配置Hibernate的配置文件的名称。具体名称当然是在 _BaseRootDAO中,有个getConfigurationFileName()方法。这个问题和我google到的答案完全是不一致的,最终还 是分析出来的。

2. _BaseRootDAO对于单个操作都是事务的,比如save,update, delete等。但是对于要批量delete,它的实现是一个一个调用单个delete。因为不是在一个事务里头,而是在N个事务里头,可能会有一些性能 上的问题。和一般的要求还不太一致:)

使用就很简答了。以BugDAO为例:List actual = new BugDAO().findAll(); //完全不用去写什么getSession方法,很简单。

资源下载链接为: https://pan.quark.cn/s/5c50e6120579 在Android移动应用开发中,定位功能扮演着极为关键的角色,尤其是在提供导航、本地搜索等服务时,它能够帮助应用获取用户的位置信息。以“baiduGPS.rar”为例,这是一个基于百度地图API实现定位功能的示例项目,旨在展示如何在Android应用中集成百度地图的GPS定位服务。以下是对该技术的详细阐述。 百度地图API简介 百度地图API是由百度提供的一系列开放接口,开发者可以利用这些接口将百度地图的功能集成到自己的应用中,涵盖地图展示、定位、路径规划等多个方面。借助它,开发者能够开发出满足不同业务需求的定制化地图应用。 Android定位方式 Android系统支持多种定位方式,包括GPS(全球定位系统)和网络定位(通过Wi-Fi及移动网络)。开发者可以根据应用的具体需求选择合适的定位方法。在本示例中,主要采用GPS实现高精度定位。 权限声明 在Android应用中使用定位功能前,必须在Manifest.xml文件中声明相关权限。例如,添加<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />,以获取用户的精确位置信息。 百度地图SDK初始化 集成百度地图API时,需要在应用启动时初始化地图SDK。通常在Application类或Activity的onCreate()方法中调用BMapManager.init(),并设置回调监听器以处理初始化结果。 MapView的创建 在布局文件中添加MapView组件,它是地图显示的基础。通过设置其属性(如mapType、zoomLevel等),可以控制地图的显示效果。 定位服务的管理 使用百度地图API的LocationClient类来管理定位服务
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值