Hibernate学习笔记( 二 ) 核心API介绍

 
Hibernate的API一共有6个,分别为:Session、SessionFactory、Transaction、Query、Criteria和Configuration。
         通过这些接口,可以对持久化对象进行存取、事务控制。   详情请百度.......
============================================================================================
Hibernate 4.0 版本
      在CRUD操作执行完成后,释放资源阶段,如果仅仅是关闭session    进程无法停掉
      还需要关闭会化工厂          SessionFactory.close()
                                  还需要销毁   StandardServiceRegistry  实例  ssr
                   ===>           StandardServiceRegistryBuilder.destroy(ssr);
================================
    1/提取出公共工具类:
-----------------------------------------------------------
    public class HibernateSessionFactory {
        private final static SessionFactory sessionFactory;
        static {
            try{
                sessionFactory =new Configuration().configure().buildSessionFactory();
            }catch (Exception e) {
                e.printStackTrace();
                throw new ExceptionInInitializerError(e);
            }
        }

        public static Session getCurrentSession () {
            return sessionFactory.getCurrentSession();
        }

        public static Session getOpenSession () {
            return sessionFactory.openSession();
        }
    }
-----------------------------------------------------------
    2/根据主键查询操作
        a/ Object  get(class , id )   若数据不存在返回null
        b/ Object  load(class , id )  若数据不存在返回ObjectNotFoundException
-----------------------------------------------------------
(一) Hibernate 动态更新
    --> 这里记录基于API的三种方式进行简单的更新
        1/ 使用update()方法
           这个方法会直接进行跟新
        2/ 使用load() 方法
        -----------------------------------------------------
         public void  updataUser(User user) {
                try {
                    transaction = HibernateSessionFactory.getCurrentSession().beginTransaction();
                    //加载获取数据库中存储的数据   保存为一个快照--> 缓存
                    User userToUpdate =  userDao.loadUser(user.getId());
                    // 分别对每个属性进行赋值 -->  在快照的基础上进行比对,对发生变化的数据进行更新
                    userToUpdate.setAge(user.getAge());
                    userToUpdate.setName(user.getName());
                    userToUpdate.setPwd(user.getPwd());
                    transaction.commit();
                }catch (Exception e){
                    e.printStackTrace();
                    if (transaction!=null){
                        System.out.println("异常回滚");
                        transaction.rollback();
                    }
                }
            }
        -----------------------------------------------------
        3/ 使用merge方法     动态更新    每次更新前都会进行查询  类同2, 但不用赋值
-----------------------------------------------------------
(二) 删除
-----------------------------------------------------------
    1/ 常见异常处理:
    not-null property references a null or transient value : com.bdqn.entity.User.age
    --->  这个异常是因为:
   <property name="age" column="age" type="java.lang.Integer" length="10" not-null="true"/>
                    ==> hibernate 在进行数据封装时, 通过xml校验到 age属性是null的,而正如上面的
                                  配置,notnull="true", 所以报错,但是在三层结构中,对于一般的数据
                                  大部分都会在service和web层等做完校验,二者dao层应当校验完毕,
                                  dao层处理的数据都应是一个有效数据.
                                  notnull   使用需适当
      2/ 如果主键增长策略是assign    则在执行删除的时候, Hibernate会先进行查询主键是否有效,是否会返回
                                  一个正确有效的对象,然后进行删除

      -----------------------------------------------------------
         删除的两种API方式  : 1  /  通过传入一个id数据 , 然后调用load/get方法获取一个对象
                                    调用delete方法删除对象
                              2  /  通过传入的id封装为一个只含有id属性的对象,直接调用delete方法删除,但
                                    此方法使用需要结合xml配置里的非空验证
      -----------------------------------------------------------
-----------------------------------------------------------
( 三 ) 三种状态
      ----------------------------------------------
       状态          内存         session
       瞬时态          ×            ×
       游离态          √            ×
       持久态          √            √
       ----------------------------------------------
       脏对象:      执行完查询或者其他某个操作 , 将游离态对象转变成了持久态,最初的时候 Hibernate会给
                    拿到的数据一个快照,在接下来使用过程中很有可能对当前这个对象会做出一些修改,导致数据
                    发生变化,一旦发生变化,这个对象就被成为了脏对象.
                    =========== >   在hibernate中状态前后发生改变的对象,称为脏对象
       脏检查;     一旦数据发生变化,Hibernate就回进行脏检查,一旦发现脏对象,就回执行同步操作,保持和数据库
                   数据一致
              ===>  脏检查触发的时机 :
                            a/ 事务提交    tx.commit()  时触发
                            b/ 刷新缓存    tx.flush()   时触发

========================================================================================











  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值