解析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 
 */ 

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

/** *//** 
 * 将传入的对象状态设置为Transient状态 
 * @see com.CodeDepts 
 */ 

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

 

 

   好了解析到此为止如果你还不明白的话给我留言我一定尽我的所能去回答你的问题!

 

时间: 2025-01-18 13:38:20

解析eclipse下生成Hibernate DAO中的几个方法的相关文章

eclipse下使用hibernate tools实现hibernate逆向工程

问题描述 eclipse下使用hibernate tools实现hibernate逆向工程 5C 解决方案 检查配置文件,提示是说无法解析那个配置文件 解决方案二: 参考:http://zhoualine.iteye.com/blog/1190141

修改eclipse自动生成的comments中的author名字

这几天要对项目的源代码生成JavaDoc,而Eclipse自动生成的comments中的author名字默认是当前系统的用户名,例如我的系统用户名是user /** * @author user * */ 我总是要改为我自己的姓名,这多繁琐啊!现在算有空了,百度看看,网上有人说新建一个code Template,目前只看到这种网上提供的方法! 后来我决定自己探索Eclipse的配置页面,最终找到了不用新建code Template,而是直接修改code Template! 1. 先看看Eclip

eclipse如何生成私有变量的set和get方法

问题描述 eclipse如何生成私有变量的set和get方法 eclipse如何生成私有变量的set和get方法 eclipse如何生成私有变量的set和get方法 解决方案 set和get如果是私有的就没有意义了 解决方案二: CTRL+SHIFT+S,选择Generate Getters and Setters

eclipse能生成hibernate.cfg.xml却生成不了对应类的.hbm.xml

问题描述 步骤一切都没问题,没报错,就是不显示类对应的.hbm.xml文件 解决方案 解决方案二:你用的什么版本哦?我用的8.5,没出过这个问题

在 Linux 下生成高强度密码的四种方法

前一段时间,我们已经分享了如何在诸如 Debian.Ubuntu.Linux Mint.Elementary OS 的基于 DEB 的系统中强制用户使用高强度的密码 ,比如.那么,你可能会疑惑一个高强度的密码究竟是什么样的呢?怎么才能生成一个那样的密码呢?不用担心,下面我们将介绍 4 种简单方法让你在 Linux 中生成一个高强度密码.当然,已经有很多免费的工具或者方式来完成这个任务,但这里我们仅考虑那些简单直接的方法.下面就让我们开始吧. 1. 在 Linux 中使用 OpenSSL 来生成一

Eclipse下使用ANT编译提示OutOfMemory的解决方法_java

出现此错我的原因是由于ant在执行的时候,默认给JVM的内存不够,需要通过设定启动参数,增加允许使用的内存量.如果是通过命令行直接执行ANT,那么,直接修改启动命令即可.但是,在Eclipse上执行,命令行的设定就不好用了. 自己也是试验了好几次,最后终于搞定. 争取的设定方法是,直接在Eclipse的执行JVM上设定参数,如下: 1.打开Window->Preferences->Java->Installed JREs 2.选中默认(正在)使用的JDK 3.点击Edit..并向Defa

Windows和 Linux下生成以当前时间命名文件的方法_DOS/BAT

Windows BAT批处理文件: 复制代码 代码如下: @echo off set time_hh=%time:~0,2% if /i %time_hh% LSS 10 (set time_hh=0%time:~1,1%) set filename=%date:~,4%%date:~5,2%%date:~8,2%_%time_hh%%time:~3,2%%time:~6,2% echo test >> %filename%.txt Linux Shell 脚本: 复制代码 代码如下: #!/

eclipse从数据库逆向生成Hibernate实体类

     做项目必然要先进行数据库表设计,然后根据数据库设计建立实体类(VO),这是理所当然的,但是到公司里做项目后,让我认识到,没有说既进行完数据库设计后还要再"自己"建立一变VO.意思是,在项目设计时,要么根据需求分析建立实体类,由正向生成数据库表:要么就先进行数据库表设计,再逆向生成实体类.没有说进行完任意一方的设计后再去花时间去自己匹配建立另一方的设计. 原因是: 1. 1.5倍工作量,浪费时间.(时间对公司来说很重要) 2. 无法保证两边映射一致.因为两边都是自己设计的,那么

tomcat-在eclipse中新建servlet时,没有在web-inf目录下生成web.xml文件是怎么回事?

问题描述 在eclipse中新建servlet时,没有在web-inf目录下生成web.xml文件是怎么回事? 在eclipse中新建servlet时,没有在web-inf目录下生成web.xml文件是怎么回事?其中用的是tomcat-7.0 解决方案 Eclipse里面新建DynamicWeb Project时需要勾选生成web.xml选项才会生成web.xml文件.如果不勾选,则要自己建一个该文件了. 而新建Servlet后,如果要使用Servlet则需要在web.xml中自己配置. 解决方