`
jaesonchen
  • 浏览: 313253 次
  • 来自: ...
社区版块
存档分类
最新评论

通用DAO代码

 
阅读更多
import java.util.List; 

public interface BaseDao<M extends java.io.Serializable, PK extends java.io.Serializable> {

	/** 
	 * 按主键取记录
	 * @param id 主键值  
	 * @return 记录实体对象,如果没有符合主键条件的记录,则返回null 
	 */  
	public M findById(PK id); 
	
	/**
	 * 
	 * @param hql hibernate hql查询语句
	 * @param params 查询参数数组
	 * @return 返回一个list集合数据 
	 */
	public List<M> findByHQL(String hql, Object... params);

	/** 
	 * 修改一个实体对象(UPDATE一条记录)
	 * @param entity 实体对象 
	 */  
	public void update(M entity);  
	
	/**
	 * 插入一个实体(在数据库INSERT一条记录)
	 * @param entity 实体对象    
	 */  
	public PK save(M entity);  

	/** 
	 * 增加或更新实体 
	 * @param entity 实体对象 
	 */  
	public void saveOrUpdate(M entity);  
	
	/** 
	 * 删除指定的实体 
	 * @param entity 实体对象 
	 */  
	public void delete(M entity);
	
	/** 
	 * 删除指定id的实体 
	 * @param id pk 
	 */
	public void deleteById(PK id);
}

import java.util.List;
import java.lang.reflect.ParameterizedType; 
import javax.annotation.Resource;  
import org.hibernate.Query;  
import org.hibernate.Session;  
import org.hibernate.SessionFactory;

public abstract class BaseDaoImpl<M extends java.io.Serializable, PK extends java.io.Serializable> implements BaseDao<M, PK> {

	
	protected Class<M> entityClass;

	/**
	 * 向DAO层注入SessionFactory 
	 */
	@Resource
	protected SessionFactory sessionFactory;
	
	/**
	 * 构造方法,根据实例类自动获取实体类类型 
	 */
	@SuppressWarnings("unchecked")
	public BaseDaoImpl() {  
		
		ParameterizedType type = (ParameterizedType) this.getClass().getGenericSuperclass();  
		this.entityClass = (Class<M>) type.getActualTypeArguments()[0];
	}  

	/**
	 * 继承类取得session
	 * @return
	 */
	protected Session currentSession() {  
		//事务必须是开启的(Required),否则获取不到
		return this.sessionFactory.getCurrentSession();  
	}  

	@SuppressWarnings("unchecked")
	@Override
	public M findById(PK id) {
		
		return (M) this.currentSession().get(entityClass, id);
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<M> findByHQL(String hql, Object... params) {
		
		Query query = this.currentSession().createQuery(hql);  
		for (int i = 0; params != null && i < params.length; i++) { 
			
			query.setParameter(i, params[i]);  
		}

		return query.list();  
	}

	@Override
	public void update(M entity) {
		
		this.currentSession().update(entity);
	}

	@SuppressWarnings("unchecked")
	@Override
	public PK save(M entity) {
		
		PK id = (PK) this.currentSession().save(entity);
		return id;
	}

	@Override
	public void saveOrUpdate(M entity) {
		
		this.currentSession().saveOrUpdate(entity);
	}

	@Override
	public void delete(M entity) {
		
		this.currentSession().delete(entity);
	}
	
	@Override
	public void deleteById(PK id) {
		
		this.currentSession().delete(this.findById(id));
	}

}

////////////////////////////////////////////////////////
public interface StudentDao extends BaseDao<Student, String> {

	/** 
	 * 添加IBaseDAO 没有定义的方法
	 */
	public void studentMethod();
}

import org.springframework.stereotype.Repository;

@Repository(value = "studentDao")
public class StudentDaoImpl extends BaseDaoImpl<Student, String> implements StudentDao {

	@Override
	public void studentMethod() {
		
		System.out.println("studentMethod execute");
	}
}

 

 

分享到:
评论

相关推荐

    泛型通用DAO,可以很简化DAO层的代码

    泛型通用DAO是这种模式的一种优化,它利用了Java 5.0引入的泛型和反射机制,大大简化了DAO层的编码工作,提高了代码的可复用性和可维护性。 泛型是Java中的一种类型系统扩展,它允许在编译时声明参数化的类型,从而...

    java 基于泛型与反射的通用 DAO

    在实现通用DAO时,反射通常用于动态调用数据库操作的方法,比如SQL查询。例如,在`UsersDAO.java`中,可能有以下代码: ```java public class UsersDAO extends BaseDao&lt;Users&gt; { @Override public void save...

    hibernate4 通用dao,service

    6. 示例代码:博客可能会提供具体的代码示例,展示如何创建一个通用DAO和Service,以及如何在实际应用中使用它们。 7. 最佳实践:博主可能分享了一些在使用Hibernate时的最佳实践,如避免N+1查询,优化性能,以及...

    java ssh通用DAO另类实现示例

    本示例将探讨一个通用DAO的另类实现方法,旨在提高代码复用性和简化开发过程。 首先,理解SSH框架中的DAO设计模式至关重要。DAO是一种设计模式,它为应用程序提供了一种抽象的接口,以便与数据库进行交互,同时避免...

    C#特性标签实现通用Dao层

    总结起来,通过C#的特性标签和反射技术,我们可以构建一个灵活且可扩展的通用Dao层,大大减少了重复代码,提高了开发效率。这种方法的关键在于利用元数据(特性)来描述实体类和数据库之间的关系,以及利用反射在...

    Hibernate通用Dao设计。

    本篇文章将深入探讨Hibernate的通用Dao设计,帮助开发者理解如何利用Hibernate提高代码复用性和可维护性。 在传统的Java应用程序中,DAO(Data Access Object)层是用于封装数据库访问逻辑的地方,它隔离了业务逻辑...

    JDBCTemplate+JavaPOJO实现通用DAO

    在这个"JDBCTemplate+JavaPOJO实现通用DAO"的项目中,我们将探讨如何利用这两者构建一个通用的DAO层。 首先,Java POJO(Plain Old Java Object)是指那些没有特殊约束的简单Java对象,通常用于表示数据库中的实体...

    Hibernate_通用DAO模式,一个写好的dao层

    总的来说,这个资源为开发者提供了一个高效的工具,通过使用Hibernate和通用DAO模式,可以快速构建数据访问层,同时保持代码的整洁和可维护性。在开发Java Web应用程序时,正确理解和运用这种模式,能大大提高开发...

    Java源代码一个简单的通用DAO实现(基于hibernate)

    Java源代码 一个简单的通用DAO实现 (基于hibernate)面向应用层按POJO类缓存hibernate的session对象.使用举例: DAO dao = DAOFactory.getDAO(POJO.class);//获得一个全局类单例的DAO实例 dao.save(pojo); 你也可以...

    Hibernate 原生通用DAO

    使用这类通用DAO的优点在于减少了代码冗余,提高了代码复用性,使得开发人员可以更专注于业务逻辑,而不是数据库操作。但同时,由于是通用化设计,可能无法满足所有特定业务场景的需求,需要在实际使用时进行适当的...

    ssm(Spring-springMVC-Mybatis)通用Dao框架

    SSM(Spring-SpringMVC-Mybatis)通用Dao框架是一个常见的Java Web开发架构,它整合了Spring、SpringMVC和Mybatis三个强大的开源框架,为开发者提供了便捷的数据访问和业务逻辑处理能力。这个框架的使用可以显著提高...

    Hibernate的通用dao

    1. **代码复用**:通用DAO减少了大量重复的数据库操作代码,使得项目更加模块化,易于维护。 2. **灵活性**:尽管通用,但通过泛型,仍能处理不同数据实体的特性。 3. **测试与扩展**:通用DAO便于单元测试,且易于...

    通用DAO

    通用DAO的概念旨在减少数据库操作的重复性工作,提高代码的可复用性和可维护性。本文将深入探讨Java语言中如何使用反射机制实现通用DAO,并通过提供的"通用DAO源码及示例"来阐述这一概念。 首先,我们需要理解什么...

    SSH中通用dao类

    在这个场景中,"SSH中通用DAO类"指的是在SSH框架下设计和实现的可以应用于多种业务场景的数据访问对象(Data Access Object)类。 DAO层是三层架构或MVC架构中的一个重要部分,主要负责与数据库进行交互,将业务...

    mybatis 通用DAO 简单实现

    MyBatis 通用DAO(Data Access Object)是一种设计模式,旨在提供一种标准的方式来访问数据库,减少重复代码,提高开发效率。在Java Web开发中,MyBatis作为一个优秀的持久层框架,它支持定制化SQL、存储过程以及...

    JdbcTemplate通用泛型Dao实现

    总的来说,`JdbcTemplate`通用泛型Dao实现是提高开发效率和代码质量的有效方式。它使得数据库操作更加规范,降低了代码的复杂度,同时也为团队协作提供了便利。通过深入理解并熟练运用`JdbcTemplate`,开发者能够更...

    自动生成DAO源代码

    在压缩包中的"test"文件,可能是用来测试生成DAO代码的示例或者配置文件。实际操作中,你需要根据自己的数据库模型和需求调整JET模板,然后使用Eclipse生成对应的DAO类。这样,你可以快速地为每个实体类创建相应的...

    honlly-mybatis-prod:基于mybatis面向接口查询的通用dao代码,封装了大部分的crud操作

    【标题】"honlly-mybatis-prod"项目是一个基于MyBatis的Java框架,它致力于简化面向接口的查询操作,提供了一套通用的DAO(数据访问对象)代码,以帮助开发者快速进行CRUD(创建、读取、更新、删除)数据库操作。...

    通用数据库访问模块,通用DAO类

    通用数据库访问模块(通常称为 DAO,Data Access Object)是一种软件设计模式,用于在应用程序和数据库之间提供一个抽象层。DAO 类的主要目标是隔离业务逻辑层与数据存储层,使得应用程序可以独立于特定的数据库实现...

    Mybatis整合通用Dao,Mybatis整合通用Mapper,MyBatis3.x整合通用 Mapper3.5.x

    本文将深入探讨如何将MyBatis与通用Dao(Data Access Object)和通用Mapper进行整合,以提高开发效率和代码复用性。我们将以"Mybatis整合通用Dao,Mybatis整合通用Mapper,MyBatis3.x整合通用Mapper3.5.x"为主题,...

Global site tag (gtag.js) - Google Analytics