Hibernate框架笔记整理--二



Hibernate框架

  1. 持久化类的编写规范

持久化类:与配置文件做映射的实体类,包括javaBean、配置文件。

编写规范:

  1. 提供无参的构造方法(hibernate通过无参构造实例化对象)

  2. 所有属性私有化

  3. 提供getset方法

  4. 基本类型与包装类型,建议全部用包装类型(防止有歧义)

  5. 持久化类不能被final修饰,hibernate的优化手段会失效

    如:延迟加载会变成立即加载,因为load查询返回的是代理对象,而此代理对象是由实体类的子类生成的。

  6. 持久化类必须由标识属性(OID属性)

    表示属性(OID属性)就是与表主键建立映射关系的属性

Ps:标识属性的作用

       OIDObject Identifie的简称),hibernate用它来区分多个对象是否为同一个。

       Jvm中用内存中的地址区分对象,

       数据库中用主键区分对象,

       Hibernate中用OID区分对象

 

使用Hibernate中提供的“主键生成策略”来保证OID的唯一性。

  1. 主键生成策略

    针对数值类型:native

    针对字符创类型:uuid

    Ps主键也可以不用hibernate维护,自己动手在程序中设定唯一非空(assigneduuid

  2. 持久化类的三种状态,及互相装换

    瞬时态:当前持久化类 没有oid属性 没被session操作管理

    持久态:当前持久化类 有oid属性 有被session操作管理

    托管态(离线态):当前持久化类 有oid属性 没被session操作管理

    Ps:持久态特点  

           只要涉及到查询返回的就都是持久化类的持久态对象

           只要持久态对象修改完属性,不需执行更新操作,会自动更新数据库

    (因为有一级缓存的存在)

  3. 一级缓存的原理

    session.get(Customer.class,"abcdefg");  // 去数据库查询,查完了之后放在一级缓存中

                                                     一级缓存

                                                            存储区

                                                                   放一份

                                                            快照区

                                                                   备份一份

     

 

 

 

 

ct.setCust_name("rose1234");   // 去一级缓存中的存储区修改了内容,但是快照区不修改

                                                 一级缓存

                                                        存储区

                                                               修改了

                                                        快照区

                                                               以前的

 

 

tx.commit();      // 去一级缓存中,将存储区和快照区的数据都拿出来对比

                            一致: 什么都不做

                                   不一致: 自动发送update语句做数据的数据更新

 

关闭缓存的办法:session.close();  //session关闭,缓存也销毁

                            session.clear();   //clear可以清空一级缓存的所有数据

                            session.evict();   //可清空一级缓存某一个对象的数据

 

  1. 针对单表批量查询的方式:QueryHQL查询

Configuration configuration = new Configuration();

//自动去src下加载名字叫hibernate.cfg.xml的配置文件

              configuration.configure();

              SessionFactory sessionFactory =configuration.buildSessionFactory();

              Session session =sessionFactory.openSession();

              Transaction tx = session.beginTransaction();

              // Query方式的HQL查询

              Queryqr = session.createQuery("from Customer");

              List<Customer> list =qr.list();

              for (Customer customer : list) {

                     System.out.println(customer);

              }

 

              //提交事务,关闭连接

              tx.commit();

              session.close();     

       }

  1. 针对单表批量查询的方式:CriteriaQBC查询(完全面向对象)

Configuration configuration = new Configuration();

//自动去src下加载名字叫hibernate.cfg.xml的配置文件

                     configuration.configure();

                     SessionFactorysessionFactory = configuration.buildSessionFactory();

                     Sessionsession = sessionFactory.openSession();

                     Transactiontx = session.beginTransaction();

                    

              // Criteria方式的QBC查询

             

              Criteria iter =session.createCriteria(Customer.class);

              //条件查

              Iter.add(Restrictions.like(“cust_name”, “b%”));

              //分页查

              Iter.setFirstResult(1);

              Iter.setMaxResult(3);

              //排序查

              Iter.addOrder(Order.desc(“cust_id”));

              //聚合查

              Iter.setProjection(Projection.rowCount());

              Object obj = iter.uniqueResult();

             

             

                    

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值