SSH框架中泛型DAO的理解

泛型DAO跟SSH框架是没有任何关系的,下面我就以SSH中的泛型DAO为例,说说自己对泛型DAO的理解。

首先你要知道这样的几个通俗易懂的概念:

                   1.通用DAO:IGenericDAO

                   2.通用DAO的实现: GenericDAOImpl

                   3.具体的DAO:IUserDAO

                   4.具体的DAO的实现:UserDAOImpl

这样说吧:通用DAO,是一个接口,定义了标准,它封装了对数据库的各方面操作,增删查改,一般还有分页,通过ID查找实体等一系列方法

                    通用DAOImpl,一般来说是一个,一个普通的类,实现了:1)HibernateDaoSupport,这样才能将DAO自动装载到配置sessionFactory中,这样才具有对象持久化的

                                                                                                                             功 能

                                                                                                                         2)IGenericDAO,实现通用接口中的所有方法,因为都是泛型,在方法中写逻辑实现,传入什么实体就实  

                                                                                                                                实现对应的功能。这个地方,它的参数还是泛型。

                   具体的实体接口IUserDAO:有很多人都有疑惑,这个接口要着干嘛,其实很简单,这个接口继承了通用DAO,并且可以加入任何你想加入的逻辑,比如登陆验证等业务

                                                                      逻辑。就像一个公司的各个部门的自己的方法的封装,当然,这个逻辑可以直接通过在具体的DAO中实现,但是编程的思想是面向接口

                                                                      的,也是制定标准的地方,所以写在接口中。这个地方传递的参数就是具体的参数了。

                   具体的DAO的实现UserDAOImpl类:它继承了通用DAO的实现:GenericDAOImpl,同时实现了具体自己DAO的接口。因为它通过泛型参数传递,那么它传递的是什

                                                                                    么参数,他就是这个参数的实现,也就是说,它实际上是IUserDAO的具体实现,也继承了普通IGenericDAO的所有关于对数据

                                                                                     的操作。其实这个时候通过


现在我们对比上面的看看具体的内容所述:


package cn.hglq4.eshop.dao;

import java.io.Serializable;
import java.util.List;

public interface IGenericDAO<T, ID extends Serializable> {

	public void save(T entity);

	public void delete(T entity);

	public void deleteById(Class<T> entityClass, ID id);

	public void update(T entity);

	public T findById(Class<T> entityClass, ID id);

	public List<T> findAll(Class<T> entityClass);

	public List<Object> find(String hql, Object... values);
	
	public int getTotalRows();  

	public int getPageSize(int size);  
	
	public List<T> findByPage(final int pageNo, final int size);  

}




package cn.hglq4.eshop.dao.impl;

import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.util.List;

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

import cn.hglq4.eshop.dao.IGenericDAO;


public class GenericDAOImpl<T, ID extends Serializable> extends HibernateDaoSupport implements
		IGenericDAO<T, ID> {
	private Class<T> clazz;
	 
	
	public GenericDAOImpl(){
		  clazz=(Class<T>)((ParameterizedType)getClass().getGenericSuperclass()).getActualTypeArguments()[0];
	  
	}

	@Override
	public void save(T entity) {
		getHibernateTemplate().save(entity);

	}

	@Override
	public void delete(T entity) {


	}

	@Override
	public void deleteById(Class<T> entityClass, ID id) {


	}

	@Override
	public void update(T entity) {


	}

	@Override
	public T findById(Class<T> entityClass, ID id) {
		
		return null;
	}

	@Override
	public List<T> findAll(Class<T> entityClass) {

		return null;
	}

	@Override
	public List<Object> find(String hql, Object... values) {

		return null;
	}

	@Override
	public int getTotalRows() {

		return 0;
	}

	@Override
	public int getPageSize(int size) {

		return 0;
	}

	@Override
	public List<T> findByPage(int pageNo, int size) {

		return null;
	}

}




package cn.hglq4.eshop.dao.user;

import cn.hglq4.eshop.dao.IGenericDAO;
import cn.hglq4.eshop.entity.user.Users;


public interface IUserDAO extends IGenericDAO<Users,Integer> {
	public Users login(String account,String pwd);

}



package cn.hglq4.eshop.dao.impl.user;

import java.util.List;

import org.springframework.stereotype.Repository;

import cn.hglq4.eshop.dao.impl.GenericDAOImpl;
import cn.hglq4.eshop.dao.user.IUserDAO;
import cn.hglq4.eshop.entity.user.Users;

@Repository
public class UserDAOImpl extends GenericDAOImpl<Users,Integer> implements IUserDAO {
	@Override
	public Users login(String account, String pwd) {
		List<Users> list=getHibernateTemplate().find("from Users where account=? and pwd=?", new Object[]{account,pwd});
		if(list!=null&&list.size()==1){
			return list.get(0);
		}else{
		    return null;
		}
	}
}




 

                                                                                     


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值