java中的泛型和反射_Java 中利用泛型和反射机制抽象DAO的实例

Java 中利用泛型和反射机制抽象DAO的实例

发布于 2020-6-19|

复制链接

摘记: Java 中利用泛型和反射机制抽象DAO的实例一般的DAO都有CRUD操作,在每个实体DAO接口中重复定义这些方法,不如提供一个通用的DAO接口,具体的实体DAO可以扩展这个通用DAO以提供特殊的操作,从而将DAO抽象到另一层次,令代码质量有很好的提升1.通用接口 ..

Java 中利用泛型和反射机制抽象DAO的实例一般的DAO都有CRUD操作,在每个实体DAO接口中重复定义这些方法,不如提供一个通用的DAO接口,具体的实体DAO可以扩展这个通用DAO以提供特殊的操作,从而将DAO抽象到另一层次,令代码质量有很好的提升1.通用接口

```java

import java.io.Serializable;

import java.util.List;

public interface BaseDao {

T get(Serializable id);

List getAll();

// List find(String hql,);

void save(Object o);

void remove(Object o);

void update(Object o);

}

```

2.DAO基类

```java

import java.io.Serializable;

import java.lang.reflect.ParameterizedType;

import java.lang.reflect.Type;

import java.util.List;

import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

public class HibernateBaseDao extends HibernateDaoSupport implements BaseDao{

private Class entityClass;

public HibernateBaseDao() {

Type genType = getClass().getGenericSuperclass();

Type[] params = ((ParameterizedType) genType).getActualTypeArguments();

entityClass = (Class)params[0];

}

public T get(Serializable id) {

return (T)getHibernateTemplate().load(entityClass, id);

}

public List getAll() {

return getHibernateTemplate().loadAll(entityClass);

}

public void save(Object o) {

getHibernateTemplate().saveOrUpdate(o);

}

public void remove(Object o) {

getHibernateTemplate().delete(o);

}

public void update(Object o) {

getHibernateTemplate().update(o);

}

}

```

这里利用反射机制获取泛型对应的实体类的类型3.实体DAO类

```java

import java.util.Iterator;

import java.util.List;

import com.baobaotao.dao.ForumDao;

import com.baobaotao.dao.HibernateBaseDao;

import com.baobaotao.domain.Forum;

public class ForumHibernateDao2 extends HibernateBaseDao implements ForumDao{

public long getForumNum() {

Iterator iter = getHibernateTemplate().iterate(

"select count(f.forumId) from Forum f");

return ((Long)iter.next());

}

}

```

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值