hibernate学习关键知识

   Oracle(Thin driver)
  oracle.jdbc.driver.OracleDriver
  jdbc:oralce:thin:@192.168.0.250.1521:oracle
  scott
  tiger 

 


hibernate :
        开源O/R(Object Relational Mapping)映射框架
  课程目标:
       理解O/R Mapping原理
       掌握Hibernate开发的相关知识
       能使用Hibernate进行实际项目开发
       Hibernate高手进级:性能优化策略
      
hibernate的开发步骤
1:导入包
2:建立与表对应的javaBean类及与表对应的xml配置文件;
3:建立连接数据库的配置文件:hibernate.cfg.xml;
4:获得SessionFactory 和 Session(分别等价与DataSource,Connection)
   Configuration:xml文件的解析类;
 configuration.configure(configFile);解析hibernate
 sessionFactory = configuration.buildSessionFactory;

 Session session = threadLocal + sessionFactory
   Session session = threadLocal.get();
 if(session == null){
  session = sessionFactory.open();
 threadlocal.set(session);
 }
5:


 1.Hibernate与Jdbc的区别:
     直接使用JDBC操作数据库的步骤很繁琐;
     JDBC操作的是关系型数据库;
     我们用JAVA开发程序,则使用面向对象的编程思想;
     Hibernate正是在这两种不同的模型之间建立关联,Hibernate给我们提供了利用面向对象的思想来操作关系型数据的接口;
     如:save(User user)用jdbc与hibernate的区别;
     hibernate的好处:
                        O/R的好处:操作简单;减少代码量
                                   移置方便;减少缓存
       缓存
                                   无侵入性(轻量级框架);解决操作对象
       是面向对象编程     

                                 
                        不宜使用O/R:大批量的数据如:
                        OLAP(On-Line Analytical Processing 联机分析处理),
                       1: 以查询分析数据为主的系统;
                           如分析公司男女比例,公司本季度的业绩等分析为主的系统,
                           以返回单个值为主的系统;
                       2:   dba做优化; 要求性能极高,如采用数据库的特性;
                        采用O/R:关系不复杂;
                                

                                 
 2.O/R framework: Hibernate ,JDO,Toplink,ibatis(object mapping ibatis,使用遗留的系统);
 
 3.对象 —— 关系映射
     属性映射(简单的属性,复杂的属性)
     类映射
     关联映射
           一对一
           一对多
           多对多
          
 4.简单的实例:
          见:hibernate_simple工程文件,readme.txt说明
 5.核心接口:
      业务逻辑层:
           Lifecycle
           Validatable
      持久层
           Session,Transaction
           Query,SessionFactory
           JNDI JDBC JTA
           Interceptor
           UserType
  6.持久化对象的状态:
        Transient对象具有的特征:
          * 不处于session缓存中,不被任何一个session实例关联
          * 在数据库中没有相应的记录
 
       Persistent对象具有的特征:
         * 位于一个Session的缓存中,持久对象总是和一个session实例关联
         * 持久对象和数据库中的记录对应
         * 持久对象的变化会自动同步到数据库
 
      Detached对象具有的特征:
         * 不再位于session的缓存中,不被session关联
         * detached对象是由persistent对象转变过来的,因此数据库中会存在一条记录与之对应
        见rose图:持久化对象的状态.mdl
       
       
  7.测试对象的生命周期:
      hibernate_session工程文件
     
     
  8.get和load的区别?
      *load方法实现了Lazy(延迟加载或懒加载(lazy)),所以不会马上发出sql;
          采用cglib代理实现,针对类产生代理类;
          lazy是hibernate的重要特性;
          采用load加载数据,如果数据库中不存在相应的数据,
          那么抛出异常ObjectNoFoundException;
      *get会马上发出sql进行执行查询;采用get方式加载数据,如果数据库不存在该的记录,则返回null;
     
 9.Hibernate基本映射:
    类-->数据库表
    普通属性--> 表字段
    通过<class>标签映射到数据库表,通过<property>标签将普通属性映射到表字段
    所谓普通属性,不包括自定义类,集合类和数组等。
   
   实体类四条主要的规则:
    * 实现一个默认的(即无参数的)构造方法(constructor)
    * 提供一个标识属性(identifier property)(可选)
    * 使用非final的类 (可选),如:load方法得到的是cglib的代理类,即它的子类,而final为终态类;
    * 为持久化字段声明访问器(accessors)(可选)
   <hibernate-mapping>的属性:
       package
   <class>元素的属性说明:
    dynamic-update
    dynamic-insert
    batch-size
    optimistic-lock
    lazy
   <id>元素的注意事项:
     *id生成器:native(是sequence:必须在oracle中建hibernate_sequence),数字型的主键;
             increment
             identity
             assigned
             foreign
             uuid(字符)
            
             效率最高的是:uuid
     *unsaved-value
    
     property元素的属性:
      column;
      type:java的类型,hibernate的自定义类型;
      formula:值由其它属性计算得到;
      lazy
      unique
      not null;
     
    
     主要:javabean的属性名称,类名不能与sql中的保留字相同。
           
   
10 hibernate.cfg.xml配置文件:

11 Hibernate多对一关联

  关联映射的本质
    * 是将关联关系映射到数据库中,关联关系在对象模型中体现为内存中的一个或多个引用
      <many-to-one>标签会在“多”的一端添加一个外键,指向“一”的一端,这个外键是由<many-to-one>
      标签中的column属性定义的,如果忽略column属性,默认创建的外键与属性名相同
     
      重点注意:说明持久对象不能引用瞬时状态的对象,所以抛出TransientObjectException异常;

     <many-to-one>标签的定义实例:
 <many-to-one name="group" column="relatedGroup"/>
        可以指定class属性,如果不指定Hibernate会自动找其关联类
   理解级联的含义:
       //通过级联,是解决TransientObjectException异常的一种手段 
      
      
12 Hibernate一对多单向关联映射

   这种映射的本质是利用了多对一的关联映射的原理
   多对一关联映射:是在多的一端添加一个外键维护多指向一的关联引用
   一对多关联映射:是在多的一端添加一个外键维护一指向多的关联引用

   也就是说,一对多和多对一的映射策略是一致的,只是站的角度不同

   缺点:
    * 更新student表中的classesid字段时,需要对每一个student发出一个update的sql,
      来更新classesid字段
    * 如果将t_student表中的classesis设置为非空,则不能保存student数据,因为关系是由
       classes维护的,在保存student时,还没有对应的classesid被生成

       
       

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值