zoukankan      html  css  js  c++  java
  • Hibernate

    Hibernate

    用IOC容器来管理Hibernate的SessionFactory
    让Hibernate使用上Spring的声明式事务

    数据库事务
    事务的概念来自于两个独立的需求:并发数据库访问,系统错误恢复。
    一个事务是可以被看做一个单元的一些列SQL语句的集合。

    ACID
    原子性 事务作为一个整体被执行,要么全部被执行,要么都不执行
    一致性
    隔离性
    持久性

    表的行,记录
    表的列,字段

    ORM框架是对JDBC的封装。

    hibernatetool 插件!


    Configuration 类,读取Hibernate配置文件,生成SessionFactory对象
    SessionFactory 接口,产生Session实例工程。
    Session 接口,用来操作PO。get(),load(),save(),update()。
    Query 接口,对PO进行查询。通过Session的createQuery()生成。
    Transaction 接口,管理Hibernate事务。commit(),rollback(),从Session的beginTransaction()生成。


    1. Spring 整合 Hibernate 整合什么?
    1). 由Spring的IoC容器管理Hibernate的Sessionfactory
    2). 让Hibernate使用上Spring的声明式事务

    2. 整合步骤

    数据源需要配置到IOC容器中,所以在此不用配置
    关联的.hbm.xml,也在IOC容器配置SessionFactory实例时进行配置

    1). 加入Hibernate
    jar包
    添加hibernate的配置文件:hibernate.cfg.xml 配置Hibernate的基本属性,方言,SQL,显示及格式化,生成数据表策略及二级缓存等(也可以不放在这里)
    编写持久化类,以及对应的.hbm.xml文件

    2). 加入Spring
    jar包
    加入Spring的配置文件 配置数据源,配置Hibernate的Sessionfactory实例,Spring的声明式事务


    3). 整合


    hibernate 映射关系

    以Emp & Dep为例

    1. 一对多 Dep为一,Emp为多
    不用Hibernate,建立POJO需要在Emp中加入Dep的主键Dep.id作为外键。在Dep中则不需要任何操作(?)。
    使用Hibernate,在“一”的一方(Dep)加入一个set集合存放"多"的一方(Emp),同时,在"多"的一方添加一个"一"的一方的对象,表示所属的部门。

    映射文件中,"一"的一方,用一个set标签,指明其主键,也就是"多"的外键,标明one-to-many关系;"多"的一方,使用many-to-one标签,指明"一"的属性和主键。

    2. 多对多 Stu为多,Course也为多
    数据库中,多对多的关系,一般使用中间表的方式处理,将多对多转化为两个一对多。
    在<set>标签中,通过table属性指定仅包含两个表主键的中间表,并用<key>指定外键,用于从中间表取数据。

    3. 一对一 Team and Address
    一对一外键关联,看成一对多的一种特殊形式,多方退化成一。
    一对一主键关联,一张表生成主键,另一张通过foreign关键字参考。


    Hibernate的hql语句中,查询的是实体类和实体类的属性,类名和属性名必须一致。

    Hibernate的映射文件可以直接创建,也可以不创建而是用注解。

    many-to-one
    a child entity and a parent
    parent is a FK of child

    @OneToMany
    a parent entity with one or more child entities

    uni-one-to-many
    @OneToMany don't have a mirroring @ManyToOne
    中间表实现
    bi-one-to-many
    There is a @ManyToOne association on the child side
    parent is a FK of child


    uni-one-to-one
    bi-one-to-one

    1. 新建Maven Webapp项目
    2. 设置项目目录结构
    3. 配置web.xml文件,设置DispatcherServlet,
    classpath:springmvc.xml, mapping
    4. 在src/main/java下,配置springmvc.xml,
    设置自动扫描包目录,设置视图解析器
    5. 在同目录下,配置dp.properties,
    配置数据库连接
    6. 配置hibernate.cfg.xml文件
    7. 配置applicationContext.xml文件,配置自动扫描
    包,配置db.properties位置,配置dataSource和
    数据连接池,配置Sessionfactory,配置transactionManager


    领域对象,也被称为实体类,他不一定等同于数据库表,但在简单应用中,它往往拥有对应的数据库表。


    使用基于注解的实体映射方法时,需要在*cfg.xml文件中设置mapping实体。

    双向一对多,一的一方需要设置@JoinColumn

    收刀入鞘吧!凡动刀的,必死在刀下!
  • 相关阅读:
    Linux配置手记及软件FAQ-更新到Fedora core 3
    怎样给多维数组动态分配内存
    mysql管理密码修改及管理权限设定(zz)
    链表处理函数(自己总结)
    二级C笔试试题
    中央广播电视大学19992000学年度第二学期“开放教育(本科)期末考试计算机科学与技术专业数据结构试题
    关闭计算机就这几招
    交大ftp校内搜索引擎终于好了!好!!
    有趣的Baidu。终于发现点比Google好的地方了
    几组重要概念
  • 原文地址:https://www.cnblogs.com/qiuyi116/p/9008819.html
Copyright © 2011-2022 走看看