基于泛型的通用Dao接口:(主要是在使用hibernate或JPA时使用)
package com.qiujy.dao;
import java.io.Serializable;
import java.util.List;
/**
* 基于泛型的通用Dao接口
*/
public interface GenericDao<T> {
void create(T entity);
void delete(T entity);
void update(T entity);
T findById(Serializable id);
List<T> findAll();
List<T> findList(int pageNo, int pageSize);
int getCountOfAll();
}
hibernate对此泛型Dao接口的使用:
package com.qiujy.dao.hibernate;
import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.util.List;
import org.hibernate.criterion.Projections;
import com.qiujy.common.HibernateUtil;
import com.qiujy.dao.GenericDao;
/**
* Hibernate对泛型通用Dao接口的实现
*/
public class GenericHibernateDaoImpl<T> implements GenericDao<T> {
private Class<T> clazz;
@SuppressWarnings("unchecked")
public GenericHibernateDaoImpl() {
//通过反射获取T的类型信息实例
this.clazz = (Class<T>)((ParameterizedType)this.getClass().getGenericSuperclass())
.getActualTypeArguments()[0];
}
public void create(T entity) {
HibernateUtil.getSession().save(entity);
}
public void delete(T entity) {
HibernateUtil.getSession().delete(entity);
}
@SuppressWarnings("unchecked")
public void update(T entity) {
//HibernateUtil.getSession().saveOrUpdate(entity);
entity = (T) HibernateUtil.getSession().merge(entity);
}
@SuppressWarnings("unchecked")
public List<T> findAll() {
return HibernateUtil.getSession().createCriteria(clazz).list();
}
@SuppressWarnings("unchecked")
public List<T> findList(int pageNo, int pageSize) {
return HibernateUtil.getSession().createCriteria(clazz)
.setFirstResult((pageNo - 1) * pageSize)
.setMaxResults(pageSize)
.list();
}
public int getCountOfAll() {
Integer count = (Integer) HibernateUtil.getSession()
.createCriteria(clazz)
.setProjection(Projections.rowCount())
.uniqueResult();
if (null == count) {
return 0;
} else {
return count.intValue();
}
}
@SuppressWarnings("unchecked")
public T findById(Serializable id) {
return (T)HibernateUtil.getSession().load(clazz, id); //get
}
}
使用泛型Dao接口:
package com.qiujy.dao;
import java.util.List;
import com.qiujy.domain.Resource;
/**
* Resource类的Dao接口
*/
public interface ResourceDao extends GenericDao<Resource> {
public List<Resource> findResources(int status);
}
使用hibernate的实现:
package com.qiujy.dao.hibernate;
import java.util.List;
import com.qiujy.common.HibernateUtil;
import com.qiujy.dao.ResourceDao;
import com.qiujy.domain.Resource;
public class ResourceDaoImpl extends GenericHibernateDaoImpl<Resource> implements ResourceDao {
@SuppressWarnings("unchecked")
public List<Resource> findResources(int status) {
return (List<Resource>)HibernateUtil.getSession()
.createQuery("from Resource where status=:status")
.setInteger("status", status)
.list();
}
}
分享到:
相关推荐
Java源代码 一个简单的通用DAO实现 (基于hibernate)面向应用层按POJO类缓存hibernate的session对象.使用举例: DAO dao = DAOFactory.getDAO(POJO.class);//获得一个全局类单例的DAO实例 dao.save(pojo); 你也可以...
现在无论做什么应用,基本上都会有涉及对象... 其实,利用Java面向对象的基本特性及JDK5新引入的泛型语法,我们可以创建通用的DAO对象的CRUD方法,同时又可保证类型的安全性。下面DAO的实现以Hibernate为基础加以演示。
现在无论做什么应用,基本上都会有涉及对象... 其实,利用Java面向对象的基本特性及JDK5新引入的泛型语法,我们可以创建通用的DAO对象的CRUD方法,同时又可保证类型的安全性。下面DAO的实现以Hibernate为基础加以演示。
Haha.Hibernate SprintSideExt 通用HibernateDAO 文章资源 详见:http://blog.csdn.net/lijun7788/article/details/6658847
3)业务逻辑改变时,dao需要同时修改两个类文件(接口和实现类) 在本文中,我将为您展示如何避免再三地重复 DAO 代码。 在这里我建议项目最好使用一个共通的DAO,因为这样会为你省去非常多的类,而那些类里的...
这种实现的主要优点是,由于这个 dao 是使用 Java 泛型实现的,我们只需要提供托管的实体类型和主键类型。 通过这样做,我们可以访问参数化数据操作,而无需编写单行代码。 请注意,这样做的主要目标是代码重用,这...
3)业务逻辑改变时,dao需要同时修改两个类文件(接口和实现类) 在本文中,我将为您展示如何避免再三地重复 DAO 代码。 在这里我建议项目最好使用一个共通的DAO,因为这样会为你省去非常多的类,而那些类里的...
service接口 ... ... ... public interface EmployeeService extends Entity...这样只需要向dao中注入pojo的完整包名,你就能拥有一个pojo的dao,并且在你的service接口和实现类里不用写一句代码. 轻松持久化你的entity pojo
这种实现的主要优点是,由于这个 dao 是使用 Java 泛型实现的,我们只需要提供托管的实体类型和主键类型。 通过这样做,我们可以访问参数化数据操作,而无需编写单行代码。 请注意,这样做的主要目标是代码重用,这...
java dal 封装的通用dao 数据访问层,如果你不喜欢用Hibernate、Mybaits这类ORM框架,喜欢Spring JdbcTemplate或DbUtils,那么可以试试这个封装的通用dal
AutoDAO是Java的类固醇实现的通用DAO,具有Hibernate支持,注释驱动的配置,紧密的Spring Framework集成以及大多数常见查询类型所需的零持久性代码。
这个Dao层设计模式,是多年来本人总结的经典通用方法的集合,应用hibernate技术,以及java泛型模式,为快速开发项目提供了通用Dao层。文档中有相应测试用例!
利用eclipse的JET模板自动生成java文件来生成DAO,生成的DAO继承了一个通用的GenenicDao,GenenicDao用到了spring和hibernate. 提供源代码
消息接口,通用接口和菜单接口(没有内测号无法测试)==============由于涉及的框架比较杂乱,在此一一解释:简便实用的前置条件:你的项目是基于Spring,Maven,Hibernate架构;你的项目至少有一个已经存在的配置...
写了一个通用java访问数据库操作的DAO类,非常简单,非常强大,非常方便,非常好用。绝对原版,绝对原创。把hibernate彻底扔掉。(根据C#改编的,原本我是搞C#开发的)
写了一个通用java访问数据库操作的DAO类,非常简单,非常强大,非常方便,非常好用。绝对原版,绝对原创。把hibernate彻底扔掉。(根据C#改编的,原本我是搞C#开发的)支持泛型集合,让程序运行效率更高。
通用道在 JPA/HIbernate/Spring 环境中使用泛型提供 DAO API,因此它可以与此类架构中的任何 Hibernate POJO 一起使用,而无需为每个域类创建专用的数据访问接口。 Maven 依赖项: <dependency> <groupId>org....
14.2.3hibernate的dao实现 281 14.2.4使用hibernatetemplate 281 14.2.5管理hibernate事务 282 14.3项目实战——学生成绩查询系统 283 本章小结 292 课后练习 293 第15章图书馆管理系统 294 15.1系统功能解析...
通过将搜索对象传递给通用DAO和通用DAO的搜索方法,可以使用此功能。 搜索对象提供了灵活的搜索选项: 使用标准运算符(=,!=,>,<,> =,<=,LIKE,IN,IS NULL和IS EMPTY)对属性进行过滤。 使用...