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** 在Java企业级开发中,数据访问层(DAO,Data Access Object)是连接业务逻辑层和数据库的重要桥梁。BaseDAO是一种通用的设计模式,它封装了Hibernate框架的基本操作,使得业务逻辑层...
在Java的持久化框架Hibernate中,BaseDAO(Base Data Access Object)是一种常见的设计模式,用于封装数据库操作,提供一套标准的方法来实现CRUD(Create、Read、Update、Delete)操作。这种模式使得业务层可以更加...
现在我们来深入探讨`hibernate`中的`BaseDAO`及其相关知识点。 首先,DAO设计模式是用来解耦业务逻辑层和数据存储层的关键工具。`BaseDAO`通常包含一些通用的数据库操作方法,如增删改查(CRUD),事务管理,以及...
`BaseDao`是常见的一种设计模式,用于封装Hibernate的基本数据库操作,它为业务层提供了一种统一的接口,方便进行CRUD(创建、读取、更新、删除)操作。在这个主题中,我们将深入探讨`BaseDao`的设计与实现,以及...
在Java的持久层框架Hibernate中,BaseDAO(基础数据访问对象)是常用的设计模式,用于封装对数据库的基本操作。在给定的“hibernate basedao(泛型版本)”中,开发人员通过引入泛型进一步提高了代码的复用性和灵活...
涵盖通过hibernate进行数据库操作的通用方法
基于hibernate封装的BaseDao,有完整的增删改查,分页,执行hql sql 方法 约 20个方法,详情地址 https://blog.csdn.net/qq_41861261/article/details/85595872
在IT行业中,Spring和Hibernate是两个非常重要的框架。Spring是一个全面的Java企业级应用开发框架,而Hibernate则是一个优秀的对象关系映射(ORM)工具,它们的集成为开发者提供了强大的数据访问能力。在这个名为...
在IT行业中,Spring和Hibernate是两个非常重要的框架,它们分别专注于依赖注入和对象关系映射。本项目结合了Spring 4和Hibernate 4,旨在提供一个基础的数据访问层(DAO)实现,包括基本的CRUD操作(创建、读取、...
Spring整合hibernate(4)之BaseDao的编写示例 说明:因为我们在实际编码中会编写一些重复的数据库操作方法CRUD,每个类都写一次感觉很繁琐,因此可以考虑考虑把所有公共的方法都写在BaseDao中,这个时候,让所有的...
本示例主要介绍如何实现Spring Boot 2.0多数据源的集成,并结合Hibernate进行配置,特别是在DAO层使用`HibernateDaoSupport`进行操作,而非使用JPA(Java Persistence API)。 首先,让我们了解Spring Boot 2.0的...
Hibernate 是一个流行的对象关系映射(ORM)框架,它允许开发人员将数据库操作与 Java 对象进行解耦,简化了数据库编程。在 Hibernate 4.0 版本中,改进了对 JPA 2.0 的支持,引入了更灵活的查询语言 HQL 和 ...
例如,一个简单的基于JDBC的BaseDao实现可能如下: ```java public abstract class BaseDao<T> { private DataSource dataSource; public BaseDao(DataSource dataSource) { this.dataSource = dataSource; } ...
- 示例代码中的`DepartmentDao extends BaseDao implements IBaseDao`实现了`IDepartment`接口。 ### Spring集成 **9. Spring集成:** - Spring框架可以用来管理Hibernate等组件的生命周期。 - 示例代码中通过`...
hibernate dao 操作(一个basedao全部搞定) 两种配置:oracle mysql,切换数据库只要把SessionFactory的配置文件改成对应就可以了 c3p0配置:mysql调试通过,oracle由于存在问题,未配置 spring配置式事务管理...
在IT行业中,SSH(Spring、Struts、Hibernate)是一个经典的Java Web开发框架组合,而BaseDao是常用于数据访问层的一个基类设计。本话题主要围绕如何利用SSH框架结合BaseDao实现分页功能来展开。 首先,让我们了解...
3. **简单分页**:在BaseDao中实现的分页处理应该是简洁且易于理解的。通常,这会涉及到以下步骤: - 计算总页数:根据`countTotal`得到的总记录数和每页的记录数来计算。 - 执行分页查询:使用`queryByPage`方法...
例如,`BaseDao<T>`,其中T代表实体类类型,这样就可以在不改变基本结构的情况下,为不同的实体类创建DAO。 6. **查询方法**: - 使用HQL(Hibernate Query Language)或Criteria API编写查询,可以方便地执行复杂...
在IT行业中,Spring和Hibernate是两个非常重要的框架,Spring是一个全面的后端开发框架,而Hibernate则是一个对象关系映射(ORM)工具,主要用于数据库操作。当我们将它们整合在一起时,可以实现强大的数据访问能力...
在Java开发中,BaseDao和BaseDaoImpl是常见的设计模式,它们主要用于数据库操作,尤其是在使用ORM框架如Hibernate时。这两个类通常作为数据访问对象(DAO)的基类,旨在简化和标准化对数据库的CRUD(创建、读取、...