首页 > Web开发 > 详细

Hibernate学习笔记2.4(Hibernate核心开发接口和三种状态)

时间:2018-08-08 21:57:36      阅读:152      评论:0      收藏:0      [点我收藏+]

1.configuration(配置信息管理,产生sessionfactory)

 技术分享图片

sessionfactory管理一系列的连接池

opensession 永远打开新的,需要手动close

getcurrentsession如果当前环境有,就会用已经存在的,没有就创建新的

一旦提交就没了

getcurrentsession主要用于界定事务边界,事务提交自动close

上下文:在hibernate.cfg.xml里面改   currentsession_context_class

thread:线程  当前线程有没有一个对象,没有就创建i新的,使用connection

jta: 分布式事务 ,Java tarsaction api多数由中间键服务器提供 Tomcat不具备该能力

manager:手动管理事务

custormclass:自己定义

 如果使用getcurrentsession必须设定上下文环境

geucurrentsession和sessionopen拿到的类 具体实现可能不一样 因此一般情况下 不建议混用

 如果址用hibernate 就要写trycatch

用spring的话就不用写try catch

save();设定一个主键,id

首先搞懂三种状态

技术分享图片

三种状态

transient   :内存中的一个对象 缓存中没有对应的id和value

Persistent:内存中有 缓存中有 数据库有 有id

Datached: 内存有 缓存没有 数据库有 有id

save方法即是把transient转化为Persisitence

delete方法

Load 

    @Test
    public void testLoad() {
    
        Session session = sessionFactory.getCurrentSession();
        session.beginTransaction();
        Teacher t = (Teacher)session.load(Teacher.class, 1);
        
        session.getTransaction().commit();
        System.out.println(t.getClass());
        //System.out.println(t.getName());
    }

1,自动打包为intege 实现了序列化接口

get

@Test
    public void testGet() {
    
        Session session = sessionFactory.getCurrentSession();
        session.beginTransaction();
        Teacher t = (Teacher)session.get(Teacher.class, 1);
        
        session.getTransaction().commit();
        System.out.println(t.getClass());
        //System.out.println(t.getName());
    }
    

用load拿出东西的时候才会发出sql语句,不存在对应记录不拿东西不会报错,返回代理对象()

用get拿出对象的时候是直接在数据库加载,不存在对应记录不拿东西也会报错

 update

第一种 有detach到persistence 同时数据库更新

    @Test
    public void testUpdate1() {
    
        Session session = sessionFactory.getCurrentSession();
        session.beginTransaction();
        Teacher t = (Teacher)session.get(Teacher.class, 1);
        
        session.getTransaction().commit();
        
        t.setName("zhanglaoshi");
        
        Session session2 = sessionFactory.getCurrentSession();
        session2.beginTransaction();
        session2.update(t);
        
        session2.getTransaction().commit();
    }

更新trasent会报错

如果transent设置id数据库并且存在

数据库得有对应的记录

@Test
    public void testUpdate2() {
        
        
        Teacher t = new Teacher();
        t.setName("zhanglaoshi");
        
        Session session2 = sessionFactory.getCurrentSession();
        session2.beginTransaction();
        session2.update(t);
        
        session2.getTransaction().commit();
    }
    

如果有一个字段特别长 全改就会变低

技术分享图片

32集第九分钟

Hibernate学习笔记2.4(Hibernate核心开发接口和三种状态)

原文:https://www.cnblogs.com/frankzone/p/9445167.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!