码迷,mamicode.com
首页 > 编程语言 > 详细

Java反射应用案例

时间:2015-06-30 22:03:51      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:java 反射   reflect   泛型   

场景:在购物网站中,有一级分类实体、二级分类实体、商品实体,对三个实体映射到数据库中的操作有:删除一条记            录、保存一条记录、根据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);
}



版权声明:本文为博主原创文章,未经博主允许不得转载。

Java反射应用案例

标签:java 反射   reflect   泛型   

原文地址:http://blog.csdn.net/u013516966/article/details/46699347

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!