Hibernate

Hibernate

Hibernate概述

Hibernate介绍

ORM概述

Hibernate和JDBC的区别

Hibernate体系结构

Hibernate框架搭建

配置XML提示信息

Hibernate配置文件

Hibernate有两个类型的配置文件

  1.  *.hbm.xml            对象关系映射配置文件
  2.   hibernate.cfg.xml   hibernate默认的配置文件

hibernate.cfg.xml配置文件中的信息

  1.hibernate运行的底层信息:数据连接信息,JDBC驱动,数据库Dialect方言等
  2.hibernate映射文件

  注:Hibernate之所以能够和不同的关系型数据库打交道原因是因为他可以配置不同
     的方言,这就是Hibernate跨数据库的原因

*.hbm.xml配置文件中的信息

  1.类和表的对应关系
  2.类里面的属性和表里面字段的对应信息
  3.映射关系(o-t-o) (o-t-m) (m-t-o) (m-t-m)     o:one m:many t:to
  4.主键生成策略
  5.主键与表的主键映射关系

  注:
            1.如果属性对应的是表里面的主键,则使用id标签
            2.如果属性名和列名一致,则可以省略列名的配置

如何使用Hibernate操作数据库

Hibernate.cfg.xml可以改名

读取配置文件
  Configuration configure = new Configuration().configure(); 
    默认名称版  hibernate.cfg.xml

  Configuration configure = new Configuration().configure("xxx.xml");
    改名版       xxx.xml

Hibernate核心文件-五大核心(4个核心接口 1个核心类)

Hibernate运行原理

1.首先通过configuration去加载hibernate.cfg.xml这个配置文件
2.根据配置文件信息去创建sessionFactory,它是线程安全的,是一个session工厂
3.再用sessionFactory创建session,它是线程不安全的,相当于JDBC的Connection
  最后通过session进行数据库各种操作
4.在进行增删改操作的时候通过session打开transaction进行事务的控制

Configuration的描述

    Configuration类从hibernate.cfg.xml加载Hibernate的配置信息。
    Configuration类从hibernate.cfg.xml加载Hibernate的配置信息。
    从而得到以下信息:
    1.Hibernate运行的底层信息:数据库URL,用户名,密码
      JDBC驱动类,数据库方言Dialect(方言),数据库连接池等。
    2.Hibernate映射文件(*.hbm.xml)

    Configuration:负责管理数据库的配置信息
    从而得到以下相关信息:
    1.Hibernate运行的底层信息:数据库的URL、用户名、密码、
      JDBC驱动类、数据库Dialect(方言)、数据库连接池等。
    2.Hibernate映射文件(*.hbm.xml)

    Configuration:负责管理数据库的配置信息
    可用以下两种方式读入xml文件,配置hibernate
     1. 默认加载src下的hibernate.cfg.xml文件
        Configuration cfg=new Configuration().configure();

     2. 从classpath中读取hibernate配置文件
Configuration config=new Configuration().configure("hibernate.cfg.xml”);

SessionFactory的描述

Session的描述

Query的描述

Transaction的描述

Session的常用方法

save()                   添加
update()                修改
saveOrUpdate()      添加或修改
createQuery()    --重点 Query
delete()                  删除
get()                  根据id查询
load()                 根据id查询

Query

  Query是Hibernate的查询接口,用于从数据库存储源查询对象以及控制执行查询过程。Query包装了一个HQL查询语句。

Query接口常用方法

            1.setxxx():用于设置HQL语句中问号或者变量的值
            2.list() 返回查询接口,并把查询接口转换成list对象,
                也可以用query.uniqueResult(),得到单个对象
            3.executeUpdate(); 执行更新和删除语句。
            4.分页查询。
            5.uniqueResult() 返回一个查询结果。   只能没有或者一个

Hibernate HQL

  Hibernate Query Language查询语句,和SQL语句几乎一样

  注意:
    HQL面向对象,SQL面向结构
    HQL中用类型名和属性名,替代了原有的表名和字段名
    HQL语句中类型名和属性名大小写敏感
    HQL查询所有字段值select *  则HQL语句中可以省略
    如果需要join..on表连接,需要建立关联映射关系使用,不支持on子句。
    不要使用数据库提供的字符串函数,日期函数,数值函数,特有函数
    分组函数:max min avg count sum可用
    若只查询实体类中某几个字段,返回的结果是泛型为数组的集合

HQL查询 关键字使用

  distinct
  构造查询
  聚合函数
  between and  一般和 ? 使用,是个占位符,下标设值 | 命名参数设值
  group by   分组
  order by     可以根据多个字段进行排序

Hibernate 三个状态

  1.瞬时 -> 持久
    使用session对象的save() 或saveOrUpdate()方法保存对象后,
    该对象的状态就从游离转为持久
    使用session对象的get() 或 load()方法获取对象后,该对象的状态是持久状态

  2.持久 -> 瞬时
    执行session对象的delete()方法后,对象由原来的持久状态转为瞬时状态,
    此时该对象没有和任何数据库关联。

  3.持久 -> 游离
    执行了session对象的evict(),close(),clear()方法,对象由原来的持久状态变成游离状态。

  4.游离 -> 持久
    重新获取session对象,执行session对象的update() 或 saveOrUpdate()方法
    由游离状态转换为持久状态,该对象再次与session关联。

  5.游离 -> 瞬时
    执行session的delete()方法,对象由游离状态变为瞬时状态。
    对于不再被其他对象引用的游离状态,瞬时状态对象会被java虚拟机按照垃圾回收处理。

Hibernate 可以自动构建根据实体数据表

      在Hibernate.cfg.xml 中添加

      
     
     update

Hibernate主键生成策略

    generator:主键生成策略
                    
    native:(数据库本地生成策略,适用于多个数据库)  天然的
    sequence:序列(用于Oracle)
    increment:(适用于所有数据库) 先查出最大的id,再在此基础上加1,有可能出现并发的问题
    uuid:生成 一个32位,不会重复的主键,可以实现真正的跨数据库,(通常来说应该是String数据类型),适用于所有数据库
    foreign:通常在一对一关联的时候使用,基于外键的主键生成策略           
    自动增长: identity   适用于mysql db2 sql server   一般采用long short int类型

Hibernate注解映射

    @Entity
    @Table
    @Id
    @GeneratedValue
    @Column

Hibernate关联映射

  多对一关系映射
  
                设计表

  一对多关系映射
                
             设计表
                     商品:  g_goods
                                 gid 
                                 gname
                                 price
                                 gdate
                                 tid
                        
                       类型:  g_type
                                  tid
                                  tname

     注解形式:
                 @OneToMany
                 @JoinColumn(name="tid")
                 @Fetch(FetchMode.JOIN)

     映射配置文件方式:
             
               
                  
                  
                


 多对多关系映射
          
              设计表:
                          课程:course
                                 cid
                                 cname   

                          学生:student
                                 sid
                                 sname

                        中间表:cou_stu
                                cid
                                sid

   注解配置:
        /*
         *  @ManyToMany 注解标识Student是多对多的一端
         *  @JoinTable 描述多对多关系的数据表关系
         *  name属性:指定中间表名称
         *  joinColumns 属性:定义中间表和Student表的外键关系
         *  inverseJoinColumns属性:他是另一张表的外键。
         */

        @ManyToMany
        @JoinTable(name="cou_stu",
        joinColumns=@JoinColumn(name="sid"),
        inverseJoinColumns=@JoinColumn(name="cid"))       

  XML配置:
          
            
            
            
            
              

你可能感兴趣的:(Hibernate)