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是这种模式的一种优化,它利用了Java 5.0引入的泛型和反射机制,大大简化了DAO层的编码工作,提高了代码的可复用性和可维护性。 泛型是Java中的一种类型系统扩展,它允许在编译时声明参数化的类型,从而...
在实现通用DAO时,反射通常用于动态调用数据库操作的方法,比如SQL查询。例如,在`UsersDAO.java`中,可能有以下代码: ```java public class UsersDAO extends BaseDao<Users> { @Override public void save...
6. 示例代码:博客可能会提供具体的代码示例,展示如何创建一个通用DAO和Service,以及如何在实际应用中使用它们。 7. 最佳实践:博主可能分享了一些在使用Hibernate时的最佳实践,如避免N+1查询,优化性能,以及...
本示例将探讨一个通用DAO的另类实现方法,旨在提高代码复用性和简化开发过程。 首先,理解SSH框架中的DAO设计模式至关重要。DAO是一种设计模式,它为应用程序提供了一种抽象的接口,以便与数据库进行交互,同时避免...
总结起来,通过C#的特性标签和反射技术,我们可以构建一个灵活且可扩展的通用Dao层,大大减少了重复代码,提高了开发效率。这种方法的关键在于利用元数据(特性)来描述实体类和数据库之间的关系,以及利用反射在...
本篇文章将深入探讨Hibernate的通用Dao设计,帮助开发者理解如何利用Hibernate提高代码复用性和可维护性。 在传统的Java应用程序中,DAO(Data Access Object)层是用于封装数据库访问逻辑的地方,它隔离了业务逻辑...
在这个"JDBCTemplate+JavaPOJO实现通用DAO"的项目中,我们将探讨如何利用这两者构建一个通用的DAO层。 首先,Java POJO(Plain Old Java Object)是指那些没有特殊约束的简单Java对象,通常用于表示数据库中的实体...
总的来说,这个资源为开发者提供了一个高效的工具,通过使用Hibernate和通用DAO模式,可以快速构建数据访问层,同时保持代码的整洁和可维护性。在开发Java Web应用程序时,正确理解和运用这种模式,能大大提高开发...
Java源代码 一个简单的通用DAO实现 (基于hibernate)面向应用层按POJO类缓存hibernate的session对象.使用举例: DAO dao = DAOFactory.getDAO(POJO.class);//获得一个全局类单例的DAO实例 dao.save(pojo); 你也可以...
使用这类通用DAO的优点在于减少了代码冗余,提高了代码复用性,使得开发人员可以更专注于业务逻辑,而不是数据库操作。但同时,由于是通用化设计,可能无法满足所有特定业务场景的需求,需要在实际使用时进行适当的...
SSM(Spring-SpringMVC-Mybatis)通用Dao框架是一个常见的Java Web开发架构,它整合了Spring、SpringMVC和Mybatis三个强大的开源框架,为开发者提供了便捷的数据访问和业务逻辑处理能力。这个框架的使用可以显著提高...
1. **代码复用**:通用DAO减少了大量重复的数据库操作代码,使得项目更加模块化,易于维护。 2. **灵活性**:尽管通用,但通过泛型,仍能处理不同数据实体的特性。 3. **测试与扩展**:通用DAO便于单元测试,且易于...
通用DAO的概念旨在减少数据库操作的重复性工作,提高代码的可复用性和可维护性。本文将深入探讨Java语言中如何使用反射机制实现通用DAO,并通过提供的"通用DAO源码及示例"来阐述这一概念。 首先,我们需要理解什么...
在这个场景中,"SSH中通用DAO类"指的是在SSH框架下设计和实现的可以应用于多种业务场景的数据访问对象(Data Access Object)类。 DAO层是三层架构或MVC架构中的一个重要部分,主要负责与数据库进行交互,将业务...
MyBatis 通用DAO(Data Access Object)是一种设计模式,旨在提供一种标准的方式来访问数据库,减少重复代码,提高开发效率。在Java Web开发中,MyBatis作为一个优秀的持久层框架,它支持定制化SQL、存储过程以及...
总的来说,`JdbcTemplate`通用泛型Dao实现是提高开发效率和代码质量的有效方式。它使得数据库操作更加规范,降低了代码的复杂度,同时也为团队协作提供了便利。通过深入理解并熟练运用`JdbcTemplate`,开发者能够更...
在压缩包中的"test"文件,可能是用来测试生成DAO代码的示例或者配置文件。实际操作中,你需要根据自己的数据库模型和需求调整JET模板,然后使用Eclipse生成对应的DAO类。这样,你可以快速地为每个实体类创建相应的...
【标题】"honlly-mybatis-prod"项目是一个基于MyBatis的Java框架,它致力于简化面向接口的查询操作,提供了一套通用的DAO(数据访问对象)代码,以帮助开发者快速进行CRUD(创建、读取、更新、删除)数据库操作。...
通用数据库访问模块(通常称为 DAO,Data Access Object)是一种软件设计模式,用于在应用程序和数据库之间提供一个抽象层。DAO 类的主要目标是隔离业务逻辑层与数据存储层,使得应用程序可以独立于特定的数据库实现...
本文将深入探讨如何将MyBatis与通用Dao(Data Access Object)和通用Mapper进行整合,以提高开发效率和代码复用性。我们将以"Mybatis整合通用Dao,Mybatis整合通用Mapper,MyBatis3.x整合通用Mapper3.5.x"为主题,...