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" ...
随机推荐
- C语言:输入10个整数,找出其中绝对值最小的数
1 输入10个整数,找出其中绝对值最小的数(10分) 题目描述 输入10个整数,找出其中绝对值最小的数 输入 十个整数 输出 绝对值最小的数 样例输入 -10 -2 30 40 50 60 70 80 ...
- 【LOJ】 #2305. 「NOI2017」游戏
题解 枚举x所在的地图的颜色,然后2-SAT建边 如果v所在的地图刚好是不能选的,那么u这边只能选另一种颜色 否则就是u的颜色到v的颜色 v的另一种颜色到u的另一种颜色 代码 #include < ...
- jsp页面中注释 <!-- --> 和<%-- --%> 的区别
jsp页面中注释 <!-- --> 和<%-- --%> 的区别 原创 2016年09月01日 17:55:44 标签: jsp注释 5605 今天发现一个问题:在jsp代码中 ...
- thinkphp3.2中开启静态缓存后对404页面的处理方法
静态缓存很实用但是有时有些不需要静态缓存,如404页面,第一次访问返回404页面并缓存,第二次换回的状态就是200,属于正常访问,虽然人眼可以看出是404页面,但是搜索引擎不会的,而是把这个页面当成正 ...
- 2017 Bangladesh National High School Programming Contest ( National Round, Senior Group ), NHSPC 2017 题解
[题目链接] A. Charm Is Not Always Enough 模拟一下就可以了. #include <bits/stdc++.h> using namespace std; i ...
- gp数据库运维
最近需要将一份db2导出的历史数据入库gp集群,然后把每天的增量数据导出成txt文件和对应的log日志,再ftp传输给另外一台机器.其中陆续碰到一些坑,在此记录 历史文件数据清洗 列分隔符的选择 碰到 ...
- 常用的Jquery工具方法
一.根据后端动态字段,如何把驻点输出在页面上?1.可以提前写好css,设置li的宽度,在页面中通过模板引擎语法动态加载不同的className.2.可以根据驻点个数和位置,用jquery去动态计算赋值 ...
- 【BZOJ 3456】城市规划
http://www.lydsy.com/JudgeOnline/problem.php?id=3456 设\(f(n)\)表示n个点有标号无向连通图的数目. dp:\(f(n)=2^{n\choos ...
- 【BZOJ】4720: [Noip2016]换教室
4720: [Noip2016]换教室 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 1690 Solved: 979[Submit][Status ...
- Python168的学习笔记8
#coding:utf8 #斐波那契数列,第三项起,每一项都等于前两项之和 def memo(func): cache = {}#闭包 def wrap(*args): if args not in ...