hibernate 的知识点

来源:互联网 发布:淘宝好口粮茶推荐 编辑:程序博客网 时间:2024/05/22 03:09

 

一、Hibernate:ORM(Object Relation Mapping)对象关系映射框架

常用的ORM框架有:Hibernate、TopLink、OJB。

Hibernate 框架完全是进行对象的操作,不再会有对字段、属性的操作。如Hibernate 删除则是删除一个对象,更新则是对某一个对象状态进行更新

小贴士:应用Hibernate开发时,可与JDBC相联想

二、开发流程:

1.由Domain Object ----》mapping -----》db(官方推荐)

2.由DB开始,用工具生成mapping和Domain Object(使用较多)

3.由映射文件开始

Domain Object 限制:

1.默认的构造方法(必须的)

2.有无意义的标示符id(主键)(可选)

3.非final,对懒加载有影响

三、需要一个工具类,只加载一次 hibernate.cfg.xml 文件

package cn.itcast.hibernate;

import org.hibernate.Session;

import org.hibernate.SessionFactory;

import org.hibernate.cfg.Configuration;

publicfinalclass HibernateUtil  {

    private HibernateUtil()  {}

    privatestatic SessionFactory sf = null; 

    static  {

        Configuration cfg = new Configuration();

        cfg.configure();

//cfg.configure(new File("filename")); //指定配置文件的路径,不指定则默认

        sf = cfg.buildSessionFactory();

    }   

    publicstatic SessionFactory getSessionFactory()  {

        returnsf;

    }   

    publicstatic Session getSession()  {

        returnsf.openSession();

    }

}

 

小贴士:将java类与hibernate源码绑定

四、Mysql 有多种引擎:

    MyISAM:5.0以前的缺省引擎,效率高但不支持事务。

    InnoDB:支持事务,则Hibernate操作时需要开启事务,进行操作后提交事务,这样才能将数据持久化:

Transaction tx = s.beginTransaction();//开启事务

        User user = new User();

        user.setName("name");

        user.setBirthday(new Date());

        s.save(user);

tx.commit(); //事务提交

五、Hibernate 核心接口概述:

Configuration:

负责管理Hibernate的配置信息,这些信息由配置文件提供,包括如下内容:

1.Hibernate运行的底层信息:数据库的URL、用户名、密码、JDBC驱动类等,数据库Dialect,数据库连接池等。

2.Hibernate映射文件(*.hbm.xml)

调用代码:

1.属性文件(hibernate.properties)

Configuration cfg = new Configuration();

cfg.addClass(XXX.class);//该方法加载XXX.hbm.xml

cfg.addResource();

2.XML文件(hibernate.cfg.xml)

Configuration cfg = new Configuration();

cfg.configure();

SessionFactory:

1.应用程序从SessionFactory(会话工厂)里获得Session(会话)实例。它在多个应用线程间进行共享。通常情况下,整个应用只有唯一的一个会话工厂---例如在应用初始化时被创建。然而,如果你使用Hibernate访问多个数据库,你需要每个数据库使用一个会话工厂。

2.会话工厂缓存了生成的SQL语句和Hibernate在运行时使用的映射元数据。

3.调用代码:

privatestatic SessionFactory sf = null

static {

    Configuration cfg = new Configuration();

    cfg.configure();

    sf = cfg.buildSessionFactory();

}

Session

1.Session不是线程安全的,它代表与数据库之间的一次操作会话

2.Session也称为持久化管理器,因为它是与持久化有关的操作接口

3.Session通过SessionFactory打开,在所有的工作完成后,需要关闭

4.Session缓存其管理的持久化对象

5.调用代码:

Session session sessionFactory.openSession();

Transaction:

1.它将应用代码从底层的事务实现中抽象出来---这可能是一个JDBC事务,一个JTA用户事务或者甚至是一个公共对象请求代码结构(CORBA)---允许应用通过一组一致的API控制事务边界

2.这有助于保持Hibernate应用在不同类型的执行环境或容器中的可移植性

3.Hibernate提供的事务提交模式默认为非自动提交模式(默认:autoCommit=false),因此使用Hibernate进行操作时(增、删、改)必须显示的调用Transaction的API

4.调用代码:

Transaction tx = session.beginTransction();

Tx.commit()/rollback();

Query/Criteria:

1.Query接口封装了Hibernate强大的对象查询能力,同时也支持数据库的更新操作

2.提供了动态查询的参数绑定功能

3.提供list(),iterator(),scroll()等对象导航方法

4.提供uiqueResult()方法获取单独的对象

5.提供executeUpdate()方法来执行DML语句

6.提供了可移植的分页查询方法

Session:

1、save,presist保存数据,persist在事务外不会产生insert语句。

2、delete,删除对象

3、update,更新对象,如果数据库中没有记录,会出现异常,脱管对象如属性改变需要保存,则调用update方法

4、get,根据ID查,会立刻访问数据库

5、load,根据ID查,(返回的是代理,不会立即访问数据库)

6、saveOrUpdate,merge(根据ID和version的值来确定是否是save或update),调用merge你的对象还是托管的。当不知该对象的状态时可调用该方法

小贴士:瞬时对象id无值,脱管对象有值,hibernate通过该方式判断对象的状态

7、lock(把对象变成持久对象,但不会同步对象的状态)

六、Hibernate中对象的状态:

状态的参考:数据库中是否有记录;是否有session关联

1、瞬时(transient):数据库中没有数据与之对应,超过作用域被JVM垃圾回收器回收,一般是new出来且session没有关联的对象

2、持久(persistent):数据库中有数据与之对应,当前session有关联,并且相关联的session没有关闭,事务没有提交;持久对象状态发生改变,在事务提交时会影响到数据库(hibernate能检测到)

3、脱管(detached):数据库中有数据与之对应,但当前没有session与之关联;托管对象状态发生改变,hibernate不能检测到

对象在的状态转化:
    

原创粉丝点击