`

SSH整合:使用DAO框架(BaseDao),DAO不写或少写,我们更加专注业务

    博客分类:
  • SSH
阅读更多

这里我们新建一个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();
	}
}

 

 

分享到:
评论
3 楼 meigesir 2015-10-04  
hy110912 写道
不知道你从哪里抄来的 还是怎么样  报错都不知道  还令人兴奋

都是我亲自写的,做开发这一行,编译通不过很正常,要看原因,有可能环境不太对,有可能API更新啦,请自查,谢谢
2 楼 hy110912 2015-08-08  
不知道你从哪里抄来的 还是怎么样  报错都不知道  还令人兴奋
1 楼 goudezong 2013-05-03  
Caused by: java.lang.ClassCastException: java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType
at cn.hhit.attend.dao.BaseDAO.<init>(BaseDAO.java:25)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:147)
... 15 more

相关推荐

    一个简单的ssh整合的实例

    在这个简单的SSH整合实例中,我们将使用数据库SQL Server作为数据存储,而开发工具选择的是NetBeans。 首先,Spring框架是核心的依赖注入(DI)和面向切面编程(AOP)容器,它提供了管理应用对象和处理事务的能力。...

    ssh+baseDao实现分页

    在IT行业中,SSH(Spring、Struts、Hibernate)是一个经典的Java Web开发框架组合,而BaseDao是常用于数据访问层的一个基类设计。本话题主要围绕如何利用SSH框架结合BaseDao实现分页功能来展开。 首先,让我们了解...

    SSH集成查询分页处理BaseDao

    在IT行业中,SSH(Struts2、...通过这样的设计,开发者可以在不重复编写相同分页代码的情况下,快速实现分页功能,并且由于SSH框架的集成,使得数据访问和业务逻辑的分离更加清晰,提高了代码的可维护性和扩展性。

    SSH 泛型DAO分页

    这个压缩包文件的标题"SSH 泛型DAO分页"表明它提供了一个实现SSH框架整合的示例,特别关注了泛型DAO(Data Access Object)以及分页功能。下面将详细介绍SSH框架及其分页和泛型DAO的概念。 1. **Struts2**: Struts2...

    java ssh通用DAO另类实现示例

    同时,通过动态代理,我们可以在不修改原有业务代码的情况下,方便地添加如事务管理、日志记录等功能。 总结:这个另类的Java SSH通用DAO实现利用了动态代理和Hibernate的特性,降低了代码复杂度,提高了代码复用性...

    ssh整合下的通用泛型DAO+分页

    在SSH框架中,我们可以创建一个基础的泛型DAO接口,如`BaseDao&lt;T&gt;`,其中`T`代表任何实体类。这个接口通常包含基本的CRUD(创建、读取、更新、删除)操作,如`save()`, `get()`, `update()`, 和 `delete()`。然后,...

    Myeclipse-ssh整合

    【MyEclipse整合SSH详解】 SSH(Struts + Spring + Hibernate)是Java Web开发中常见的三大框架集成,用于构建高效、可维护性高的企业级应用。MyEclipse作为一款强大的集成开发环境,提供了便捷的SSH整合支持。以下...

    ssh整合详细步骤

    SSH整合是Java开发中常见的企业级应用框架组合,由Spring、Struts和Hibernate三大框架构成。这个过程旨在简化开发流程,提高代码复用性,并实现松耦合。下面将详细阐述SSH整合的每一步骤: **第一步:创建数据库...

    ssh通用基于泛型的dao

    标题“ssh通用基于泛型的dao”指的是使用SSH(Spring、Struts2、Hibernate)框架开发的一个通用的、基于泛型的DAO实现,它旨在提高开发效率,减少重复工作。 SSH框架是Java企业级应用开发的常用组合,Spring提供了...

    SSH整合文档(带实例)

    SSH整合是指将Struts、Spring和Hibernate这三大Java开源框架集成在一起,用于构建高效、松耦合的企业级Web应用程序。这三个框架分别承担不同的职责:Struts作为MVC(Model-View-Controller)模式的实现,负责处理...

    ssh框架整合step by step (springMVC + spring 5.0.4 + hibernate 5.0.12)

    好久不弄web了, 周末心血来潮, 使用较新spirng/hibernate搭建一个ssh框架, 供有需要的同学参考/学习/使用. 使用eclipse开发, 搭建,分三步: ①(在一个dynamic web工程上)整合springMVC; ② 整合spring; ③ 整合...

    基于注解ssh的通用dao的crud

    在IT行业中,SSH(Spring、Struts2、Hibernate)是一个非常经典的Java Web开发框架组合,它们各自负责应用程序的不同层面:Spring作为应用上下文和依赖注入框架,Struts2作为MVC(模型-视图-控制器)框架处理请求,...

    SSH整合文档

    SSH整合是指将Struts2、Spring和Hibernate三个流行的Java开源框架进行集成,以构建高效、稳定、可维护的企业级Web应用程序。这三个框架分别扮演不同的角色:Struts2负责MVC模式中的视图和控制,Spring提供了依赖注入...

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

    本资源“Hibernate_通用DAO模式”提供了一种适用于不同类型表单的DAO实现,基于SSH(Struts2、Spring、Hibernate)框架,特别强调简洁、易懂和高可移植性。 首先,SSH框架是Java Web开发中的经典组合,Struts2负责...

    J2EE中三大框架的整合

    在这个类中,我们声明了一个`BaseDao`类型的成员变量`base`,并使用setter方法注入`BaseDao`实例。在`execute`方法中,Action会调用DAO的方法来处理请求。 在Struts的配置文件`struts-config.xml`中,我们配置了一...

    一个SSH搭建的经典框架structs hibernate spring

    下面我们将深入探讨SSH框架中的各个组件以及它们在项目中的作用。 1. Struts2:作为MVC框架,Struts2负责处理HTTP请求,调度控制器并管理视图的展示。它通过Action类来处理业务逻辑,并使用配置文件(struts.xml)...

    SSH2全注解整合(spring2.5+hibernate3.3+struts2.1+泛型DAO+proxool连接池)

    SSH2全注解整合是Java Web开发中一种高效且现代化的方法,它将Spring 2.5、Struts 2.1和Hibernate 3.3这三个流行框架的优势结合起来,以简化开发流程并提高代码的可维护性。在这个项目中,开发者通过使用注解,避免...

    jsp论坛管理系统+sqlserver

    系统架构是现在主流的SSH架构模式,使用了Spring的Ioc来实现组件之间的依赖关系注入,使用Spring的AOP编程实现权限控制、日志服务等与业务无关的系统服务,以及Struts的action、form、Jsp页面的结构架构的整合如下:...

    商品管理 ssh struts2

    【SSH框架整合应用】 在Java Web开发领域,SSH(Struts2、Spring、Hibernate)是一个常用的三大框架集成,用于构建高效、可维护性高的企业级应用程序。本项目以"商品管理"为应用场景,展示了SSH框架如何协同工作,...

    ssh整合总结资料(struts,spring,hibernate)

    SSH框架是指将Struts、Spring和Hibernate三个开源框架进行整合的一种应用模式。本文档主要介绍如何在Struts 1.2、Hibernate 3.2以及Spring 2.5版本下实现这三个框架的有效整合。 **1. Spring配置** - 首先需要导入...

Global site tag (gtag.js) - Google Analytics