关闭

基于hibernate的BaseDao及其实现类的设计

标签: BaseDao
544人阅读 评论(0) 收藏 举报
分类:
以前做设计的时候dao接口和它的实现了,这样子就不必写这么多的重复代码了。但由于对反射没有了解,除非依赖hibernate的其他组件,否则写不出来。不过,有了反射,我们可以通过泛型来实现我们想要做的功能了。

         首先是接口:

package com.sms.dao.base;

import java.util.List;

public interface BaseDao<T> {
	
	public void add(T entity) throws Exception;

	public void delete(T entity) throws Exception;

	public void update(T entity) throws Exception;

	public T findById(Integer id) throws Exception;
	/*
	 * 得到从startIndex开始大小为pageSize的列表
	 */
	public List<T> getPageList(int startIndex , int pageSize) throws Exception;	
	/*
	 * 得到总数
	 */
	public long getAmount();
}

然后是实现类:

package com.sms.dao.base.impl;

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

import javax.annotation.Resource;

import org.hibernate.Session;
import org.hibernate.SessionFactory;

import com.sms.dao.base.BaseDao;


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

	private Class<T> entityClass;
	private String hql;
	@Resource
	private SessionFactory sessionFactory;
	
	
	public Session getSession(){
		return sessionFactory.getCurrentSession();
	}
	
	
	@SuppressWarnings("unchecked")
	public BaseDaoImpl() {
		//通过反射获取泛型传过来的类的类对象
		this.entityClass = (Class<T>) ((ParameterizedType) this.getClass()
				.getGenericSuperclass()).getActualTypeArguments()[0];
		this.hql = "from " + this.entityClass.getName();
	}
	
	@Override
	public void add(Object entity) {
		this.getSession().save(entity);
	}

	@Override
	public void delete(Object entity) {
		this.getSession().delete(entity);
	}

	@Override
	public void update(Object entity) {
		this.getSession().update(entity);
	}
	
	@Override
	public T findById(Integer id) {
		@SuppressWarnings("unchecked")
		T result = (T) this.getSession().get(entityClass,id);
		return result;
	}


	@Override
	public List<T> getPageList(int startIndex, int pageSize) {
		// TODO Auto-generated method stub
		@SuppressWarnings("unchecked")
		List<T> list = this.getSession().createQuery(hql).setFirstResult(startIndex).setMaxResults(pageSize).list();
		System.out.println(hql);
		return list;
	}


	@Override
	public long getAmount() {
		String sql = "select count(*) from "+ this.entityClass.getName();
		long count =  (Long) this.getSession().createQuery(sql).uniqueResult() ;
		return count;
	}
	
}

通用接口完成,我们使用的时候,只要继承BaseDaoImp就可以实现最基本的增删改查了。


例如学生管理系统中的年级:

接口是:

package com.sms.dao;

import com.sms.dao.base.BaseDao;
import com.sms.entity.GradeEntity;

public interface GradeDao extends BaseDao<GradeEntity>{
	
}

实现类:

package com.sms.dao.impl;

import org.springframework.stereotype.Component;

import com.sms.dao.GradeDao;
import com.sms.dao.base.impl.BaseDaoImpl;
import com.sms.entity.GradeEntity;
@Component
public class GradeDaoImpl extends BaseDaoImpl<GradeEntity> implements GradeDao{
    
}

这样子,GradeDaoImpl就可以实现最基础的增删改查的功能了。


转载地址:http://blog.csdn.net/kklt21cn/article/details/42040597


0
1
查看评论

基于hibernate的BaseDao及其实现类的设计

以前做设计的时候dao接口和它的实现了,这样子就不必写这么多的重复代码了。但由于对反射没有了解,除非依赖hibernate的其他组件,否则写不出来。不过,有了反射,我们可以通过泛型来实现我们想要做的功能了。          首先是接口: pac...
  • kklt21cn
  • kklt21cn
  • 2014-12-20 09:38
  • 4275

Hibernate实现BaseDao

设计思路BaseDao为各个实体Dao类的接口,定义了各个增删改查方法。 BaseDaoImpl实现BaseDao,子类可继承该类,获取dao层的基本方法。 UserDao为一个具体的实体的dao接口,该接口继承BaseDao,并可以再继续写入新的 方法。 UserDaoImpl为UserDa...
  • Keeping111
  • Keeping111
  • 2017-01-02 10:12
  • 2326

BaseDao --- dao层的抽取

BaseDao的抽取,优化项目代码。
  • kyle0349
  • kyle0349
  • 2016-07-15 08:52
  • 1934

基于hibernate的BaseDAO接口

BaseDao.java import java.io.Serializable; import java.util.Collection; import java.util.List; import java.util.Map; import com.xxx.finance.utils.Hibe...
  • hjxgood
  • hjxgood
  • 2015-04-21 14:59
  • 16061

java通用分页(SSH2框架下)和基于Hibernate的BaseDao接口

一、分页部分 1、DAO层接口的设计,在MemberDao接口中定义了如下两个方法: public interface MemberDao{      //省略了其他的代码      /** *//**    * 分页查询    * @param hql 查询的条件  ...
  • fengwei_mm
  • fengwei_mm
  • 2014-03-07 22:40
  • 1672

Hibernate简易BaseDao演示单例模式和线程池

package com.dao;import java.util.List;import org.hibernate.HibernateException;import org.hibernate.Session;import org.hibernate.SessionFactory;import ...
  • xiangaichou
  • xiangaichou
  • 2014-02-28 17:05
  • 956

基于hibernate4的BaseDao接口

基于hibernate4的BaseDao接口
  • phil_jing
  • phil_jing
  • 2016-12-28 23:07
  • 1569

Hibernate DAO层 的BaseDao泛型写法

package com.app.base; import java.lang.reflect.ParameterizedType; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.Resu...
  • qq_24505127
  • qq_24505127
  • 2016-09-11 17:12
  • 1547

mybatis-basedao的实现

package com.yangwei.shop.dao; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.ibatis.session.SqlSession; i...
  • u011484382
  • u011484382
  • 2014-01-16 13:11
  • 956

BaseDao设计

BaseDao接口设计 package cn.wht.test.dao; import java.util.List; /** * Dao接口,定义Dao基本操作 由BaseDaoImpl实现 * @author wht * @param 实际操作的泛型类型 */ public ...
  • u012092620
  • u012092620
  • 2015-01-31 14:01
  • 975
    个人资料
    • 访问:301875次
    • 积分:4900
    • 等级:
    • 排名:第6930名
    • 原创:170篇
    • 转载:253篇
    • 译文:5篇
    • 评论:30条
    最新评论