BaseDao的抽取

在ssh整合开发中,会创建多个不同的dao层对数据库里的数据进行crud操作,其实每个里面用到的方法几乎都一样,只是传递的参数类型不同.我们可以抽取出一个BaseDao类.由于开发中的高内聚低耦合的思想,所以定义为一个接口,再创建实现类继承即可.在接口上定义传递类型的泛型,通过反射技术及Class类中的方法获取.


package cn.itcast.util;

import java.lang.reflect.ParameterizedType;

import java.lang.reflect.Type;

import java.util.List;

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

public class BaseDaoImpl<T> extends HibernateDaoSupport implements BaseDao<T> {

//定义一个成员变量,以便后面的方法中使用

private Class clazz;

public BaseDaoImpl() {

//用Object类中的getClass()方法,获取当前运行类的class对象

Class c = this.getClass();

//得到当前运行类的父类的参数化类型

//Type getGenericSuperclass()

//返回表示此 Class 所表示的实体(类、接口、基本类型或 void)的直接超类的 Type。

Type type = c.getGenericSuperclass();

//ParameterizedType是Type的子类,将Type强转为ParameterizedType类型

ParameterizedType ptype = (ParameterizedType) type;

// Type[] getActualTypeArguments()

// 返回表示此类型实际类型参数的 Type 对象的数组。

Type[] t = ptype.getActualTypeArguments();

//获取实际类型参数

this.clazz = (Class) t[0];

System.out.println(clazz);//--->class cn.itcast.entity.CusVisit全类名

}

@Override

public void save(T t) {

//调用HibernateTemplate模本中的方法

this.getHibernateTemplate().save(t);

}

@Override

public void update(T t) {

this.getHibernateTemplate().update(t);

}

@Override

public void delete(T t) {

this.getHibernateTemplate().delete(t);

}

@Override

public T get(int id) {

T t = (T) this.getHibernateTemplate().get(clazz, id);

return t;

}

@Override

public List<T> list() {

// String getSimpleName()

//返回源代码中给出的底层类的简称

String hql = "from "+clazz.getSimpleName();//-->CusVisit (类名)

List<T> list = (List<T>) this.getHibernateTemplate().find(hql);

return list;

}

}

时间: 2024-10-15 13:25:10

BaseDao的抽取的相关文章

Java Web 开发中如何进行分页

*分页: ????摘要:所用框架为:Hibernate+Spring+Struts2,以分页显示后台用户列表为例 ????1.设计实体:页面类PageBean ????????1.1 分析: ????????????当前页:currentPage(请求数据) ????????????总记录数:recordCount(查数据库:count(*)) ????????????页面大小:pageSize(配置文件设置值) ????????????本页的数据列表:recordList(查询数据库:sele

Maven - 构建基于Maven的ssh分模块项目

一.数据库准备 1.创建数据库maven create database maven character set utf8 collate utf8_general_ci; //use maven; 2.创建用户表 create table t_users( id int primary key auto_increment, username varchar(30) not null, password varchar(50) not null, constraint unq_users_us

编程实践积累

1 编程经验实践,积累,总结,分享 2 3 4 博客地址:http://www.cnblogs.com/liaowanzhong/ 5 6 7 8 9 10 11 12 13 14 15 1. 大量群发邮件:购买Edm服务,大的互联网企业是和邮箱服务商签订协议(百度,腾讯,京东,阿里,csdn) 16 站内信 17 内网发短信:短信猫 18 19 2. Servlet Filter 生命周期 20 *Servlet:看配置文件中web.xml配置其启动的优先级别,即当load-on-startu

使用HibernateDaoSupport抽取BaseDao

在开发采用Struts2+Spring+hibernate这三大框架的项目时,我们需要一个抽取一个BaseDao.这个Dao里面CRUD都给封装好,后续的其他Dao直接用它的功能就可以.Spring里面有个HibernateDaoSupport的类,这个类需要给他一个SessionFactory.有了SessionFactory后,他就可以做各种操作:最强大的功能是它可以getHibernateTemplate来获取一个HibernateTemplate.有了HibernateTemplate,

Dao层抽取BaseDao

结构图 BaseDao.java import java.io.Serializable; import java.util.List; import org.hibernate.criterion.DetachedCriteria; public interface BaseDao<T> { //增 void save(T t); //删 void delete(T t); //删 void delete(Serializable id); //改 void update(T t); //查

Dao操作的抽取,BaseDao

Dao操作通用的步骤: 0. 写SQL语句 1. 获取连接 2. 创建stmt 3. 执行sql a) 更新 b) 查询 4. 关闭/异常 代码: BaseDao /** * 通用的dao,自己写的所有的dao都继承此类; * 此类定义了2个通用的方法: * 1. 更新 * 2. 查询 * @author Jie.Yuan * */ public class BaseDao { // 初始化参数 private Connection con; private PreparedStatement

JavaEE笔记——BaseDao的使用

在Hibernate框架中使用BaseDao主要的作用是减少冗余代码,在对Dao的操作中CRUD可以说是最普通最常见的操作了,基本上面对不同的数据表都会有类似的CRUD操作,BaseDao的思想就是把这些冗余的操作抽取出来,所以不需要在spring框架的applicationContext.xml中注册,这可能是与其他Dao不同之处.作为一个抽象出来的类,使用这个BaseDao可以使我们的代码更优雅 第一步:和普通Dao一样,先创建个接口 接口中实现的方法有add(添加),update(更新),

BOS项目 第2天(BaseDao、BaseAction、用户登录、自定义strust登录拦截器)

BOS项目 第2天 今天内容安排: 1.根据提供的pdm文件生成sql 2.持久层和表现层设计---BaseDao.BaseAction 3.实现用户登录功能 4.jQuery EasyUI 消息提示控件 5.jQuery EasyUI  menubutton菜单按钮 6.自定义struts2拦截器,实现用户未登录自动跳转到登录页面 7.基于ajax实现修改密码功能 1. 根据pdm生成sql脚本 2. 设计持久层和表现层 2.1 持久层设计(基于泛型+反射) 通用接口: /** * 抽取持久层

JAVAEE——SSH项目实战02:客户列表和BaseDao封装

作者: kent鹏 转载请注明出处: http://www.cnblogs.com/xieyupeng/p/7129152.html 该项目在SSH三大框架整合基础上进行开发:http://www.cnblogs.com/xieyupeng/p/7108141.html 一.客户列表 1.分析 2.书写步骤 (1)封装PageBean public class PageBean { //当前页数 private Integer currentPage; //总记录数 private Intege