Java反射应用案例

场景:在购物网站中,有一级分类实体、二级分类实体、商品实体,对三个实体映射到数据库中的操作有:删除一条记            录、保存一条记录、根据id查找一条记录、修改记录等方法。如果我们不使用反射,按照一般的写法,那么我们           对应三个实体的DAO都要实现增删改查的操作。如果使用反射机制我们只需要定义一个基类泛型DAO,让其实现          所有的操作,然后使其他三个DAO分别继承该BaseDAO,然后通过反射去识别在运行过程具体实体类型,实现操          作。

BaseDao.java

     import java.util.List;
                public interface BaseDao<T> {
                 public void save(T t);
                 public void update(T t);
                 public void delete(T t);
                 public T findById(Integer id);
                public T findById(String id);
               public List<T> findAll();
             }

CategoryDao .java

public interface CategoryDao extends BaseDao<Category>{}


CategorySecondDao .java
public interface CategorySecondDao extends BaseDao<CategorySecond>{}

ProductDao .java

public interface ProductDao extends BaseDao<Product>{

List<Product> findHotProduct();  //也可以有其他的方法

}


BaseDaoImpl.java

public class BaseDaoImpl<T> extends HibernateDaoSupport implements BaseDao<T> {
private Class clazz ;

public BaseDaoImpl() {
// 获得Class对象:
Class c = this.getClass();
System.out.println(c);
Type type = c.getGenericSuperclass();
ParameterizedType pType = (ParameterizedType) type;
System.out.println(pType);
Type[] types = pType.getActualTypeArguments();
this.clazz = (Class) types[0];  //获得具体的类型

}
@Override
public void delete(T t) {
this.getHibernateTemplate().delete(t);
}
@Override
public List<T> findAll() {
String hql = "from "+clazz.getSimpleName();
return this.getHibernateTemplate().find(hql);
}
@Override
public T findById(Integer id) {
return (T) this.getHibernateTemplate().get(clazz, id);
}
@Override
public T findById(String id) {
return (T) this.getHibernateTemplate().get(clazz, id);
}
@Override
public void save(T t) {
this.getHibernateTemplate().save(t);
}
@Override
public void update(T t) {
this.getHibernateTemplate().update(t);
}

CategoryDaoImpl .java

public class CategoryDaoImpl extends BaseDaoImpl<Category> implements CategoryDao {
}

 CategorySecondDaoImpl .java

public class CategorySecondDaoImpl extends BaseDaoImpl<CategorySecond> implements CategorySecondDao {}

ProductDaoImpl .java

public class ProductDaoImpl extends BaseDaoImpl<Product> implements ProductDao {

public List<Product> findHotProduct() {
DetachedCriteria criteria = DetachedCriteria.forClass(Product.class);
criteria.add(Restrictions.eq("is_hot", 1));
criteria.addOrder(Order.desc("pdate"));
return this.getHibernateTemplate().findByCriteria(criteria, 0, 10);
}



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值