相信目前所有的IT公司网站在设计WEB项目的时候都含有持久层,同样地使用过Hibernate的程序员都应该看过或者了解过Hibernate根据数据库反向生成持久层代码的模板。对于Hibernate生成的这个通用型的模板,可以看一下了解Hibernate是怎么处理这一层的。笔者来到公司作为开发的时候,项目已经有了一个比较成型的Dao层代码。当然这个层级代码是用C#+NHibernate写的。在这里刚好用了泛型把整个代码改成使用Java+Hibernate去实现。
首先,先大致阐述下整个通用Dao层是怎么设计的。
具体的类图如下:
大致的设计思路:
1. 工厂类:用来注册Dao层里面的每一个接口,通过HibernateFactory获取到每个具体Dao的实例;实现面向接口式编程。
2. 抽象层:使用泛型抽象出一个Dao层面的接口,使得每个具体的类操作都有自己的Dao实例进行操作。
3. 使用虚拟类对抽象层进行重写,没必要为每个Dao编写一次重复的代码。
对于这套模板,大部分的都是概念性的东西,说白了这个设计里面最重要的就是AbstractDao<T>这个类,因为所有的代码基本都囊括在这里面了。下面,来贴下这个类里面的代码。
1 package com.template.dao.interfaces; 2 3 import java.io.Serializable; 4 import java.util.List; 5 6 /** 7 * @Author: Travelsky_CLSUN 8 * @Date: Created on 17-5-18 9 * @Description: 抽象一个Dao层级内容,含有基本的增删改查功能 10 */ 11 public interface IDao<T> 12 { 13 14 void add(T t); 15 16 void delete(Serializable id); 17 18 void update(T t); 19 20 T findById(Serializable id); 21 22 List<T> findAll(); 23 24 }