基本概念和CURD
开发流程
1由Domain object -> mapping->db。(官方推荐)
2由DB开始,用工具生成mapping和Domain object。(使用较多)
3由映射文件开始。
Domain Object限制
1.默认的构造方法(必须的)。
2有无意义的标示符id(主键)(可选)
3非final的,对懒加载有影响(可选)
Domain Java Object(User)

public class User {
private int id;
private String name;
private Date birthDay; //getter setter…
}
Java代码
1.初始化代码(只做一次)

Configuration cfg = new Configuration();
cfg.configure(“config.cfg.xml”);
// 也可以通过cfg.setProperty设置属性。
SessionFactory sessionFactory = cfg.buildSessionFactory();

所以将以上代码封装成工具类:

HibernateUtils.java

package com.dzq.utils;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration; public class HibernateUntils {
private static SessionFactory sessionFactory; private HibernateUntils() { } static {
Configuration cfg = new Configuration();
cfg.configure();//如果不是hibernate.cfg.xml这个文件名,需要加上文件名
sessionFactory = cfg.buildSessionFactory();
}
public static SessionFactory getSessionFactory(){
return sessionFactory;
}
public static Session getSession(){
return sessionFactory.openSession();
}
}
工具类的使用:
 public static void addUser(User user){
Session s=null;
Transaction tx=null;
try {
s=HibernateUntils.getSession();
tx=s.beginTransaction();
s.save(user);
tx.commit();
} catch (Exception e) {
if(tx!=null)
tx.rollback();
throw new RuntimeException(e);
}finally{
if(s!=null){
s.close();
}
}
}
Session的几个主要方法
1.save,persist保存数据,persist在事务外不会产生insert语句。
2.delete,删除对象
3.update,更新对象,如果数据库中没有记录,会出现异常。
4.get,根据ID查,会立刻访问数据库。
5.Load,根据ID查,(返回的是代理,不会立即访问数据库)。
6.saveOrUpdate,merge(根据ID和version的值来确定是save或update),调用merge你的对象还是托管的。
7.lock(把对象变成持久对象,但不会同步对象的状态)。

对象状态
瞬时(transient):数据库中没有数据与之对应,超过作用域会被JVM垃圾回收器回收,一般是new出来且与session没有关联的对象。
持久(persistent):数据库中有数据与之对应,当前与session有关联,并且相关联的session没有关闭,事务没有提交;持久对象状态发生改变,在事务提交时会影响到数据库(hibernate能检测到)
脱管(detached):数据库中有数据与之对应,但当前没有session与之关联;托管对象状态发生改变,hibernate不能检测到。
 
 
 工具类完善:
HibernateUtils.java
package com.dzq.utils;

import java.io.Serializable;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration; public class HibernateUntils {
private static SessionFactory sessionFactory; private HibernateUntils() { } static {
Configuration cfg = new Configuration();
cfg.configure();//如果不是hibernate.cfg.xml这个文件名,需要加上文件名
sessionFactory = cfg.buildSessionFactory();
}
public static SessionFactory getSessionFactory(){
return sessionFactory;
}
public static Session getSession(){
return sessionFactory.openSession();
} /**
* 添加
* @param entity
*/
public static void add(Object entity) {
Session s = null;
Transaction tx = null;
try {
s = HibernateUntils.getSession();
tx = s.beginTransaction();
s.save(entity);
tx.commit();
} catch (Exception e) {
if (tx != null)
tx.rollback();
throw new RuntimeException(e);
} finally {
if (s != null) {
s.close();
}
}
}
/**
* 修改
* @param entity
*/
public static void update(Object entity) {
Session s = null;
Transaction tx = null;
try {
s = HibernateUntils.getSession();
tx = s.beginTransaction();
s.update(entity);
tx.commit();
} catch (Exception e) {
if (tx != null)
tx.rollback();
throw new RuntimeException(e);
} finally {
if (s != null) {
s.close();
}
}
} /**
* 删除
* @param entity
*/
public static void delete(Object entity) {
Session s = null;
Transaction tx = null;
try {
s = HibernateUntils.getSession();
tx = s.beginTransaction();
s.delete(entity);
tx.commit();
} catch (Exception e) {
if (tx != null)
tx.rollback();
throw new RuntimeException(e);
} finally {
if (s != null) {
s.close();
}
}
} /**
* 根据主键id查询
* @param clazz
* @param id
* @return
*/
public static Object get(Class clazz,Serializable id) {
Session s = null;
try {
s = HibernateUntils.getSession();
Object obj=s.get(clazz, id);
return obj;
} finally {
if (s != null) {
s.close();
}
}
}
}
 

20160505-hibernate入门2的更多相关文章

  1. 三大框架之hibernate入门

    hibernate入门   1.orm      hibernate是一个经典的开源的orm[数据访问中间件]框架           ORM( Object Relation Mapping)对象关 ...

  2. Hibernate入门案例及增删改查

    一.Hibernate入门案例剖析: ①创建实体类Student 并重写toString方法 public class Student { private Integer sid; private I ...

  3. Hibernate入门案例 增删改

    一.Hibernate入门案例剖析: ①创建实体类Student 并重写toString方法 public class Student { private Integer sid; private I ...

  4. Hibernate入门6.Hibernate检索方式

    Hibernate入门6.Hibernate检索方式 20131128 代码下载 链接: http://pan.baidu.com/s/1Ccuup 密码: vqlv Hibernate的整体框架已经 ...

  5. Hibernate入门5持久化对象关系和批量处理技术

    Hibernate入门5持久化对象关系和批量处理技术 20131128 代码下载 链接: http://pan.baidu.com/s/1Ccuup 密码: vqlv 前言: 前面学习了Hiberna ...

  6. Hibernate入门4.核心技能

    Hibernate入门4.核心技能 20131128 代码下载 链接: http://pan.baidu.com/s/1Ccuup 密码: vqlv 前言: 前面学习了Hibernate3的基本知识, ...

  7. Hibernate入门3.配置映射文件深入

    Hibernate入门3.配置映射文件深入 2013.11.27 前言: 之前的两节是在Java项目中如何使用hibernate,并且通过一个简单地项目实践,期间有很多的错误,一般都是因为配置包的问题 ...

  8. 简单的Hibernate入门简介

    其实Hibernate本身是个独立的框架,它不需要任何web server或application server的支持.然而,大多数的Hibernate入门介绍都加入了很多非Hibernate的东西, ...

  9. Hibernate入门(1)-第一个Hibernate程序

    Hibernate入门(1)-第一个Hibernate程序 Hibernate是最著名的ORM工具之一,本系列文章主要学习Hibernate的用法,不涉及Hibernate的原理.本文介绍第一个Hib ...

  10. hibernate入门之person表

    下面的hibernate入门person表指的是:根据mysql数据库中的test表和其中的元素-->建立映射表==>进而创建持久化类的顺序来操作了,下面为步骤 1.配置MySQL驱动程序 ...

随机推荐

  1. 使用Genymotion作Android开发模拟器:安装Genymotion、部署Genymotion Vitrue Device、安装Genymotion eclipse插件

    偶然听说Genymotion Android模拟器非常强大,到网上了解一番后,决定从AVD又慢又卡中解脱出来,折腾了半天终于部署好了,体验了一下,果然启动快,运行流畅,现在总结一下经验教训,供大家参考 ...

  2. ACCESS-类型转换函数

    类型转换涵数: 函数   返回类型   expression   参数范围   CBool     Boolean   任何有效的字符串或数值表达式.   CByte     Byte   0   至 ...

  3. hdoj 2045 不容易系列之(3)—— LELE的RPG难题

    不容易系列之(3)—— LELE的RPG难题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/O ...

  4. nyoj 129 树的判定

    并查集+欧拉 树的判定 时间限制:1000 ms  |  内存限制:65535 KB 难度:4   描述 A tree is a well-known data structure that is e ...

  5. [Objective-c 基础 - 2.7] 构造方法、重写init方法

    A.id 万能指针,可以指向任何对象,实质是NSObject的指针,使用的时候不用加上*   B.NSObject中得类方法new 1.完整地创建一个可用对象步骤 (1)分配存储空间 + alloc ...

  6. Cocos2d-x 重写draw方法绘制直线等图形时被遮挡覆盖问题的一种解决方案

    最近在学习过程cocos2dx的过程中需要使用到绘制直线的功能,所以我就采用了引擎中 ccDrawLine 方法,然后重写 draw 方法,在该方法中绘制直线. 但是出现了一个问题,那就是绘制的图形被 ...

  7. Eclipse能否把选中的一段代码向前或向后缩进一个tab的位

    选中代码按TAB /shift + tab

  8. 传统XmlDocument操作

    需要引用的命名空间: using System.Xml; 常用的类:XmlDocument.XmlElement.XmlNode.XmlNodeList 一.使用XmlDocument创建xml // ...

  9. 【WIN32进阶之路】:线程同步技术纲要

    前面博客讲了互斥量(MUTEX)和关键段(CRITICAL SECTION)的使用,想来总觉不妥,就如盲人摸象一般,窥其一脚而言象,难免以偏概全,追加一篇博客查遗补漏. win32下的线程同步技术分为 ...

  10. cocos2d-x sprite触摸处理

    转自:http://www.cnblogs.com/lancidie/archive/2013/04/01/2993890.html 我们常常需要判断用户的点击操作是否落于某个sprite之上,进而让 ...