上篇博客《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的更多相关文章

  1. Hibernate征途(二)之基础与核心

    根据我司优良传统,必然要由上向下.逐级深入,所以在钻到Hibernate细节之前,先从宏观上行欣赏一下Hibernate.为什么说是欣赏?大家可以自行查阅一下Hibernate知识外的信息,创始人和H ...

  2. Hibernate征途(一)之初识

    相见恨晚 很久以前,大概从开始接触数据库开始,就闪过这样一个想法,怎么看怎么觉得数据库表和vb的类模块很像,不是么?除了vb类模块还有函数外:越往下学觉得二者越像,尤其在三层时学到实体类的概念,我去, ...

  3. Hibernate的三种状态及对象生命周期

        理解Hibernate的三种状态,更利于理解Hibernate的运行机制,这些可以让你在开发中对疑点问题的定位产生关键性的帮助. 三种状态 临时状态(Transient):在通过new关键字, ...

  4. hibernate的三种状态(儿)

    第五讲:hibernate的三种状态 瞬时:bean对象与session,与数据库无关.在session对象的save方法保存之前. 持久状态(托管):bean对象与session有关,数据库中有对应 ...

  5. 第五讲:深入hibernate的三种状态

    学过hibernate的人都可能都知道hibernate有三种状态,transient(瞬时状态),persistent(持久化状态)以及detached(离线状态),大家伙也许也知道这三者之间的区别 ...

  6. [转]深入hibernate的三种状态

    学过hibernate的人都可能都知道hibernate有三种状态,transient(瞬时状态),persistent(持久化状态)以及detached(离线状态),大家伙也许也知道这三者之间的区别 ...

  7. Hibernate征途(七)之复合主键映射和集合映射

    把这两种映射放到一起说,是因为这两种映射不像前面的复用型映射.数量和方向型映射那么分类鲜明,所以放到了这个“其他”里面. 复合主键映射 在关系模型中,复合主键和其他的主键方式没有很大区别,但是反映到对 ...

  8. Hibernate征途(六)之数量和关系映射

    本来如果和关系模型一样,只需要一对一.一对多.多对多映射就够了,但是前面<Hibernate征途(四)之映射 序>中说到,对象模型中关联是有方向的,所以对一对多而言,就会产生一对多还是多对 ...

  9. 深入hibernate的三种状态

    学过hibernate的人都可能都知道hibernate有三种状态,transient(瞬时状态),persistent(持久化状态)以及detached(离线状态),大家伙也许也知道这三者之间的区别 ...

随机推荐

  1. MySQL Workbench导出数据库

    步骤: 1. 打开mysql workbench,进入需要导出的数据库,点击左侧栏的[Management]tab键. 2. 点选要输出的数据库 点击[Data Export] 选在要输出的数据库 选 ...

  2. 单调队列-hdu-3415-Max Sum of Max-K-sub-sequence

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3415 题目大意: 给n个数凑成环状,求某一区间,使得该区间长度不超过k,且总和最大. 解题思路: 区 ...

  3. Sublime Text 2 介紹

    代码编辑器或者文本编辑器,对于程序猿来说,就像剑与战士一样,谁都想拥有一把能够随心驾驭且瑞丽无比的宝剑,而每一位程序猿,相同会去追求最适合自己的强大.灵活的编辑器,相信你和我一样,都不会例外. 我用过 ...

  4. 使用jqMobi开发app基础:弹出内容的设计

    设计APP,因为屏幕非常小.在PC网页山能够放在一体的内容.在APP中就不能放在一起了. 比如例如以下.项目出勤人员非常多,须要弹出一个panel.然后让用户选择,怎样设计呢? 项目出勤panel的内 ...

  5. hdu 4611

    2013hdu多校联赛二的第一题,当时队友说两个盒子个数的最小公倍数是周期, 如果两个数的最小公倍数比较大的时候(最大是9999900000),如果遍历求的话肯定会超时 当时想找各种规律,都没找到,最 ...

  6. javascript 判断系统设备

    <script> function detectOS() { var sUserAgent = navigator.userAgent; var isWin = (navigator.pl ...

  7. linux下Mysql 的安装、配置、数据导入导出

    MySQL是一种开放源代码的关系型数据库管理系统(RDBMS),虽然功能未必很强大,但因它的免费开源而广受欢迎. 这次,接着上一篇<CentOs minimal安装和开发环境部署>,讲下L ...

  8. 实现两个select list box间item的移动和过滤

    <head> <title> </title> <!--Standard jQuery --> <script type="text/j ...

  9. K - Digital Roots(第二季水)

    Description The digital root of a positive integer is found by summing the digits of the integer. If ...

  10. SDK编程模板

    #include<Windows.h> LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); int WINAPI WinMain(HINS ...