(1)泛型接口GenericDao
public interface GenericDao <T, ID extends Serializable>{
public T findById(ID id);
T findById(ID id, boolean lock);
public T load(ID id);
List findAll();
List findByExample(T exampleInstance);
T save(T entity);
void update(T entity);
void delete(T entity);
}
(2)泛型接口实现GenericDaoImpl
public abstract class GenericDaoImpl <T, ID extends Serializable>
extends HibernateDaoSupport implements GenericDao <T, ID>{
private Class persistentClass;
public GenericDaoImpl() {
this.persistentClass = (Class) ((ParameterizedType) getClass()
.getGenericSuperclass()).getActualTypeArguments()[0];
}
public Class getPersistentClass() {
return persistentClass;
}
@SuppressWarnings("unchecked")
public T findById(ID id) {
return (T) getHibernateTemplate().get(getPersistentClass(), id);
}
@SuppressWarnings("unchecked")
public T load(ID id){
T t = (T)getHibernateTemplate().load(getPersistentClass(), id);
return t;
}
@SuppressWarnings("unchecked")
public T findById(ID id, boolean lock) {
T entity;
if (lock)
entity = (T) getHibernateTemplate().load(getPersistentClass(), id,
LockMode.UPGRADE);
else
entity = findById(id);
return entity;
}
public List findAll() {
return findByCriteria();
}
@SuppressWarnings("unchecked")
public List findByExample(T exampleInstance) {
DetachedCriteria detachedCrit = DetachedCriteria
.forClass(getPersistentClass());
Example example = Example.create(exampleInstance);
detachedCrit.add(example);
return getHibernateTemplate().findByCriteria(detachedCrit);
}
@SuppressWarnings("unchecked")
public List findByExample(T exampleInstance, String[] excludeProperty) {
DetachedCriteria detachedCrit = DetachedCriteria
.forClass(getPersistentClass());
Example example = Example.create(exampleInstance);
for (String exclude : excludeProperty) {
example.excludeProperty(exclude);
}
detachedCrit.add(example);
return getHibernateTemplate().findByCriteria(detachedCrit);
}
public T save(T entity) {
getHibernateTemplate().saveOrUpdate(entity);
return entity;
}
public void update(T entity){
getHibernateTemplate().update(entity);
}
public void delete(T entity) {
getHibernateTemplate().delete(entity);
}
@SuppressWarnings("unchecked")
protected List findByCriteria(Criterion... criterion) {
DetachedCriteria detachedCrit = DetachedCriteria
.forClass(getPersistentClass());
for (Criterion c : criterion) {
detachedCrit.add(c);
}
return getHibernateTemplate().findByCriteria(detachedCrit);
}
}
(3)CustomersDao
public interface CustomersDao extends GenericDao <Customers,Integer>{
}
(4)CustomersDaoImpl
public class CustomersDaoImpl extends GenericDaoImpl <Customers,Integer> implements CustomersDao{
}
分享到:
相关推荐
在研究泛型DAO的源码时,我们可以学习到如何实现泛型类,以及如何在具体操作中使用反射或类型信息来处理泛型类型。例如,Hibernate的`Session`接口和`SessionFactory`类就提供了泛型版本的`get()`和`load()`方法,...
这些配置文件和代码会详细阐述如何进行S2SH的整合,以及如何使用注解进行配置,如何处理JSON数据,以及如何设计和实现泛型Dao。通过深入学习和实践这些内容,开发者可以更好地理解和掌握企业级Java Web应用的开发...
在Java开发中,数据访问对象(DAO)模式是一种常见的设计模式,用于封装对数据库的访问操作,以解耦业务逻辑和数据存储。...在压缩包文件"DAL"中,可能包含了更多关于泛型DAO的具体实现和示例,供学习和参考。
这个压缩包文件的标题"SSH 泛型DAO分页"表明它提供了一个实现SSH框架整合的示例,特别关注了泛型DAO(Data Access Object)以及分页功能。下面将详细介绍SSH框架及其分页和泛型DAO的概念。 1. **Struts2**: Struts2...
3、此底层包含泛型DAO、Proxool连接池、国际化语言、DateUtil工具、ExcelUtil报表工具、自定义封装的弹框、批量删除、分页、上传等。 4、包含常用的工具:jquery、easy-ui、日期控件、highcharts图表控件、图片放大...
- `使用AOP实现类型安全的泛型DAO.doc`:可能阐述了如何利用Spring AOP来增强泛型DAO,确保类型安全。 这些文档应该涵盖了从泛型DAO的基本概念到Spring和Hibernate的整合,再到类型安全的实现,全面讲解了DAO模式在...
泛型DAO(Data Access Object)是一种设计模式,用于抽象数据访问层的操作,提供通用的CRUD(Create, Read, Update, Delete)方法。通过泛型,DAO可以适用于多种类型的实体,降低了代码重复。例如,一个BaseDAO接口...
这种非泛型的DAO实现方式可能会牺牲一些灵活性,但它简化了代码结构,降低了学习和使用的门槛,尤其适合小规模项目或者对性能要求不高的场景。然而,在大型项目中,由于缺乏泛型带来的类型安全性,可能会导致更多的...
- `DAO(1).rar`可能包含使用泛型的DAO设计模式示例,展示了如何创建泛型DAO以处理不同类型的数据对象。 综上所述,SSH框架结合泛型能够提升Java应用的开发效率和代码质量。通过学习和理解这些示例,开发者可以更好...
描述中提到的“剥离出来的泛型Hibernate”可能是指从一个大型项目中抽取出来的一个独立组件,这个组件专注于泛型DAO的实现,以便在其他项目中复用。博文链接指向的ITEYE博客文章可能详细解释了如何实现这样的泛型DAO...
本文将详细探讨一款基于Spring、iBatis和Struts2框架的学校图书管理系统,它不仅包含了所有必要的jar包和数据库文件,还提供了泛型DAO接口定义,以供开发者参考和使用。 首先,Spring框架作为系统的核心,负责管理...
在这个练习中,我们学习了如何使用File类来进行文件和目录的操作,以及如何使用Scanner类来从键盘输入接收数据。 这篇文章涵盖了泛型和File字节流练习两个知识点,帮助读者更好地理解和掌握Java语言的基础知识。
在模拟DBUtils中使用泛型,我们可以创建一个通用的DAO(数据访问对象)接口或基类,定义方法参数为泛型类型,这样在操作数据库时,可以根据实际需要的数据类型自动匹配,减少运行时错误。 例如,可以创建一个名为`...
Java让泛型实例化的方法 Java是一种静态类型语言,它可以在编译时检查类型的正确性,以...我们了解了泛型擦除机制的原理,并学习了使用反射机制实例化泛型对象的方法。这些知识点对于 Java 开发者来说都是非常重要的。
项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松copy复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全栈开发),有任何使用问题欢迎随时与我联系,我会及时为您解惑,...
4. 泛型的应用:可能使用Java泛型来提高DAO和Service的复用性,使得一个DAO或Service类可以处理多种类型的实体。 5. 测试与调试:可能涉及到如何通过JUnit测试DAO和Service的功能,确保其正确性。 6. 示例代码:...
6. 泛型支持:现代的DAO实现通常会使用泛型来提高代码的类型安全性和可读性,例如`List<T>`,其中T代表实体类。 7. 查询结果封装:为了方便使用,DAO可能会提供将`ResultSet`转换为Java对象的方法,例如`List<User>...
在Hibernate DAO中,可以使用泛型定义DAO接口和实现类,确保操作的数据类型匹配。 - **变量注解(Annotations)**:Java 5引入了注解,可以用于元数据标记,如Hibernate的@Entity、@Table等,简化配置并减少出错的...
**Java DAO模式实现详解** ...通过学习和理解DAO模式以及相关组件的使用,开发者可以更好地组织数据库操作代码,提升程序的可读性和可维护性。同时,熟悉JDBC和事务管理对于任何Java开发者来说都是必要的技能。
`ICommonDAO`接口使用了泛型 `,ID extends Serializable>`,其中`T`代表DAO操作的对象类型,`ID`是对象的主键类型,需要继承自Serializable接口,这是Hibernate操作对象时常见的做法。例如: ```java public ...