这里我们新建一个BaseDao,让普通Dao(如:UserDao)继承它,这样普通Dao什么都不写就可以自动实现基本的增删改查操作,也可以在UserDao中扩建方法...
BaseDao.java:
package com.kaishengit.dao;
import java.io.Serializable;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import com.kaishengit.util.ReflectUtil;
public class BaseDao<T,PK extends Serializable> {
private SessionFactory sessionFactory;
//Class<?>:防止报黄线,意思是传入任意类型都行,无所谓,也可以使用Object
private Class<?> entityClass;
public BaseDao(){
//new出一个子类对象,父类中的this是子类中的this
entityClass = ReflectUtil.getGenericParameterType(this.getClass());
}
public void saveOrUpdate(T t){
getSession().saveOrUpdate(t);
}
public void del(PK pk){
getSession().delete(findById(pk));
}
public void del(T t){
getSession().delete(t);
}
@SuppressWarnings("unchecked")
public T findById(PK pk){
return (T) getSession().get(entityClass, pk);
}
@SuppressWarnings("unchecked")
public List<T> findAll(){
Criteria criteria = getSession().createCriteria(entityClass);
return criteria.list();
}
@SuppressWarnings("unchecked")
public List<T> findByPage(int start,int count){
Criteria criteria = getSession().createCriteria(entityClass);
criteria.setFirstResult(start);
criteria.setMaxResults(count);
return criteria.list();
}
//get
public Session getSession(){
return sessionFactory.getCurrentSession();
}
//set
@Autowired
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
}
这里面我用到自己写的一个工具类,通过反射实现返回的实际参数化类型T
package com.kaishengit.util;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
public class ReflectUtil {
public static Class<?> getGenericParameterType(Class<?> clazz){
//返回表示此Class所表示的实体(类、接口、基本类型或 void)的直接超类的Type。如果超类是参数化类型,则返回的Type对象必须准确反映源代码中所使用的实际类型参数。
Type type = clazz.getGenericSuperclass();
//强制转化为参数化类型:Collection<String>
ParameterizedType pt = (ParameterizedType) type;
//返回表示此类型的实际类型参数的 Type 对象的数组。
Type[] types = pt.getActualTypeArguments();
return (Class<?>) types[0];
}
}
这样就ok啦,我们新建一个UserDao继承它,这样UserDao就自动拥有了增删改查功能,是不是很令人兴奋呀,里面又扩建了一个方法
package com.kaishengit.dao;
import org.hibernate.Query;
import org.springframework.stereotype.Repository;
import com.kaishengit.pojo.User;
@Repository
public class UserDao extends BaseDao<User,Integer>{
public User findByNameAndPassword(User user){
String hql = "from User where username = ? and password = ?";
Query query = getSession().createQuery(hql);
query.setParameter(0, user.getUsername());
query.setParameter(1, user.getPassword());
return (User) query.uniqueResult();
}
}
分享到:
相关推荐
在这个简单的SSH整合实例中,我们将使用数据库SQL Server作为数据存储,而开发工具选择的是NetBeans。 首先,Spring框架是核心的依赖注入(DI)和面向切面编程(AOP)容器,它提供了管理应用对象和处理事务的能力。...
在IT行业中,SSH(Spring、Struts、Hibernate)是一个经典的Java Web开发框架组合,而BaseDao是常用于数据访问层的一个基类设计。本话题主要围绕如何利用SSH框架结合BaseDao实现分页功能来展开。 首先,让我们了解...
在IT行业中,SSH(Struts2、...通过这样的设计,开发者可以在不重复编写相同分页代码的情况下,快速实现分页功能,并且由于SSH框架的集成,使得数据访问和业务逻辑的分离更加清晰,提高了代码的可维护性和扩展性。
这个压缩包文件的标题"SSH 泛型DAO分页"表明它提供了一个实现SSH框架整合的示例,特别关注了泛型DAO(Data Access Object)以及分页功能。下面将详细介绍SSH框架及其分页和泛型DAO的概念。 1. **Struts2**: Struts2...
同时,通过动态代理,我们可以在不修改原有业务代码的情况下,方便地添加如事务管理、日志记录等功能。 总结:这个另类的Java SSH通用DAO实现利用了动态代理和Hibernate的特性,降低了代码复杂度,提高了代码复用性...
在SSH框架中,我们可以创建一个基础的泛型DAO接口,如`BaseDao<T>`,其中`T`代表任何实体类。这个接口通常包含基本的CRUD(创建、读取、更新、删除)操作,如`save()`, `get()`, `update()`, 和 `delete()`。然后,...
【MyEclipse整合SSH详解】 SSH(Struts + Spring + Hibernate)是Java Web开发中常见的三大框架集成,用于构建高效、可维护性高的企业级应用。MyEclipse作为一款强大的集成开发环境,提供了便捷的SSH整合支持。以下...
SSH整合是Java开发中常见的企业级应用框架组合,由Spring、Struts和Hibernate三大框架构成。这个过程旨在简化开发流程,提高代码复用性,并实现松耦合。下面将详细阐述SSH整合的每一步骤: **第一步:创建数据库...
标题“ssh通用基于泛型的dao”指的是使用SSH(Spring、Struts2、Hibernate)框架开发的一个通用的、基于泛型的DAO实现,它旨在提高开发效率,减少重复工作。 SSH框架是Java企业级应用开发的常用组合,Spring提供了...
SSH整合是指将Struts、Spring和Hibernate这三大Java开源框架集成在一起,用于构建高效、松耦合的企业级Web应用程序。这三个框架分别承担不同的职责:Struts作为MVC(Model-View-Controller)模式的实现,负责处理...
好久不弄web了, 周末心血来潮, 使用较新spirng/hibernate搭建一个ssh框架, 供有需要的同学参考/学习/使用. 使用eclipse开发, 搭建,分三步: ①(在一个dynamic web工程上)整合springMVC; ② 整合spring; ③ 整合...
在IT行业中,SSH(Spring、Struts2、Hibernate)是一个非常经典的Java Web开发框架组合,它们各自负责应用程序的不同层面:Spring作为应用上下文和依赖注入框架,Struts2作为MVC(模型-视图-控制器)框架处理请求,...
SSH整合是指将Struts2、Spring和Hibernate三个流行的Java开源框架进行集成,以构建高效、稳定、可维护的企业级Web应用程序。这三个框架分别扮演不同的角色:Struts2负责MVC模式中的视图和控制,Spring提供了依赖注入...
本资源“Hibernate_通用DAO模式”提供了一种适用于不同类型表单的DAO实现,基于SSH(Struts2、Spring、Hibernate)框架,特别强调简洁、易懂和高可移植性。 首先,SSH框架是Java Web开发中的经典组合,Struts2负责...
在这个类中,我们声明了一个`BaseDao`类型的成员变量`base`,并使用setter方法注入`BaseDao`实例。在`execute`方法中,Action会调用DAO的方法来处理请求。 在Struts的配置文件`struts-config.xml`中,我们配置了一...
下面我们将深入探讨SSH框架中的各个组件以及它们在项目中的作用。 1. Struts2:作为MVC框架,Struts2负责处理HTTP请求,调度控制器并管理视图的展示。它通过Action类来处理业务逻辑,并使用配置文件(struts.xml)...
SSH2全注解整合是Java Web开发中一种高效且现代化的方法,它将Spring 2.5、Struts 2.1和Hibernate 3.3这三个流行框架的优势结合起来,以简化开发流程并提高代码的可维护性。在这个项目中,开发者通过使用注解,避免...
系统架构是现在主流的SSH架构模式,使用了Spring的Ioc来实现组件之间的依赖关系注入,使用Spring的AOP编程实现权限控制、日志服务等与业务无关的系统服务,以及Struts的action、form、Jsp页面的结构架构的整合如下:...
【SSH框架整合应用】 在Java Web开发领域,SSH(Struts2、Spring、Hibernate)是一个常用的三大框架集成,用于构建高效、可维护性高的企业级应用程序。本项目以"商品管理"为应用场景,展示了SSH框架如何协同工作,...
SSH框架是指将Struts、Spring和Hibernate三个开源框架进行整合的一种应用模式。本文档主要介绍如何在Struts 1.2、Hibernate 3.2以及Spring 2.5版本下实现这三个框架的有效整合。 **1. Spring配置** - 首先需要导入...