`
xiang37
  • 浏览: 431656 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Hibernate简单的BaseDao

阅读更多

 

package com.xiva.hibernate.dao;

import java.io.Serializable;


public interface BaseDao<E extends Serializable, PK extends Serializable> {

	/**
	 * 插入一个对象
	 * @param person
	 */
	public void insert(E entity);
	
	/**
	 * 删除一个对象
	 * @param object
	 */
	public void delete(E entity);
	
	
	/**
	 * 根据主键,使用到Criteria接口查询
	 * @param id
	 * @return
	 */
	public E getByPK(PK id);
	
	/**
	 * 直接使用session的get方法
	 * @param id
	 * @return
	 */
	public E getById(PK id);
	
	/**
	 * 更新一个对象
	 * @param person
	 */
	public void update(E entity);
	
}

 

 接口实现类:

 

package com.xiva.hibernate.dao;

import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;

import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Restrictions;

import com.xiva.hibernate.HibernateUtil;

public  class BaseDaoImpl<E extends Serializable, PK extends Serializable> implements BaseDao<E, PK>  {
	
	
	private Class<?> entityClass;
	
	public BaseDaoImpl(){
		Class<?> c = this.getClass();  
        Type type = c.getGenericSuperclass();  
        if (type instanceof ParameterizedType) {  
            this.entityClass = (Class<?>) ((ParameterizedType) type)  
                    .getActualTypeArguments()[0];  
        }  
	}

	/**
	 * 插入数据库同样需要使用到事务
	 */
	public void insert(E entity) {
		Session session = null;
		Transaction tx = null;
		try{
			session = HibernateUtil.getSession();
			tx = session.beginTransaction();
			session.save(entity);
			tx.commit();
		}finally{
			if(session!=null){
				session.close();
			}
		}

	}

	/**
	 * 删除一个对象与查询不同必须使用事务提交
	 */
	public void delete(E entity) {
		Session session = null;
		Transaction tx = null;
		try{
			session = HibernateUtil.getSession();
			tx = session.beginTransaction();
			session.delete(entity);
			tx.commit();
		}finally{
			if(session!=null){
				session.close();
			}
		}
	}


	@SuppressWarnings("unchecked")
	public E getByPK(PK id) {
		Session session = null;
		E entity = null;
		try {
			session = HibernateUtil.getSession();
			Criteria criteria = session.createCriteria(this.entityClass);
			criteria.add(Restrictions.eq("id", id));
			// List<Person> list = criteria.list();
			// if(list.size()!=0)
			// person = list.get(0);
			entity = (E) criteria.uniqueResult();
//			if(person!=null)
//				System.out.println(person.getDepartment().getDepartmentName());
		} finally {
			if(session!=null){
				session.close();
			}
		}
		return entity;
	}


	public void update(E entity) {
		
		Session session = null;
		Transaction tx = null;
		try{
			session = HibernateUtil.getSession();
			tx = session.beginTransaction();
			session.update(entity);
			tx.commit();
		}finally{
			if(session!=null){
				session.close();
			}
		}

	}


	@SuppressWarnings("unchecked")
	public E getById(PK id) {
		Session session = null;
		E entity = null;
		try {
			session = HibernateUtil.getSession();
			entity = (E) session.get(this.entityClass, id);
//			Hibernate.initialize(person.getDepartment());
		} finally {
			if(session!=null){
				session.close();
			}
		}
		return entity;
	}
}

 

 

 

下面是调用方式:

 

 

package com.xiva.hibernate.dao;

import com.xiva.hibernate.domain.Person;

public interface PersonDao extends BaseDao<Person, Long>{

}
 

 

 

 

 

 

package com.xiva.hibernate.dao;

import com.xiva.hibernate.domain.Person;

public class PersonDaoImpl extends BaseDaoImpl<Person, Long> implements PersonDao {
	
}

 

 

 

实体类:

 

 

package com.xiva.hibernate.domain;

import java.io.Serializable;
import java.util.Date;

public class Person implements Serializable{
	
	
	/**
	 * 
	 */
	private static final long serialVersionUID = -6190737414531892695L;
	private Long id;
	private String name;
	private String password;
	private Date birthday;
	private Department department;
	private IdCard idCard;
	private Address address;
	

	public Person() {
	}

	public Person(Long id, String name, String password, Department department,
			IdCard idCard, Date birthday, Address address) {
		this.id = id;
		this.name = name;
		this.password = password;
		this.department = department;
		this.idCard = idCard;
		this.birthday = birthday;
		this.address = address;
	}

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public Department getDepartment() {
		return department;
	}

	public void setDepartment(Department department) {
		this.department = department;
	}

	public IdCard getIdCard() {
		return idCard;
	}

	public void setIdCard(IdCard idCard) {
		this.idCard = idCard;
	}

	public Date getBirthday() {
		return birthday;
	}

	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}

	public Address getAddress() {
		return address;
	}

	public void setAddress(Address address) {
		this.address = address;
	}
	
}

 

 

主要是需要实现Serializable接口。还有在实现类初始化的时候,需要知道是哪一个类,

 

 

public BaseDaoImpl(){
		Class<?> c = this.getClass();  
        Type type = c.getGenericSuperclass();  
        if (type instanceof ParameterizedType) {  
            this.entityClass = (Class<?>) ((ParameterizedType) type)  
                    .getActualTypeArguments()[0];  
        }  
	}

 

也许上面的方法是实现了基本的Dao,但是不可取,这个只是使用hibernate框架,我们的事务只能在Dao层进行控制,而一般的数据回滚,我们是在业务逻辑层来做的;因此可能结合Spring来实现这样的功能比较简单,以后贴出例子。

 

 

 

分享到:
评论

相关推荐

    基于hibernate的baseDao

    **基于Hibernate的BaseDAO** 在Java企业级开发中,数据访问层(DAO,Data Access Object)是连接业务逻辑层和数据库的重要桥梁。BaseDAO是一种通用的设计模式,它封装了Hibernate框架的基本操作,使得业务逻辑层...

    hibernate BASEDAO

    在Java的持久化框架Hibernate中,BaseDAO(Base Data Access Object)是一种常见的设计模式,用于封装数据库操作,提供一套标准的方法来实现CRUD(Create、Read、Update、Delete)操作。这种模式使得业务层可以更加...

    hibernate>>BaseDAO

    现在我们来深入探讨`hibernate`中的`BaseDAO`及其相关知识点。 首先,DAO设计模式是用来解耦业务逻辑层和数据存储层的关键工具。`BaseDAO`通常包含一些通用的数据库操作方法,如增删改查(CRUD),事务管理,以及...

    Hibernate底层数据库操作函数BaseDao+具体实例

    `BaseDao`是常见的一种设计模式,用于封装Hibernate的基本数据库操作,它为业务层提供了一种统一的接口,方便进行CRUD(创建、读取、更新、删除)操作。在这个主题中,我们将深入探讨`BaseDao`的设计与实现,以及...

    hibernate basedao(泛型版本)

    在Java的持久层框架Hibernate中,BaseDAO(基础数据访问对象)是常用的设计模式,用于封装对数据库的基本操作。在给定的“hibernate basedao(泛型版本)”中,开发人员通过引入泛型进一步提高了代码的复用性和灵活...

    hibernate basedao

    涵盖通过hibernate进行数据库操作的通用方法

    基于hibernate封装的BaseDao

    基于hibernate封装的BaseDao,有完整的增删改查,分页,执行hql sql 方法 约 20个方法,详情地址 https://blog.csdn.net/qq_41861261/article/details/85595872

    spring和hibernate集成后,通用的basedao

    在IT行业中,Spring和Hibernate是两个非常重要的框架。Spring是一个全面的Java企业级应用开发框架,而Hibernate则是一个优秀的对象关系映射(ORM)工具,它们的集成为开发者提供了强大的数据访问能力。在这个名为...

    spring4+hibernate4 封装BaseDao增删改查以及分页,,支持jdk1.7,不支持jdk1.8

    在IT行业中,Spring和Hibernate是两个非常重要的框架,它们分别专注于依赖注入和对象关系映射。本项目结合了Spring 4和Hibernate 4,旨在提供一个基础的数据访问层(DAO)实现,包括基本的CRUD操作(创建、读取、...

    Spring整合hibernate(4)之BaseDao的编写示例

    Spring整合hibernate(4)之BaseDao的编写示例 说明:因为我们在实际编码中会编写一些重复的数据库操作方法CRUD,每个类都写一次感觉很繁琐,因此可以考虑考虑把所有公共的方法都写在BaseDao中,这个时候,让所有的...

    springboot2.0多数据源集成hibernate配置hibernateDaoSupport示例

    本示例主要介绍如何实现Spring Boot 2.0多数据源的集成,并结合Hibernate进行配置,特别是在DAO层使用`HibernateDaoSupport`进行操作,而非使用JPA(Java Persistence API)。 首先,让我们了解Spring Boot 2.0的...

    SpringMvc(4.0)+hibernate(4.0)

    Hibernate 是一个流行的对象关系映射(ORM)框架,它允许开发人员将数据库操作与 Java 对象进行解耦,简化了数据库编程。在 Hibernate 4.0 版本中,改进了对 JPA 2.0 的支持,引入了更灵活的查询语言 HQL 和 ...

    basedao_basedao数据库_

    例如,一个简单的基于JDBC的BaseDao实现可能如下: ```java public abstract class BaseDao&lt;T&gt; { private DataSource dataSource; public BaseDao(DataSource dataSource) { this.dataSource = dataSource; } ...

    Hibernate留言板

    - 示例代码中的`DepartmentDao extends BaseDao implements IBaseDao`实现了`IDepartment`接口。 ### Spring集成 **9. Spring集成:** - Spring框架可以用来管理Hibernate等组件的生命周期。 - 示例代码中通过`...

    springMVC + Hibernate 工程模板

    hibernate dao 操作(一个basedao全部搞定) 两种配置:oracle mysql,切换数据库只要把SessionFactory的配置文件改成对应就可以了 c3p0配置:mysql调试通过,oracle由于存在问题,未配置 spring配置式事务管理...

    ssh+baseDao实现分页

    在IT行业中,SSH(Spring、Struts、Hibernate)是一个经典的Java Web开发框架组合,而BaseDao是常用于数据访问层的一个基类设计。本话题主要围绕如何利用SSH框架结合BaseDao实现分页功能来展开。 首先,让我们了解...

    SSH集成查询分页处理BaseDao

    3. **简单分页**:在BaseDao中实现的分页处理应该是简洁且易于理解的。通常,这会涉及到以下步骤: - 计算总页数:根据`countTotal`得到的总记录数和每页的记录数来计算。 - 执行分页查询:使用`queryByPage`方法...

    Hibernate封装dao层

    例如,`BaseDao&lt;T&gt;`,其中T代表实体类类型,这样就可以在不改变基本结构的情况下,为不同的实体类创建DAO。 6. **查询方法**: - 使用HQL(Hibernate Query Language)或Criteria API编写查询,可以方便地执行复杂...

    spring hibernate整合的底层数据操作方法

    在IT行业中,Spring和Hibernate是两个非常重要的框架,Spring是一个全面的后端开发框架,而Hibernate则是一个对象关系映射(ORM)工具,主要用于数据库操作。当我们将它们整合在一起时,可以实现强大的数据访问能力...

    baseDao及baseDaoImpl将hibernate里面的方法进行合理的封装,使用到java的反射技术

    在Java开发中,BaseDao和BaseDaoImpl是常见的设计模式,它们主要用于数据库操作,尤其是在使用ORM框架如Hibernate时。这两个类通常作为数据访问对象(DAO)的基类,旨在简化和标准化对数据库的CRUD(创建、读取、...

Global site tag (gtag.js) - Google Analytics