dao层的泛型实现(2种方法)
一:
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种方法)的更多相关文章
- DAO层注入HibernateTemplate的两种方式
-------------------------siwuxie095 DAO 层注入 HibernateTemplat ...
- 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 ...
- 【service调用dao层传参的三种方式】
第一种方案:默认数组角标: service Public User selectUser(String name,String area); mapper: <select id="s ...
- (转)MyBatis框架的学习(三)——Dao层开发方法
http://blog.csdn.net/yerenyuan_pku/article/details/71700957 使用MyBatis开发Dao层,通常有两个方法,即原始Dao开发方法和Mappe ...
- 我的 MyBatis 实现的 Dao 层
学了 Mybatis 之后,发现用 Mybatis 写 Dao层实在是简便多了,主要是在表的映射这块简单了很多.下面是我实现的使用 Mybatis 实现的简单的操作用户表的 Dao 层. 使用 Myb ...
- SSH框架整合中Hibernate实现Dao层常用结构
一.疑惑 一直以来,我在使用SSH框架的时候经常会发现后者有疑虑到底使用hibernate的那种方法或者如何配置hibernate来操作数据库,经过 一段时间的学习下面我来总结一下,常用的dao层配置 ...
- 关于dao层的封装和前端分页的结合(文章有点长,耐心点哦)
任何一个封装讲究的是,实用,多状态.Action: 任何一个Action继承分页有关参数类PageManage,自然考虑的到分页效果,我们必须定义下几个分页的参数.并根据这个参数进行查值. 然 ...
- 带分页功能的SSH整合,DAO层经典封装
任何一个封装讲究的是,使用,多状态.Action: 任何一个Action继承分页有关参数类PageManage,自然考虑的到分页效果,我们必须定义下几个分页的参数.并根据这个参数进行查值. 然 ...
- CSS读书笔记(3)---清除浮动的几种方法
浮动元素容易造成页面错位现象.下面说说关于清除浮动的几种方法. 首先.先创建一个浮动导致错位的页面. <!DOCTYPE html> <html lang="en" ...
随机推荐
- java8 - 5
import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; import java.util.Lis ...
- 【51nod】1851 俄罗斯方块
题解 最近一遇到神仙题一卡就好久--做点水题滋养一下自己吧= = 显然我们发现放一个方块的奇偶性不会改变,所以格子如果黑格子是奇数,那么就是No 我们发现每个2 × 3的方格里的2 × 1的黑格子都可 ...
- 【LOJ】 #2305. 「NOI2017」游戏
题解 枚举x所在的地图的颜色,然后2-SAT建边 如果v所在的地图刚好是不能选的,那么u这边只能选另一种颜色 否则就是u的颜色到v的颜色 v的另一种颜色到u的另一种颜色 代码 #include < ...
- LoadRunner11-遇到问题及解决办法(汇总)
LoadRunner11-遇到问题及解决办法 1.LoadRunner超时错误:在录制Web服务器端,如果超过120秒服务器协议脚本回放时超时情况经常出现,产生错误的原因也有很多,解决的方法也不同.错 ...
- TestNG入门到...
目录 一.概述 二.@Test注解常用参数 三.测试中常用的断言(assert) 四.TestNG常用注解及使用 五.配置文件xml常用标签 六.参数传递 七.测试报告 一.概述 1.TestNG是一 ...
- Git配置用户名密码
配置Git 在Linux下和windows下配置Git的方法差不多,只是在Linux下,可以在命令行里直接使用git config进行配置, 而在windows下则要先打开“Git Bash”,进入m ...
- 神经网络一(用tensorflow搭建简单的神经网络并可视化)
import tensorflow as tf import numpy as np import matplotlib.pyplot as plt #创建一个input数据,-1到1之间300个数, ...
- [CodeChef - STREETTA] The Street 李超线段树
大致题意: 给出两个序列A,B,A初始为负无穷,B初始为0,有三种操作 1.在A上区间[u,v]上加一个等差数列,取与原本A序列的最大值. 2.在B上区间[u,v]上加一个等差数列. 3.给出一个点X ...
- Initializing the FallBack certificate failed . TDSSNIClient initialization failed
安装SQL后服务不能启动,报错: 2014-03-24 14:33:10.06 spid13s Error: 17190, Severity: 16, State: 1.2014-03-24 ...
- nyoj zb的生日
zb的生日 时间限制:3000 ms | 内存限制:65535 KB 难度:2 描述 今天是阴历七月初五,acm队员zb的生日.zb正在和C小加.never在武汉集训.他想给这两位兄弟买点什么庆祝 ...