`

Hibernate DAO中的几个方法

    博客分类:
  • JAVA
 
阅读更多
* save()方法提供了向数据库中添加数据的功能,但只能添加,这个DAO没有生成Update()的方法
* 但你可以简单的八save()方法改称具有Update功能:将getSession().save * (transientInstance);这句改成
* getSession().merge(transientInstance);或者getSession().saveOrUpdate
*  (transientInstance);
public void save(User transientInstance) {
  log.debug("saving User instance");
  try {
   Session session=getSession();
   Transaction tx=session.beginTransaction();
   session.save(transientInstanc);
   tx.commit();
   session.close();
   log.debug("save successful");
  } catch (RuntimeException re) {
   log.error("save failed", re);
   throw re;
  }
}


delete()方法用来删除的 实际上我们会用下边的这个方法进行删除

public void delete(Integer id){
  log.debug("deleting User instance...");
  User user=findById(id);
  delete(user);
}

public void delete(User persistentInstance) {
  log.debug("deleting User instance");
  try {
   Session session=getSession();
   Transaction tx=session.beginTransaction();
   session.delete(persistentInstance);
   tx.commit();
   session.close();
   log.debug("delete successful");
  } catch (RuntimeException re) {
   log.error("delete failed", re);
   throw re;
  }
}

根据编号进行查找

public User findById(java.lang.Integer id) {
  log.debug("getting User instance with id: " + id);
  try {
   User instance = (User) getSession().get("hbm.User", id);
   return instance;
  } catch (RuntimeException re) {
   log.error("get failed", re);
   throw re;
  }
}

findByExample()方法实现的功能相当于"select * from Usertable"实现的功能就是查询所有 数据.

public List findByExample(User instance) {
  log.debug("finding User instance by example");
  try {
   List results = getSession().createCriteria("hbm.User").add(
     Example.create(instance)).list();
   log.debug("find by example successful, result size: "
     + results.size());
   return results;
  } catch (RuntimeException re) {
   log.error("find by example failed", re);
   throw re;
  }
}

findByProperty()方法用来灵活的提供一种按条件查询的方法,你可以自己定义要按什么样的方 式查询.

public List findByProperty(String propertyName, Object value) {
  log.debug("finding User instance with property: " + propertyName
    + ", value: " + value);
  try {
   String queryString = "from User as model where model."
     + propertyName + "= ?";
   Query queryObject = getSession().createQuery(queryString);
   queryObject.setParameter(0, value);
   return queryObject.list();
  } catch (RuntimeException re) {
   log.error("find by property name failed", re);
   throw re;
  }
}


public List findByName(Object name) {
  return findByProperty(NAME, name);
}

public List findBySex(Object sex) {
  return findByProperty(SEX, sex);
}

public List findByAge(Object age) {
  return findByProperty(AGE, age);
}

public List findAll() {
  log.debug("finding all User instances");
  try {
   String queryString = "from User";
   Query queryObject = getSession().createQuery(queryString);
   return queryObject.list();
  } catch (RuntimeException re) {
   log.error("find all failed", re);
   throw re;
  }
}

将传入的detached状态的对象的属性复制到持久化对象中,并返回该持久化对象  如果该session中没有关联的持久化对象,加载一个,如果传入对象未保存,保存一个副本并作为持久对象返回,传入对象依然保持detached状态。

可以用作更新数据

public User merge(User detachedInstance) {
  log.debug("merging User instance");
  try {

    Session session=getSession();
   Transaction tx=session.beginTransaction();
  
   User result = (User) session.merge(detachedInstance);
   tx.commit();
   session.close();
   log.debug("merge successful");
   return result;
  } catch (RuntimeException re) {
   log.error("merge failed", re);
   throw re;
  }
}

将传入的对象持久化并保存。 如果对象未保存(Transient状态),调用save方法保存。如果对象已保存(Detached状态),调用update方法将对象与Session重新关联。

public void attachDirty(User instance) {
  log.debug("attaching dirty User instance");
  try {
   getSession().saveOrUpdate(instance);
   log.debug("attach successful");
  } catch (RuntimeException re) {
   log.error("attach failed", re);
   throw re;
  }
}

将传入的对象状态设置为Transient状态

public void attachClean(User instance) {
  log.debug("attaching clean User instance");
  try {
   getSession().lock(instance, LockMode.NONE);
   log.debug("attach successful");
  } catch (RuntimeException re) {
   log.error("attach failed", re);
   throw re;
  }
}



  


  
分享到:
评论

相关推荐

    使用模式设计及java5新特性在HibernateDAO中的应用

    标题 "使用模式设计及java5新特性在HibernateDAO中的应用" 涉及到的是软件开发中的几个关键概念,包括模式设计、Java 5的新特性以及它们如何在Hibernate DAO层中得到应用。在这个主题中,我们将深入探讨这些知识点,...

    使用Struts+DAO+Hibernate完成用户登陆

    这个项目中的源代码可能包括以下几个部分: 1. **Action类**:定义了处理用户登录请求的逻辑,可能是LoginAction,其中包含了提交表单后的处理方法。 2. **DAO接口**:如UserDAO,包含如`findUserByCredentials...

    struts + DAO + Hibernate可直接运行程序

    在这个可直接运行的程序中,你可能会看到以下几个部分: 1. **配置文件**:包括struts-config.xml(Struts配置)、hibernate.cfg.xml(Hibernate配置)以及实体类的.hbm.xml文件(对象-关系映射)。 2. **实体类**...

    本人写的Hibernate超级通用DAO

    在设计一个通用的Hibernate DAO时,我们通常会考虑以下几个关键点: 1. **基础设计**:创建一个基类,如`HibernateBaseDAO<T>`,其中`T`为实体类的类型参数。这个基类应包含Hibernate SessionFactory的初始化,以及...

    使用Struts+DAO+Hibernate完成用户登录 源代码

    这个示例源代码可能包含了以下几个关键组件: - Struts的Action类,负责协调业务逻辑和视图。 - DAO接口及其实现,处理数据库操作。 - Hibernate的实体类(如User),与数据库表进行映射。 - 配置文件,如struts.xml...

    Struts+DAO+Hibernate的登陆

    后端开发主要包括以下几个步骤: - 添加Hibernate支持。 - 定义DAO接口和Hibernate实现类。 - 配置VO(Value Object)的映射文件。 具体步骤如下: 1. **添加Hibernate支持**:在项目中引入Hibernate相关的依赖。 2...

    DAO 入门实例。.仅供学习hibernate参考

    在Hibernate中,我们可以创建一个DAO接口,定义一些基本的数据库操作方法,如增删查改。然后,实现这个接口的类将使用Hibernate Session API来执行这些操作。这样,业务层只需调用DAO接口,无需关心具体的数据库...

    泛型dao 泛型dao 泛型dao

    当应用中需要使用到上十张表时,DAO的维护变得日益困难,主要表现在这几个方面: 1)dao类的繁多,很多设计都是一个entity对应一个dao (不同的只有类名和方法名) 2)dao接口需要维护的method庞大。 3)业务逻辑...

    Hibernate连表查询 Hibernate连表查询

    通过对HBM映射文件的理解、DAO层的连表查询实现以及查询结果的处理等几个方面进行了详细解释。在实际项目中,合理运用这些技巧可以极大地提高开发效率和代码质量。需要注意的是,在编写连表查询时要充分考虑性能问题...

    Hibernate入门案例源码

    在MyEclipse和Eclipse中,配置Hibernate通常包括以下几个步骤: 1. 添加Hibernate库:你需要导入Hibernate的jar文件或者通过Maven/Gradle等构建工具管理依赖。 2. 配置Hibernate:创建`hibernate.cfg.xml`配置文件,...

    004_基于数据库的登陆程序Struts DAO Hibernate 代码.rar

    具体到源代码,我们可以预期以下几个关键部分: 1. **Action类**:通常命名为`LoginAction`,负责接收用户的登录请求,调用`LoginDAO`进行验证,并根据结果返回对应的Struts动作。 2. **DAO接口和实现**:`...

    39-Hibernate数据关联实现〖MVSN〗_Struts + DAO + Hibernate(2).

    本课程主要涉及以下几个关键知识点: 1. **Hibernate简介**:Hibernate作为Java领域最流行的ORM框架,它通过提供一套API和XML配置文件,实现了Java对象与数据库表之间的映射。这使得开发者可以避免编写大量的SQL...

    spring几种Dao支持配置

    Spring鼓励使用模板方法设计模式来实现DAO,这样可以将通用逻辑集中在一个基类中,子类只关注特定的数据访问逻辑。 8. **DAO的依赖注入:** Spring的IoC容器可以通过依赖注入(DI)为DAO提供数据库连接池、事务...

    虚拟数据层 Struts2、Hibernate、Spring整合的泛型DAO Version 2010.9.27

    当应用中需要使用到上十张表时,DAO的维护变得日益困难,主要表现在这几个方面: 1)dao类的繁多,很多设计都是一个entity对应一个dao (不同的只有类名和方法名) 2)dao接口需要维护的method庞大。 3)业务逻辑...

    JDBC中的 DAO

    DAO模式包含几个关键组件: - **DAO接口**:定义了对数据库操作的抽象方法,如添加、更新、删除和查询。 - **DAO实现类**:实现了DAO接口,提供了具体的数据库操作实现。 - **实体类**:表示数据库表对应的Java对象...

    Spring与Hibernate集成

    在Java企业级应用开发中,Spring和Hibernate是两个非常重要的框架。Spring是一个全方位的轻量级应用框架,提供了强大的依赖注入、AOP(面向切面编程)以及各种服务管理功能。而Hibernate则是一个优秀的对象关系映射...

    Eclipse中Hibernate简单配置和使用

    Hibernate的工作原理可以概括为以下几个步骤: 1. 通过Configuration().configure();读取并解析hibernate.cfg.xml配置文件。 2. 由hibernate.cfg.xml中的读取解析映射信息。 3. 通过config.buildSessionFactory();...

    hibernate项目源代码

    在Hibernate项目中,通常会涉及以下几个核心知识点: 1. **配置文件**:`hibernate.cfg.xml`是Hibernate的主配置文件,其中包含了数据库连接信息、JDBC驱动、事务管理器设置等。学习者应了解如何配置这些参数以确保...

    Spring+hibernate整合源代码

    Spring 和 Hibernate 的整合主要涉及到以下几个方面: 1. **依赖注入**:Spring 提供的 DI(Dependency Injection)机制可以帮助管理 Hibernate SessionFactory 和 Session 实例,避免手动创建和管理这些对象。在...

    hibernate代码自动生成

    在实际开发中,Hibernate的代码生成通常包括以下几个方面: 1. 实体类生成:根据数据库中的表结构,自动生成包含属性(字段)和getter/setter方法的Java实体类。这些实体类代表数据库中的记录,属性对应表的列,...

Global site tag (gtag.js) - Google Analytics