dao设计:
public interface DaoBase<T>{
//常用的方法 CRUD
void save(T t);
}
//----------------------------------------------------------------------
//----------------------------------------------------------------------
public class DaoSupport<T> implements DaoBase<T> {
// 实体的类型 即T 的类型
private Class<T> clazz;
// 实体的名称
private final String entityName;
public DaoSupport() {
clazz = GenericsUtil.getClazz(this.getClass());
this.entityName = this.clazz.getName();
System.out.println(entityName);
}
}
//----------------------------------------------------------------------
//----------------------------------------------------------------------
public class GenericsUtil {
@SuppressWarnings("unchecked")
public static Class getClazz(Class clazz){
//取得泛型类型
Type type = clazz.getGenericSuperclass();
if (!(type instanceof ParameterizedType)) {
throw new RuntimeException();
}
ParameterizedType pt = (ParameterizedType) type;
//取得实际的类型
return (Class) pt.getActualTypeArguments()[0];
}
}
//----------------------------------------------------------------------
//----------------------------------------------------------------------
//具体的DAO,针对某个实体Bean
public interface UserDao extends DaoBase<User>{
}
public class UserDaoImpl extends DaoSupport<User> implements UserDao{
public UserDaoImpl(){}
}
//----------------------------------------------------------------------
//----------------------------------------------------------------------
//实体
public class User{}
//----------------------------------------------------------------------
//----------------------------------------------------------------------
测试:
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
UserDao dao = new UserDaoImpl();
}
}
//----------------------------------------------------------------------
//----------------------------------------------------------------------
输出:User
注:这样设计可以避免类型转换,直接取到的就是User 对象了
分享到:
相关推荐
泛型Service:GenericService.java 与泛型dao没有区别 Service :PersonService.java 直接继承。 泛型serviceimpl与serviceimpl实现和dao层实现一样。 Action : SavePersonAction直接调用PersonService。 ...
综上所述,这个项目展示了如何利用Java的泛型和反射技术实现一个通用的DAO,使得数据库操作更加灵活和易于维护。泛型确保了类型安全,而反射则提供了运行时的动态行为。这种设计模式在实际开发中非常常见,尤其是在...
总的来说,"ssh2 + dao泛型"这个主题涵盖了SSH2框架的整合使用,以及如何利用Java泛型优化数据库操作。通过理解和实践这些知识点,开发者可以提升Java Web项目的可维护性、扩展性和效率。在阅读博客文章时,应重点...
在动态数据库操作中,泛型可以用来创建通用的DAO(数据访问对象)接口和实现,以处理不同类型的实体对象。例如,我们可以定义一个`GenericDAO<T>`接口,其中`T`代表任何数据模型类。这个接口可以包含`insert(T ...
* DAO设计模式:泛型可以用于DAO设计模式中,例如BaseHibernateEntityDao等。 * 工具类:泛型可以用于工具类中,例如工具类的静态方法可以使用泛型。 五、结论 泛型是Java编程语言中的一种重要特性,它可以提高...
总的来说,"SSHWithAnnotationDemo"项目展示了如何利用现代Java技术栈的高级特性,包括Struts2、Spring3和Hibernate的注解功能,DAO层的泛型设计以及通用的分页实现,来构建一个高效、可维护的Web应用。这样的实践...
泛型DAO层通过利用Java的泛型机制,提供了一种类型安全且高度可复用的数据访问接口。相比传统的DAO设计,泛型DAO层具有以下显著优势: 1. **类型安全性**:泛型允许开发者在编译时检查类型,避免了运行时的...
【泛型DAO】是一种在Java开发中常见的设计模式,它利用了Java泛型特性来提高代码的可重用性和类型安全性。在Java中,DAO(Data Access Object)模式是用来封装对数据库的操作,将业务逻辑与数据访问逻辑分离,使得...
在泛型背景下,DAO类通常会被设计成泛型,以便支持对不同类型的实体进行数据操作。`GenericUtil`类中的方法可以帮助这些DAO类动态获取其实体类型,这在动态创建查询、反射调用方法或进行类型转换时尤为重要。 #### ...
现在无论做什么应用,基本上都会有涉及对象... 其实,利用Java面向对象的基本特性及JDK5新引入的泛型语法,我们可以创建通用的DAO对象的CRUD方法,同时又可保证类型的安全性。下面DAO的实现以Hibernate为基础加以演示。
总的来说,"ssh通用泛型DAO"是一种设计模式,旨在简化SSH框架下的数据访问层开发,提高代码复用性,减少重复工作,同时通过泛型提供类型安全的保障。理解和熟练运用这一模式,能够有效地提升Java Web应用的开发效率...
【泛型DAO模型设计】是Java开发中一种高效且可复用的数据访问对象(DAO)设计方式,结合了泛型和反射技术。泛型在Java中引入,旨在提高代码的安全性和可读性,减少类型转换的繁琐过程。DAO设计模式主要用于数据库...
本篇文章将深入探讨一个使用Spring注解和Hibernate实现的泛型DAO设计,以提高代码的复用性和可维护性。 首先,`HibernateBaseDao.java`是基础的Hibernate DAO类,它提供了对Hibernate操作的基本封装。这个类通常会...
在实际开发中,BaseDao和BaseService的泛型设计有助于代码的模块化和解耦,使得各个层次之间的依赖关系更加清晰。它们可以降低代码复杂性,提高代码的可读性和可维护性,同时减少了因类型转换错误可能导致的bug。 ...
Java让泛型实例化的方法 Java是一种静态类型语言,它可以在编译时检查类型的正确性,以避免运行时的类型错误。然而,在 Java 中使用泛型时,会出现一个问题:如何实例化泛型对象?在 Java 中,泛型擦除机制使得...
现在无论做什么应用,基本上都会有涉及对象... 其实,利用Java面向对象的基本特性及JDK5新引入的泛型语法,我们可以创建通用的DAO对象的CRUD方法,同时又可保证类型的安全性。下面DAO的实现以Hibernate为基础加以演示。
泛型DAO模式是一种通用的数据访问层设计模式,它通过使用Java泛型来提供对不同类型的对象进行统一的操作接口。这种模式使得开发者可以在不了解具体实体类的情况下实现对数据库的基本CRUD(Create、Read、Update、...
Java 中利用泛型和反射机制抽象DAO的实例 Java 中利用泛型和反射机制抽象DAO的实例是指在 Java 中使用泛型和反射机制来抽象出一个通用的DAO(Data Access Object),从而将DAO抽象到另一层次,提高代码的质量和可...