hibernate(五)核心开发接口

一、Configuration

1、AnnotationConfiguration

2、进行配置信息的管理

3、configure()方法通过传入一个配置文件来使用例:new Configutayion.configure("myhibernateconfig.xml")...如果不传入配置文件则默认为hibernate.cfg.xml

二、SessionFactory

1、维护着数据库的连接池,当它产生一个session的时候就是从数据库连接池中捡出一个连接交给这个session。

2、getCurrentSession():如果当前上下文环境已经有一个session了就直接获取这个sesssion如果没有则创建一个session,(在session提交前即执行session.getTransaction().commit()之前拿到的是同一个session,而当session提交后session会关闭,再拿到就是新的session)。事务提交自动close()

4、上下文:通过在配置文件中指定hibernate.current_session_context_class属性

有四个值:jta | thread | managed | custom.Class

jta(java transaction api):java中用来管理事务的API(分布式数据库事务管理)

如果值为thread当执行getCurrentSession()时就会从当前线程找session,如果没有找到session则创建session

3、openSession():永远会创建一个新的session。需要close()。

(注:先openSession()获取一个session1,然后getCurrentSession()获取一个session2,这两个session不会==。因为session1标记为需要关闭而session2标记不可关闭,两个session的实现类不同)

三、对象三种状态

Transient(临时状态):是刚刚new出来。内存中一个对象,没id,缓存中也没有(session缓存)

Persistent(持久化状态):执行sava()等其他方法之后会转成Persistent状态,该状态有id。内存中有,缓存中有,数据库中有,有id。

Detached(脱离管理状态):close()等其他方法之后会转成该状态。内存有,缓存没有(脱离管理了),数据库有,id有

例:

Teacher t = new Teacher();// t:Transient状态
t.setName("test1");// t:Transient状态
t.setTitle("title1");// t:Transient状态

Session session = sf.openSession();

session.beginTransaction();
session.save(t);System.out.println(t.getId());// t:Persistent状态
session.getTransaction().commit();
        System.out.println(t.getId());// t:Detached状态
session.close();

2、三种状态的区别

(1)有没有id;

  如果没有id一定是Transient状态

(2)id在数据库中有没有;

(3)id在内存中有没有(session缓存);

四、Session

1、管理一个数据库的任务单元(session来帮我们管理,进行curd)

2、方法(CURD)

(1)delete

  执行delete()方法会转成Transisent状态(参考三状态图),只要有id号就可以删除

(2)load(Class arg0 , Serialirable arg1),第一个参数是类,第二个是主键

  例:Teacher t = (Teacher)session.load(Teacher.class , 1);

  注:

Teacher t = (Teacher)session.load(Teacher.class , 1);
session.getTransaction().commint();
System.out.println(t.getName());

这种写法会抛出LazyInitializationException:could not initialize proxy - no Session异常

原因是load返回代理对象,当执行load方法的时候并不会发出sql语句,而是等到执行取出t对象的属性的时候(比如执行getName()的时候)才执行。而例子中执行getName()的时候session事务已经提交了

  

(3)get(Class arg0  , Serialirable arg1),第一个参数是类,第二个参数是

  例:Teacher t = (Teacher)session.load(Teacher.class , 1);

  当执行get方法的时候会马上发出sql语句,然后从数据库中取出值装到对象t中。

时间: 2024-12-16 08:40:58

hibernate(五)核心开发接口的相关文章

核心开发接口介绍

核心开发接口介绍1.hibernate_0500_CoreAPI2.HiberanteAPI 文档需要单独下载 在线api链接:http://docs.jboss.org/hibernate/core/3.3/api3.Configuration a) AnnotationConfiguration b) 进行配置信息的管理 c) 用来产生 SessionFactory d) 可以在 configure方法中指定hibernate配置文件 e) 只需关注一个方法即:buildSessionFac

Hibernate系列之核心开发接口

一.概述 所有的hibernate应用中都会访问5个核心接口,它们分别是: Configuration:配置hibernate,创建SessionFactory对象 SessionFactory:初始化hibernate,充当数据存储源的代理,创建Session对象 Session:负责保存.更新.删除.加载和查询对象 Transaction:管理事事务 Query和Criteria:执行数据库查询 下面将对这五个接口进行逐一总结: 二.Configuration 一个Configuration

Hibernate核心开发接口_SessionFactory详解

SessionFactory: a)  用来产生和管理Session b)通常情况下每个应用只需要一个SessionFactory c)除非要访问多个数据库的情况 d) 关注两个方法即:  openSession    和 getCurrentSession i.   openSession 每次都是新的,需要close ii.  getCurrentSession 从上下文找,如果有,用旧的,如果没有,建新的 1,用途,界定事务边界 2,事务提交自动close 注:上下文是什么?当前sessi

hibernate核心开发接口_Configuration

AnnotationConfiguration继承自Configuration,这里以AnnotationConfiguration为例: new AnnotationConfiguration().configure().buildSessionFactory(); AnnotationConfiguration().configure()会默认找src下的hibernate.cfg.xml,读取配置信息. * 最主要的是数据库连接信息,帮你做出连接池.SessionFactory代表着跟数据

Hibernate 再接触 核心开发接口

1.可以重载方法进行配置文件的指定 sessionFactory = new AnnotationConfiguration().configure("hibernate.xml").buildSessionFactory(); 这样读取到的就是hibernate.xml 但一般不建议修改 getcurrentsession 指的是上下文如果没有提交 就不会创建新的session opensession 永远打开新的session 用于鉴定事务边界 比如加入日志操作等 事务:要么同时完

Python学习笔记十五_开发接口

1.mock接口,模拟一些接口,在别的接口没有开发好的时候,你需要用它 假的支付接口,模拟支付成功 2. 3.查看数据,避免直接操作数据库flask web开发框架 实例化server 装饰器,下面的函数变为一个接口 启动服务 import flask,json #__name__代表当前这个python文件 server = flask.Flask(__name__)#实例化server,把当前这个python文件,当做一个服务 def my_db(sql): import pymysql c

Hibernate的核心接口

Hibernate的核心接口一共有5个 Session.SessionFactory.Transaction.Query和Configuration SessionFactory接口 SessionFactroy接口负责初始化Hibernate.它充当数据存储源的代理,并负责创建Session对象. 这里用到了工厂模式.需要注意的是SessionFactory并不是轻量级的,因为一般情况下,一个项目通常只需要一个SessionFactory就够, 当需要操作多个数据库时,可以为每个数据库指定一个

SQLite3 C/C++ 开发接口简介

SQLite3 C/C++ 开发接口简介 1.0 总览 SQLite3是SQLite一个全新的版本,它虽然是在SQLite 2.8.13的代码基础之上开发的,但是使用了和之前的版本不兼容的数据库格式和API. SQLite3是为了满足以下的需求而开发的: 支持UTF-16编码. 用户自定义的文本排序方法. 可以对BLOBs字段建立索引. 因此为了支持这些特性我改变了数据库的格式,建立了一个与之前版本不兼容的3.0版. 至于其他的兼容性的改变,例如全新的API等等,都将在理论介绍之后向你说明,这样

Hibernate之核心文件

一个Hibernate项目核心配置文件主要分为以下三个方面:1.配置文件hibernate.cfg.xml:2.配置文件*.hbm.xml,此文件一般包括映射文件的结构以及各种属性的映射方式:3.Hibernate关联关系映射. 1.配置文件hibernate.cfg.xml文件 1 <?xml version="1.0" encoding="utf-8"?> 2 <!DOCTYPE hibernate-configuration 3 PUBLIC