`
xzknet
  • 浏览: 306956 次
  • 性别: Icon_minigender_1
  • 来自: 河南
文章分类
社区版块
存档分类
最新评论

解析eclipse下生成Hibernate DAO中的几个方法

阅读更多
 

      前几天用eclipse下生成的Hibernate DAO做了一个实现的增删查改的小例子,在这里解释下生成DAO中的几个方法到底是做什么用的.
这里我将以注释的形式在下面的这段java代码中解释.

package dao;
/** *//**
 * 很简单引入你要用的包
 
*/

import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.LockMode;
import org.hibernate.Query;
import org.hibernate.criterion.Example;

/** *//**
 * 类UsertableDAO继承了BaseHibernateDAO
 
*/

public class UsertableDAO extends BaseHibernateDAO ...{

 
private static final Log log = LogFactory.getLog(UsertableDAO.class);

 
public static final String NAME = "name";

 
public static final String AGE = "age";
/** *//**
 * save()方法提供了向数据库中添加数据的功能,但只能添加,这个DAO没有生成Update()的方法
 * 但你可以简单的八save()方法改称具有Update功能:将getSession().save
 * (transientInstance);这句改成
 * getSession().merge(transientInstance);或者getSession().saveOrUpdate
 *  (transientInstance);
 
*/

 
public void save(Usertable transientInstance) ...{
  log.debug(
"saving Usertable instance");
  
try ...{
   getSession().save(transientInstance);
   log.debug(
"save successful");
  }
 catch (RuntimeException re) ...{
   log.error(
"save failed", re);
   
throw re;
  }

 }

/** *//**
 * delete()方法看名知意是用来删除的.
 
*/

 
public void delete(Usertable persistentInstance) ...{
  log.debug(
"deleting Usertable instance");
  
try ...{
   getSession().delete(persistentInstance);
   log.debug(
"delete successful");
  }
 catch (RuntimeException re) ...{
   log.error(
"delete failed", re);
   
throw re;
  }

 }

/** *//**
 * findById()方法实现了按ID查询数据.
 
*/

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

 }

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

 
public List findByExample(Usertable instance) ...{
  log.debug(
"finding Usertable instance by example");
  
try ...{
   List results 
= getSession().createCriteria("dao.Usertable").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 Usertable instance with property: " + propertyName
    
+ ", value: " + value);
  
try ...{
   String queryString 
= "from Usertable 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;
  }

 }

/** *//**
 * findByName()和findByAge()方法就是调用了findByProperty()方法的实现按名字和年龄查询
 * 的功能
 
*/

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


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

}


关于merge()  attachDirty() attachClean()三种方法下面做一个简单的介绍

/** *//** 
 * 将传入的detached状态的对象的属性复制到持久化对象中,并返回该持久化对象 
 * 如果该session中没有关联的持久化对象,加载一个,如果传入对象未保存,保存一个副本并作为持久对象返回,传入对象依然保持detached状态。 
 * 
@see com.CodeDepts 
 
*/
 
 
public CodeDepts merge(CodeDepts detachedInstance) ...
 log.debug(
"merging CodeDepts instance"); 
 
try ...
 CodeDepts result 
= (CodeDepts) getSession() 
 .merge(detachedInstance); 
 log.debug(
"merge successful"); 
 
return result; 
 }
 catch (RuntimeException re) ...
 log.error(
"merge failed", re); 
 
throw re; 
 }
 
 }
 

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

 * 
@see com.CodeDepts 
 
*/
 

分享到:
评论
1 楼 chaodilei 2012-07-04  
请问是用哪种插件自动生成的DAO,我用hibernatesync好像生成不了dao,只能生成javabean

相关推荐

    hibernate tools源码运行或修改需要的jar

    2. **Hibernate Tools**:作为Hibernate的一部分,它提供了与IDE集成的插件,如Eclipse和IntelliJ IDEA,帮助开发者生成和维护Hibernate相关的代码,比如实体类、映射文件、DAO层代码等。 3. **源码获取**:从描述...

    为xdoclet添加hibernate智能提示

    在IT行业中,XDoclet和...总的来说,这个主题涵盖了Java企业级开发中的几个重要方面:使用XDoclet自动化持久层代码生成,通过Hibernate实现ORM,以及事务管理确保数据安全。掌握这些知识将大大提高开发效率和代码质量。

    HibernateCore的代码生成、逆向工程、ant任务和更多工具___下载.zip

    在本文中,我们将深入探讨 Hibernate Core 的几个关键功能:代码生成、逆向工程、Ant 任务以及相关工具的使用。 1. **代码生成**: Hibernate 提供了一套工具,可以自动生成基于数据库模式的Java实体类、Hibernate...

    j2ee代码生成器源代码

    J2EE代码生成器的源码通常包含以下几个主要部分: 1. **模板引擎**:代码生成器的核心组件,负责将预定义的模板转换成实际的Java代码。常见的模板引擎有FreeMarker、Velocity等,它们允许开发者用特定的语法编写...

    Flex、Spring、Hibernate 集成

    - **demo_central**:这是一个**Java Web** 项目,主要包括以下几个方面: - 由**Spring** 实现业务逻辑。 - 由**Hibernate** 实现数据库的读写访问控制。 - 通过**BlazeDS** 提供**Flex** 访问的远程对象接口。 ...

    基于SSH的图书管理系统

    在本系统中,Struts2主要负责接收用户请求,解析请求参数,并调用相应的业务处理方法,最后返回对应的视图页面。Action类是Struts2的核心,它定义了业务逻辑处理的入口点。 2. **Spring**框架则作为整个应用的...

    基于java的SSHDemo实例

    Eclipse会自动解析配置文件,生成Action到Service到DAO的调用链,使得开发流程更为顺畅。 **运行与测试** 完成项目设置后,可以在Eclipse中启动内置服务器,通过浏览器访问项目,测试登录、添加、删除、修改User的...

    spring mvc demo

    在这个demo中,你可能会看到以下几个关键组件: 1. **配置文件**:可能包含`web.xml`,这是Servlet容器的部署描述符,用于配置DispatcherServlet。另外,Spring的配置文件(如`spring-servlet.xml`)用于配置Bean...

    王勇老师讲解DRP系统源码

    在开发环境中,王勇老师提到这个项目可以在Eclipse下直接运行。Eclipse是一款强大的集成开发环境(IDE),对Java开发有着全面的支持,包括代码编辑、调试、构建和版本控制等。在Eclipse中,开发者可以轻松导入DRP...

    7-Java-web开发17-Java-web开发17-Java-web开发17-Java-web开发17-Java-web开发

    在Java Web开发中,我们主要涉及到以下几个关键知识点: 1. **Servlet**: Servlet是Java Web应用的核心,它是Java编写的一个服务器端程序,用于处理HTTP请求。Servlet API提供了处理请求、生成响应的方法,使得...

    J2EE 0.3—加入提交多行数据功能、完成查、增操作、加入mapform功能

    在J2EE开发中,"J2EE 0.3—加入提交多行数据功能、完成查、增操作、加入mapform功能" 这个标题揭示了几个关键的知识点,这些是Web应用开发中常见的任务。我们将逐一深入探讨。 1. 提交多行数据功能: 在J2EE应用中...

    javaweb讯友网络相册源码.zip

    在【java项目本地环境搭建手册-小刘.pdf】中,通常会涵盖如何配置Java开发环境,比如安装JDK、设置环境变量、配置IDE(如Eclipse或IntelliJ IDEA),以及如何安装和配置Web服务器(如Tomcat)和数据库服务器(如...

    java项目之银行帐目管理系统源码.zip

    在这个银行账户管理系统中,主要涉及以下几个Java技术点: 1. **MVC架构**:模型-视图-控制器模式是常见的软件设计模式,用于分离业务逻辑、用户界面和数据处理。在本项目中,我们可能会看到对应的Controller、...

    java毕设之网上淘书吧.rar

    项目中的源代码主要集中在`src`目录下,可能包含以下几个部分: - **控制层(Controller)**:处理HTTP请求,协调业务逻辑与视图层。 - **服务层(Service)**:实现业务逻辑,例如书籍的添加、删除、查询等操作...

    spring-roo-docs

    该教程旨在教授开发者如何使用SpringRoo从零开始构建一个完整的Web应用,并涵盖以下几个方面: - 项目初始化与配置 - 实体类与字段的创建 - 集成测试 - Web层的构建 - 应用程序的安全性 - 用户界面的定制 - 自动化...

    支持多数据库的ORM框架ef-orm.zip

    例如:数据库查询条件的传入问题是所有ORM框架都不能回避的一个问题,所以我经常在想——既然我们可以用向DAO传入一个Entity来实现插入操作,为什么就不能用同样的方法来描述一个不以主键为条件的update/select/...

    jeecms_v8.1-src.zip

    源码结构清晰,主要包含以下几个部分: - `WEB-INF`:存放Web应用的配置文件、类路径资源和Web组件; - `src/main/java`:Java源代码,包括服务层(Service)、持久层(DAO)和模型层(Entity); - `src/main/...

Global site tag (gtag.js) - Google Analytics