hibernate官方文档:http://docs.jboss.org/hibernate/core/3.6/reference/zh-CN/html_single/

一、hibernate的5种查询方式总结:

           Hibernate 的检索方式主要有 5 种,分别为导航对象图检索方式、OID 检索方式、HQL 检索方式、QBC 检索方式和 SQL 检索方式


1、对象图导航检索:

   Java框架之hibernate(3)

 2、OID 检索方式:

   Java框架之hibernate(3)

 3、HQL 检索:  

  Java框架之hibernate(3)

  ①、基本语法:

    Java框架之hibernate(3)


  ②、排序:

   Java框架之hibernate(3)

  ③、条件:

             问号占位符

   Java框架之hibernate(3) 

             命名占位符

   Java框架之hibernate(3)

           
  ④、分页:

    Java框架之hibernate(3)

  ⑤、聚合:

     Java框架之hibernate(3) 

  ⑥、投影:

    Java框架之hibernate(3)  

 hql多表:

    Java框架之hibernate(3)              

     Java框架之hibernate(3)

 4、QBC检索:

    Java框架之hibernate(3)

   ①、基本语法:

    Java框架之hibernate(3)

   ②、排序:
    Java框架之hibernate(3)

   ③、条件:
    Java框架之hibernate(3)
           
   ④、分页:

    Java框架之hibernate(3)

   ⑤、聚合:

    Java框架之hibernate(3)

 离线Criteria对象:

   不需要session,可以"凭空"获得的Criteria对象.

  用法:

    Java框架之hibernate(3)

       api:

                    Java框架之hibernate(3)

  5、sql检索:

           Java框架之hibernate(3)

  6.使用总结:

              根据id查询=>OID查询
         查询已有对象的关联属性=>对象视图导航
         单表条件查询=>Criteria
         简单多表 => HQL(不推荐)
         复杂多表=> SQL

 

二、hibernate查询优化(hibernate查询策略):

     

         1、对象(类)级别:涉及方法:load方法

                          Java框架之hibernate(3)

                        

                    原理:懒加载策略时,load方法不执行查询,会先返回一个代理对象.代理对象中会封装当前的session对象.当我们访问代理对  象的属性时,代理对象会根据session查询数据库初始化对象中的属性

                 Java框架之hibernate(3).

             懒加载策略生成代理时,使用的代理技术是第三方代理技术=>CGLIB代理该代理生成的代理对象是被代理对象的子类.被final 修饰的类不能被CGLib代理.

       2、关联级别:

              ①、  集合查询: 一对多|多对多:

                                Java框架之hibernate(3)

                ②、关联属性:多对一:

                                Java框架之hibernate(3)

        3、结论:懒加载效率高.全部使用默认值即可.


三、注意问题:

            1、no-session问题:

                          Java框架之hibernate(3)

                          注意:代理对象的初始化不能放在session关闭之后.不然,会抛出异常:no-session

                         Java框架之hibernate(3)

          2、关于实体类唯一标识问题:

                如果我们希望使用 Hibernate 提供的所有特性,那么所有的持久化实体(persistent entity)类(这里也包括一些次要依赖  类)都需要一个唯一的标识符属性

          3、批量插入问题:

                   这段程序大概运行到 50,000 条记录左右会失败并抛出内存溢出异常(OutOfMemoryException) 。这是因为 Hibernate 把所有新插入的客户(Customer)实例在 session 级别的缓存区进行了缓存的缘故

四、Hibernate运行过程:

         1.通过Configuration().configure();读取并解析hibernate.cfg.xml配置文件

       2.由hibernate.cfg.xml中的<mappingresource="com/xx/User.hbm.xml"/>读取并解析映射信息

       3.通过config.buildSessionFactory();//创建SessionFactory

       4.sessionFactory.openSession();//打开Sesssion

       5.session.beginTransaction();//创建事务Transation

       6.persistent operate持久化操作 //一般指Save这个方法

       7.session.getTransaction().commit();//提交事务

       8.关闭Session

      9.关闭SesstionFactory



相关文章: