前几天用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
*/
分享到:
相关推荐
2. **Hibernate Tools**:作为Hibernate的一部分,它提供了与IDE集成的插件,如Eclipse和IntelliJ IDEA,帮助开发者生成和维护Hibernate相关的代码,比如实体类、映射文件、DAO层代码等。 3. **源码获取**:从描述...
在IT行业中,XDoclet和...总的来说,这个主题涵盖了Java企业级开发中的几个重要方面:使用XDoclet自动化持久层代码生成,通过Hibernate实现ORM,以及事务管理确保数据安全。掌握这些知识将大大提高开发效率和代码质量。
在本文中,我们将深入探讨 Hibernate Core 的几个关键功能:代码生成、逆向工程、Ant 任务以及相关工具的使用。 1. **代码生成**: Hibernate 提供了一套工具,可以自动生成基于数据库模式的Java实体类、Hibernate...
J2EE代码生成器的源码通常包含以下几个主要部分: 1. **模板引擎**:代码生成器的核心组件,负责将预定义的模板转换成实际的Java代码。常见的模板引擎有FreeMarker、Velocity等,它们允许开发者用特定的语法编写...
- **demo_central**:这是一个**Java Web** 项目,主要包括以下几个方面: - 由**Spring** 实现业务逻辑。 - 由**Hibernate** 实现数据库的读写访问控制。 - 通过**BlazeDS** 提供**Flex** 访问的远程对象接口。 ...
在本系统中,Struts2主要负责接收用户请求,解析请求参数,并调用相应的业务处理方法,最后返回对应的视图页面。Action类是Struts2的核心,它定义了业务逻辑处理的入口点。 2. **Spring**框架则作为整个应用的...
Eclipse会自动解析配置文件,生成Action到Service到DAO的调用链,使得开发流程更为顺畅。 **运行与测试** 完成项目设置后,可以在Eclipse中启动内置服务器,通过浏览器访问项目,测试登录、添加、删除、修改User的...
在这个demo中,你可能会看到以下几个关键组件: 1. **配置文件**:可能包含`web.xml`,这是Servlet容器的部署描述符,用于配置DispatcherServlet。另外,Spring的配置文件(如`spring-servlet.xml`)用于配置Bean...
在开发环境中,王勇老师提到这个项目可以在Eclipse下直接运行。Eclipse是一款强大的集成开发环境(IDE),对Java开发有着全面的支持,包括代码编辑、调试、构建和版本控制等。在Eclipse中,开发者可以轻松导入DRP...
在Java Web开发中,我们主要涉及到以下几个关键知识点: 1. **Servlet**: Servlet是Java Web应用的核心,它是Java编写的一个服务器端程序,用于处理HTTP请求。Servlet API提供了处理请求、生成响应的方法,使得...
在J2EE开发中,"J2EE 0.3—加入提交多行数据功能、完成查、增操作、加入mapform功能" 这个标题揭示了几个关键的知识点,这些是Web应用开发中常见的任务。我们将逐一深入探讨。 1. 提交多行数据功能: 在J2EE应用中...
在【java项目本地环境搭建手册-小刘.pdf】中,通常会涵盖如何配置Java开发环境,比如安装JDK、设置环境变量、配置IDE(如Eclipse或IntelliJ IDEA),以及如何安装和配置Web服务器(如Tomcat)和数据库服务器(如...
在这个银行账户管理系统中,主要涉及以下几个Java技术点: 1. **MVC架构**:模型-视图-控制器模式是常见的软件设计模式,用于分离业务逻辑、用户界面和数据处理。在本项目中,我们可能会看到对应的Controller、...
项目中的源代码主要集中在`src`目录下,可能包含以下几个部分: - **控制层(Controller)**:处理HTTP请求,协调业务逻辑与视图层。 - **服务层(Service)**:实现业务逻辑,例如书籍的添加、删除、查询等操作...
该教程旨在教授开发者如何使用SpringRoo从零开始构建一个完整的Web应用,并涵盖以下几个方面: - 项目初始化与配置 - 实体类与字段的创建 - 集成测试 - Web层的构建 - 应用程序的安全性 - 用户界面的定制 - 自动化...
例如:数据库查询条件的传入问题是所有ORM框架都不能回避的一个问题,所以我经常在想——既然我们可以用向DAO传入一个Entity来实现插入操作,为什么就不能用同样的方法来描述一个不以主键为条件的update/select/...
源码结构清晰,主要包含以下几个部分: - `WEB-INF`:存放Web应用的配置文件、类路径资源和Web组件; - `src/main/java`:Java源代码,包括服务层(Service)、持久层(DAO)和模型层(Entity); - `src/main/...