对于项目中的持久化实体,持久化实体虽然对应着不同的业务对象,拥有不同的属性,在数据库中有不同的数据表与其对应,但是这些不同的持久化实体间却存在着一些共性,如它们都需要id主键标识数据表中的某一条记录,都有可能需要对其进行增删改查的操作,于是,将其共性提取出来进行封装,对于提高代码的可重用性和可读性,显得十分迫切以及必要。
一。DomainObject
Java代码
package com.dream.model.couple;
public class DomainObject {
private Integer id;
private Integer version;
}
id是主键标识,version则可以作为乐观锁控制数据的正确性以及一致性,当然也可以在些添加其它一些项目必要的属性,根据不同的项目需求有所不同,如添加一个全局统一标识符,用以标识全局中的唯一一条数据。
二。DomainDao
Java代码
package com.dream.dao.standard;
import com.dream.model.couple.DomainObject;
import java.util.List;
public interface DomainDao {
void saveOrUpdate(DomainObject domainObject);
DomainObject findById(Class clazz, Integer id);
void delete(DomainObject domainObject);
List<DomainObject> findAll(Class clazz);
}
三。DomainDaoImpl
Java代码
package com.dream.dao;
import com.dream.dao.standard.DomainDao;
import com.dream.model.couple.DomainObject;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import java.util.List;
public class DomainDaoImpl extends HibernateDaoSupport implements DomainDao {
@Override
public void saveOrUpdate(DomainObject domainObject) {
getHibernateTemplate().saveOrUpdate(domainObject);
}
@Override
public DomainObject findById(Class clazz,Integer id) {
return (DomainObject) getHibernateTemplate().get(clazz.getName(), id);
}
@Override
public void delete(DomainObject domainObject) {
getHibernateTemplate().delete(domainObject);
}
@Override
public List<DomainObject> findAll(Class clazz) {
return getHibernateTemplate().find("from " + clazz.getName());
}
}
如此一来,当项目中的其它模块需要使用CRUD操作时,只需简单继承DomainDaoImpl类即可,避免重复代码的编写。