Hibernate征途(三)之CRUD
上篇博客《Hibernate征途(二)之基础与核心》介绍了Hibernate的基础内容和核心内容,这篇博客简单实践一下。第一篇博客也说过Hibernate是一种JDBC的简化方案,既然是和数据库相关的操作,自然离不开CRUD,也就是常说的增删改查:
C reate new records
R etrieve existing records
U pdate existing records
D elete existing records.
七步骤
从步骤来看,Hibernate的使用都可以分为七个步骤,如下图:
即:
- 编写实体类,配置实体类的映射。
- 创建SessionFactory
- 创建并开启一个session
- 针对session,开启事务
- 进行数据库增删改查操作
- 提交或回滚事务
- 关闭session
实例
既然说到简单,就把简单贯彻到底,下面以保存一个用户为例,注意这七个步骤的使用。
User.java
public class User {
private String id;
private String name;
private String password;
private Date createTime;
private Date expireTime;
/**
……对应的setters和getters
**/
}
映射文件
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping >
<class name="com.tgb.hibernate.User" >
<id name="id">
<generator class="uuid" />
</id>
<property name="name" />
<property name="password" />
<property name="createTime" />
<property name="expireTime" />
</class>
</hibernate-mapping>
Utils
封装对SessionFactory和Session常用的操作。
public class HibernateUtils {
private static SessionFactory factory;
static{
try {
//get configuration
Configuration cfg=new Configuration().configure();
//create session factory
factory=cfg.buildSessionFactory();
} catch (Exception e) {
e.printStackTrace();
}
}
public static Session getSession(){
return factory.openSession();
}
public static void closeSession(Session session)
{
if (session!=null) {
if (session.isOpen()) {
session.close();
}
}
}
public static SessionFactory getSessionFactory()
{
return factory;
}
}
测试保存
public void testSave1()
{
Session session=null;
try {
//get session
session=HibernateUtils.getSession();
//open transaction
session.beginTransaction();
//create user
User user=new User()
User user =new User();
user.setCreateTime(new Date());
user.setExpireTime(new Date());
user.setName("zher");
user.setPassword("123");
//execute save
session.save(bird);
//commit transaction
session.getTransaction().commit();
} catch (Exception e) {
session.getTransaction().rollback();
e.printStackTrace();
}
finally
{
//close session
HibernateUtils.closeSession(session);
}
}
其它操作
save()仅是session操作的一种,除此之外,还有load()/get()、delete()、update(),使用类似不再赘述。
总结
这应该是Hibernate最简答的一个例子,这篇博客用于对上篇博客中三种状态和五个个核心接口使用的理解,下篇博客将介绍各式各样的映射,That' all。
Hibernate征途(三)之CRUD的更多相关文章
- Hibernate征途(二)之基础与核心
根据我司优良传统,必然要由上向下.逐级深入,所以在钻到Hibernate细节之前,先从宏观上行欣赏一下Hibernate.为什么说是欣赏?大家可以自行查阅一下Hibernate知识外的信息,创始人和H ...
- Hibernate征途(一)之初识
相见恨晚 很久以前,大概从开始接触数据库开始,就闪过这样一个想法,怎么看怎么觉得数据库表和vb的类模块很像,不是么?除了vb类模块还有函数外:越往下学觉得二者越像,尤其在三层时学到实体类的概念,我去, ...
- Hibernate的三种状态及对象生命周期
理解Hibernate的三种状态,更利于理解Hibernate的运行机制,这些可以让你在开发中对疑点问题的定位产生关键性的帮助. 三种状态 临时状态(Transient):在通过new关键字, ...
- hibernate的三种状态(儿)
第五讲:hibernate的三种状态 瞬时:bean对象与session,与数据库无关.在session对象的save方法保存之前. 持久状态(托管):bean对象与session有关,数据库中有对应 ...
- 第五讲:深入hibernate的三种状态
学过hibernate的人都可能都知道hibernate有三种状态,transient(瞬时状态),persistent(持久化状态)以及detached(离线状态),大家伙也许也知道这三者之间的区别 ...
- [转]深入hibernate的三种状态
学过hibernate的人都可能都知道hibernate有三种状态,transient(瞬时状态),persistent(持久化状态)以及detached(离线状态),大家伙也许也知道这三者之间的区别 ...
- Hibernate征途(七)之复合主键映射和集合映射
把这两种映射放到一起说,是因为这两种映射不像前面的复用型映射.数量和方向型映射那么分类鲜明,所以放到了这个“其他”里面. 复合主键映射 在关系模型中,复合主键和其他的主键方式没有很大区别,但是反映到对 ...
- Hibernate征途(六)之数量和关系映射
本来如果和关系模型一样,只需要一对一.一对多.多对多映射就够了,但是前面<Hibernate征途(四)之映射 序>中说到,对象模型中关联是有方向的,所以对一对多而言,就会产生一对多还是多对 ...
- 深入hibernate的三种状态
学过hibernate的人都可能都知道hibernate有三种状态,transient(瞬时状态),persistent(持久化状态)以及detached(离线状态),大家伙也许也知道这三者之间的区别 ...
随机推荐
- mongodb导入导出备份恢复
mongodb数据库同样离不开必要的维护,如备份.恢复.导入.导出. 其实备份和恢复比导入和导出要方便些,而且一般不会出错,所以大部分时候使用备份和恢复操作就可以了 1. 备份Mongodb mong ...
- 【转】android 电容屏(三):驱动调试之驱动程序分析篇
关键词:android 电容屏 tp 工作队列 中断 坐点计算 电容屏主要参数平台信息:内核:linux2.6/linux3.0系统:android/android4.0 平台:S5PV310( ...
- 键盘code码速查表
键盘 Key Code对照表 字母和数字键的键码值(keyCode) 按键 键码 按键 键码 按键 键码 按键 键码 A 65 J 74 S 83 1 49 B 66 K 75 T 84 2 50 C ...
- Team Formation(思维)
Team Formation Time Limit: 3 Seconds Memory Limit: 131072 KB For an upcoming programming contes ...
- Mock.js:前后端分离开发工具
概述 Mock.js实现的功能 基于 数据模板 生成数据 基于 HTML模板 生成数据 拦截并模拟 Ajax请求 用法 浏览器: <!-- (必选)加载 Mock --> <scri ...
- swfobject.js 2.2简单使用方法
swfobject.js 2.2简单使用方法 官方网址介绍http://code.google.com/p/swfobject/wiki/documentation 用法:html部分<div ...
- JavaScript模块化开发&&模块规范
在做项目的过程中通常会有一些可复用的通用性功能,之前的做法是把这个功能抽取出来独立为一个函数统一放到commonFunctions.js里面(捂脸),实现类似于snippets的代码片段收集. fun ...
- python面向对象(下)
继承 继承描述了基类的属性如何"遗传"给派生类.一个子类可以继承它的基类的任何属性,不管是数据属性还是方法.创建子类的语法看起来与普通(新式)类没有区别,一个类名,后跟一个或多个需 ...
- 【iOS】objective-c 文档生成工具 appledoc
最近做ios framework的一些测试,提供给其他开发者使用的framework,API文档变得更加重要,以前没有接触过,这次尝试使用了一把appledoc来生成一下文档,感觉还不错. 首先,是从 ...
- How can I get the logical valume by the datafile names and ASM disks?
Q:We use asmlib to create ASM disk in Oracle rac 11.2.0.3, and how can I get the logical valume by t ...