20160505-hibernate入门2

基本概念和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();
            }
        }
    }
}
时间: 2024-11-08 10:54:41

20160505-hibernate入门2的相关文章

史上最简单的Hibernate入门简单介绍

事实上Hibernate本身是个独立的框架,它不须要不论什么web server或application server的支持.然而,大多数的Hibernate入门介绍都加入了非常多非Hibernate的东西,比方: Tomcat, Eclipse, Log4J,Struts, XDoclet, 甚至JBoss.这easy让人产生Hibernate复杂难懂的误解,特别是打击了刚開始学习的人的积极性. 在这篇文章将不涉及Eclipse, log4j, Struts, Tomcat, XDoclet,

Hibernate入门第二课 Hibernate Tools for Eclipse Plugins安装

Hibernate入门第二课 Hibernate Tools for Eclipse Plugins安装 你们可以直接去,http://blog.csdn.net/wei_chong_chong/article/details/52979683,楼主写的挺好的. 自己心得: Hibernate装了好久都装不上去,不是安装过程出了问题,原来是下载的那些软件根本就不对,虽然都有hibertane的英文,但是具体名称要看懂啊,最好做到和视频里面一模一样.

Hibernate入门教程

上一章我们学了一下Hibernate的配置和单张表的操作,这一章说一下Hibernate中一对一的配置 Hibernate入门教程 第二章 Hibernate的一对一单边双边配置.以及增删改查 预备知识: 1.fetch ,可以设置fetch = "select" 和 fetch = "join" fetch ="select"是在查询的时候先查询出一端的实体,然后在根据一端的查询出多端的实体,会产生1+n条sql语句; fetch = &quo

【转】Hibernate入门实例

1. 环境配置 1.1 hiberante环境配置 hibernate可实现面向对象的数据存储.hibernate的官网:http://hibernate.org/ 官网上选择hibernate ORM,可以下载最新的hibernate,还有配套的document教程 http://docs.jboss.org/hibernate/orm/4.3/manual/en-US/html_single/ .下载到的hibernate文件夹中有document文档(hibernate\documenta

Hibernate入门篇——第一个Hibernate应用

Hibernate入门 第一步: 挑选jar包 在工程下新建lib文件夹,然后将Hibernate基本包复制进去.可以采用Maven来获取这些包: <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>4.2.7.Final</version> </dependency> 也可

第四章 Hibernate入门

第四章 Hibernate入门4.1 框架技术    4.1.1 框架的概念        框架是一个提供了可重用的公共结构的半成品.    4.1.2 主流框架        4.1.2.1 Struts框架        4.1.2.2 Struts2框架        4.1.2.3 Hibernate框架            一个优秀的持久化框架,负责简化对象数据保存到数据库中,或从数据库中读取数据并封装到对象的工作.        4.1.2.4 Spring框架4.2 Hibern

Hibernate入门案例及增删改查

一.Hibernate入门案例剖析: ①创建实体类Student 并重写toString方法 public class Student { private Integer sid; private Integer age; private String name; public Integer getSid() { return sid; } public void setSid(Integer sid) { this.sid = sid; } public Integer getAge() {

Hibernate入门_增删改查

一.Hibernate入门案例剖析:  ①创建实体类Student 并重写toString方法 public class Student { private Integer sid; private Integer age; private String name; public Integer getSid() { return sid; } public void setSid(Integer sid) { this.sid = sid; } public Integer getAge()

(01)Hibernate入门

1.Hibernate在SSH中的地位 SSH 序号 技术 作用 1 Struts 基于mvc模式的应用层框架技术! 2 Spring 创建对象.处理对象的依赖关系以及框架整合! 3 Hibernate 基于持久层的框架(数据访问层使用)! 2.DAO层的代码是如何编写的? (1)操作XML数据 (2)使用Jdbc技术 a)原始的jdbc操作, Connection/Statement/ResultSet b)自定义一个持久层框架, 封装了dao的通用方法 c)DbUtils组件, 轻量级的da

Hibernate 入门 04 - Hibernate中Java对象的三种状态

目录:(后续不断更新...) Hibernate 入门 01 - 框架技术 (介绍Hibernate框架的发展由来) Hibernate 入门 02 - Hibernate介绍及其环境搭建 Hibernate 入门 03 - 使用Hibernate完成持久化操作 Hibernate 入门 04 - Hibernate中Java对象的三种状态 ▁▃▅ Hibernate中Java对象的三种状态▅▃▁ 1. Java对象的三种状态 当应用通过调用Hibernate API与框架发生交互时,需要从持久