一:

package com.wzs.test2.dao;

import java.util.List;

public interface CommonDAO {
public <T> void sava(T entity); // 保存用户,无返回值; public <T> void remove(T entity); // 删除用户 public <T> void update(T entity); // 更新用户 public <T> T findById(Class<T> entityClass, Integer id); // 通过id来查找某一个用户; public <T> List<T> findAll(Class<T> entityclass); // 使用范型List<>。查询全部的用户信息 }
package com.wzs.test2.dao.impl;

import java.util.List;

import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import com.wzs.test2.dao.CommonDAO;

public class CommonDAOImpl extends HibernateDaoSupport implements CommonDAO {
@SuppressWarnings("unchecked")
public <T> List<T> findAll(Class<T> entityclass) {
String hql = "from " + entityclass.getName() + " as a order by a.id desc";
return this.getHibernateTemplate().find(hql);
} @SuppressWarnings("unchecked")
public <T> T findById(Class<T> entityClass, Integer id) {
return (T) this.getHibernateTemplate().get(entityClass, id);
} public <T> void remove(T entity) {
this.getHibernateTemplate().delete(entity);
} public <T> void sava(T entity) {
this.getHibernateTemplate().save(entity);
} public <T> void update(T entity) {
this.getHibernateTemplate().update(entity);
} }

二:

package com.wzs.test.dao;

import java.io.Serializable;
import java.util.Collection; public interface BaseDao<T> {
public void saveEntity(T t); public Collection<T> get(); public void updateEntity(T t); public void deleteEntity(Serializable id); public T getEntityById(Serializable id); }
package com.wzs.test.dao.impl;

import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.util.Collection; import org.springframework.orm.hibernate3.HibernateTemplate; import com.wzs.test.dao.BaseDao; public class BaseDaoImpl<T> implements BaseDao<T> { private HibernateTemplate hibernateTemplate; private Class classt; public BaseDaoImpl() {
// ParameterizedType就是泛型,关键部分
ParameterizedType type = (ParameterizedType) this.getClass().getGenericSuperclass();
this.classt = (Class) type.getActualTypeArguments()[0];// <T>
System.out.println(type.getRawType());
} public void deleteEntity(Serializable id) {
T t = this.getEntityById(id);
hibernateTemplate.delete(t); } public Collection<T> get() {
System.out.println(classt.getSimpleName());
return this.hibernateTemplate.find("from " + classt.getSimpleName());
} public T getEntityById(Serializable id) {
return (T) this.hibernateTemplate.get(classt, id);
} public void saveEntity(T t) {
this.hibernateTemplate.save(t); } public void updateEntity(T t) {
this.hibernateTemplate.update(t);
} // set&&get
public HibernateTemplate getHibernateTemplate() {
return hibernateTemplate;
} public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
this.hibernateTemplate = hibernateTemplate;
} }
package com.wzs.test.dao;

public interface StudentDao<Student> extends BaseDao<Student> {

}
package com.wzs.test.dao.impl;

import org.springframework.stereotype.Component;

import com.wzs.test.dao.StudentDao;
import com.wzs.test.dao.bean.Student; @Component
public class StudentDaoImpl extends BaseDaoImpl<Student> implements StudentDao<Student> { }
package com.wzs.test.dao.bean;

public class Student {

}

參考:

http://www.cnblogs.com/shenliang123/archive/2012/04/05/2433134.html

http://blog.csdn.net/qiaoge134/article/details/20228139

dao层的泛型实现(2种方法)的更多相关文章

  1. DAO层注入HibernateTemplate的两种方式

    -------------------------siwuxie095                                         DAO 层注入 HibernateTemplat ...

  2. Dao层封装泛型实现(spring mvc,springjdbctemplate)

    代码片段(6) [全屏查看所有代码] 1. [代码]BaseDao     跳至 [1] [2] [3] [4] [全屏预览] ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 1 ...

  3. 【service调用dao层传参的三种方式】

    第一种方案:默认数组角标: service Public User selectUser(String name,String area); mapper: <select id="s ...

  4. (转)MyBatis框架的学习(三)——Dao层开发方法

    http://blog.csdn.net/yerenyuan_pku/article/details/71700957 使用MyBatis开发Dao层,通常有两个方法,即原始Dao开发方法和Mappe ...

  5. 我的 MyBatis 实现的 Dao 层

    学了 Mybatis 之后,发现用 Mybatis 写 Dao层实在是简便多了,主要是在表的映射这块简单了很多.下面是我实现的使用 Mybatis 实现的简单的操作用户表的 Dao 层. 使用 Myb ...

  6. SSH框架整合中Hibernate实现Dao层常用结构

    一.疑惑 一直以来,我在使用SSH框架的时候经常会发现后者有疑虑到底使用hibernate的那种方法或者如何配置hibernate来操作数据库,经过 一段时间的学习下面我来总结一下,常用的dao层配置 ...

  7. 关于dao层的封装和前端分页的结合(文章有点长,耐心点哦)

    任何一个封装讲究的是,实用,多状态.Action:     任何一个Action继承分页有关参数类PageManage,自然考虑的到分页效果,我们必须定义下几个分页的参数.并根据这个参数进行查值. 然 ...

  8. 带分页功能的SSH整合,DAO层经典封装

    任何一个封装讲究的是,使用,多状态.Action:     任何一个Action继承分页有关参数类PageManage,自然考虑的到分页效果,我们必须定义下几个分页的参数.并根据这个参数进行查值. 然 ...

  9. CSS读书笔记(3)---清除浮动的几种方法

    浮动元素容易造成页面错位现象.下面说说关于清除浮动的几种方法. 首先.先创建一个浮动导致错位的页面. <!DOCTYPE html> <html lang="en" ...

随机推荐

  1. day6作业--游戏人生

    本节作业: 熟练使用类和模块,写一个交互性强.有冲突的程序. 思路: 1.各个模块之间的调用关系,如何使用类,各种方法的使用上面: 2.学了类,以为能用来解决所有问题,东西都要写在类里面: 3.下面自 ...

  2. 全文搜索引擎 Elasticsearch (二) 使用场景

    1.场景—:使用Elasticsearch作为主要的后端 传统项目中,搜索引擎是部署在成熟的数据存储的顶部,以提供快速且相关的搜索能力.这是因为早期的搜索引擎不能提供耐用的​​存储或其他经常需要的功能 ...

  3. ecshop用户中心菜单选项显示内容标签

    ecshop用户中心菜单选项有了,那肯定需要给相应的菜单选项添加内容,下面我们主要来讲下调用内容的标签,你也可以先访问一下用户中心菜单选项修改. 用户中心页面的内容分布在两个模板文件中:user_cl ...

  4. think组合查询AND和OR一起用

    如下示例: $_where 和 $where组合查询 $_where之间用OR $where之间用AND 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ...

  5. 如何快速取消svn的关联

    我们很多文件和文件项目都是通过svn从服务器上下载的,但是有些时候,出于某些目的,我们不想让这个文件继续和svn服务器进行关联,我们就需要解除这个关联,我观察了网上的相关方法,居然还有忽悠我们用reg ...

  6. Jquery的方法(二)

    一.文档操作1.html()和text()的区别 <div id="J_div"><b><i>我是谁</i></b>&l ...

  7. 1023 Have Fun with Numbers (20)(20 point(s))

    problem Notice that the number 123456789 is a 9-digit number consisting exactly the numbers from 1 t ...

  8. 1013 Battle Over Cities (25)(25 point(s))

    problem It is vitally important to have all the cities connected by highways in a war. If a city is ...

  9. 特征向量、特征值以及降维方法(PCA、SVD、LDA)

    一.特征向量/特征值 Av = λv 如果把矩阵看作是一个运动,运动的方向叫做特征向量,运动的速度叫做特征值.对于上式,v为A矩阵的特征向量,λ为A矩阵的特征值. 假设:v不是A的速度(方向) 结果如 ...

  10. WSGI剖析

    在一个 HTTP 请求到达服务器时, 服务器接收并调用 web 应用程序解析请求, 产生响应数据并返回给服务器. 这里涉及了两个方面的东西: 服务器(server)和应用程序(application) ...