Hibernateday01学习笔记

Hibernate [冬眠]
   作用:JDBC在访问数据库的时候会产生很多的冗余代码,影响程序员的开发效率。为了简       化访问数据库的操作

对于程序而言最重要的是? 数据

数据有怎么样的表现形式?
  1.内存[临时数据 transient]
    Java 中的Object 是一种临时数据
  2.数据库
    表【table】的形式 持久化数据



在java开发|web开发  就是 由 Object<---->table
    有Object 到 table 或者由 table 到 Object
 
ORMapping    Object Relationship(关系,泛指数据库) Mapping
  1. java类        表
      User         t_user    一个类对应一张表
      Object       row       表当中的每一行数据代表一个对象
      Property     column    表当中的每一个列对应对象中的属性
      id           主键      判断对象和数据库中的关系是唯一的,id不是对象的固有属性
                             仅仅只是一个对应关系
   配置文件:映射文件【方便维护】 
  
ORMapping框架
  Hibernate   通用的CRUD(增删改查)方法
  toplink  
 
 
Hibernate : www.hibernate.org
    1.hibernate目录结构
       eg         一个hibernate的拍卖行的案例
       etc       hibernate的配置文件
       grammar   HQL的语法

Hibernater的开发
   1.搭建hibernate的环境建立一个java工程
      1.导入jar包
         hibernate3.jar
     lib *
         ojdbc4.jar [数据库驱动jar包]
      2.导入配置文件
         1.导入与运行环境相关的配置文件
        hibernate.cfg.xml--->etc目录中
            位置在src目录下
         1.配置与数据库连接相关的配置参数
         2.与自身属性相关的配置
         3.对于映射文件的注册
      3.提供映射关系的配置文件
           1.配置文件的名称  xxx.hbm.xml
       2.配置文件的位置  任意
         导入DTD 约束
            在hibernate3.jar-->org.hibernate-->hibernate-mapping-3.0.dtd

Hibernate 核心API
  1.Configuration 配置 作用读取配置文件 获得SessionFactory
  2.SessionFactory -->创建Session,重量级资源
  3.Session-->负责java程序与数据库的交互,提供一套CRUD的方法[轻量级]
     Session如何与数据库进行连接:Session内部封转了Connection对象
       |-Transaction 专门处理事务 所有的hibernate的程序必须控制事务
       |-Query 复杂的查询(非主键的查询)

Hibernate的开发 ORMapping的开发   O R M
  1 O Object 提供对象
    注意:对象的主键类使用封转类 id integer
  2 R 数据库 建表
  3 M 映射文件的配置
  4 在hibernage.cfg.xml中为映射文件进行注册    
  5 采用Hibernate的核心API进行编程处理

  org.hibernate.MappingException: Unknown entity: zx.hb.day1.pojo.User
     说明映射文件没有注册
 

 Session.save(Obect);//插入数据
  increment主键生成器的原理
     select  max(t_id) from g_user
     从操作的表当中查询出最大的主键值,然后将该值+1作为新的主键值

 Session.get(class,pk);//通过session查询数据依赖于主键

 删除
  先查询在删除:
    1.确保该对象的存在
    2.获得该对象的主键值
 Object ojb=session.get(Object.class,pk);
 Session.delete(Object);

 修改
   先查询再修改
     1.确保对象的存在
     2.获得该对象的主键值
    Object obj=(Object)session.get(Object.class,pk);
    obj.setXXX(xxxx);//在内存中对数据进行修改
    session.update(obj);

创建工具类,封装Session
  1.SessionFactory 工厂类
   1).创建Session
   2).进行二级缓存
     SessionFactory是重量级资源特点:功能非常强大,占用的内存就多
        由于重量级资源占用内存,不能频繁的创建,只创建一个,就会引发线程安全问题,
    重量级资源一般来讲是线程安全.运行多线程访问。
  2.Session 代表了用户的操作
      1.提供了一套CRUD的方法 save(Object); update(Object); delete(Object);   
                              get(calss,pk);
      2.内部封了Connection
       Session:轻量级资源(每一个用户独享,消耗内存很少)

模拟一个注册
  ReigstAction-->UserBiz             -->UserDao
                 register(User u )          save(User u);
   应该在同一个Session当中,在同一个线程中完成注册
  对于事务的控制在Biz层进行处理
     应为biz可能会处理多个Dao层的数据,事务的原子特性【要么成功要么失败】,事务的处理必须在Biz层处理
 
 事务的特性:原子性,持久性,一致性,隔离性
 
Object ----> Thread对象
  ThreadLocal 工具类:将一个对象存入到线程的Map当中
         key:  当前ThreadLocal对象
     value:存入的值/对象

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章