设为首页 加入收藏

TOP

Hibernate学习笔记(一)
2019-09-17 17:34:27 】 浏览:72
Tags:Hibernate 学习 笔记

一、Hibernate简介(网上搜的,理解性地看看)

  1.概念:Hibernate是持久层(数据访问层)的框架,对JDBC进行了封装,是对数据库访问提出的面向对象的解决方案。

  2.作用:使用Hibernate可以直接访问对象,Hibernate自动将访问转换成SQL执行,从而实现简介访问数据库的目的,简化了数据访问层的代码开发。

  3.JDBC、MyBatis对比:

    a)JDBC需要编写大量SQL语句,以及对大量参数赋值。需要手动将ResultSet结果集转换成实体对象;SQL中包含特有函数,无法移植。而Hibernate可以自动生成SQL和参数赋值,自动将ResultSet结果集转换成实体对象,采用一致的方法对数据库操作,移植性好。

    b)MyBatis与Hibernate都对JDBC进行了封装,采用ORM思想解决了Entity和数据库的映射问题。MyBatis采用SQL与Entity映射,对JDBC封装程度比较轻,需要自己写SQL,更具有灵活性;而Hibernate采用数据库与Entity映射,对JDBC封装程度比较重,自动生成SQL,对于基本的操作,开发效率高。

  4.原理:Hibernate框架是ORM思想的一种实现,解决了对象和数据库映射问题。我们可以通过Hibernate提供的一系列API,允许我们直接访问实体对象,然后其根据ORM映射关系,转换成SQL并且执行,从而达到访问数据库的目的。

    ORM:Object Relation Mapping,即对象关系映射,指Java对象和关系数据库之间的映射。

    ORM思想:将对象与数据库数据进行相互转换的思想,不同的框架实现ORM的手段不同,但更多的是采用配置+反射的方式来实现ORM。

  5.框架体系结构

    a)主配置文件,通常为“hibernate.cfg.xml”,用于配置数据库连接参数,框架参数,已经映射关系文件。

    b)实体类,与数据库对应的Java类型,用于封装数据库记录的对象类型。

    c)映射关系文件,通常为“实体类.hbm.xml”,并放置在与实体类相同的路径下。该文件是指定实体类和数据库的对应关系,以及类中属性和表中字段之间的对应关系。

    d)底层API,对映射关系文件的解析,根据解析出来的内容,动态生成SQL语句,自动将属性和字段映射。

二、Hibernate使用

  1.常用API

    Configuration:负责加载主配置文件信息,同时加载映射关系文件信息

/**
到src下找到名称为hibernate.cfg.xml的配置文件,创建对象,把配置文件放到对象中(加载核心配置文件)
*/
Configuration cfg = new Configuration().configure();

//加载指定的核心配置文件
Configuration cfg = new Configuration().configure("com/konrad/hibernate.cfg.xml");

//加载指定的映射配置文件
cfg.addResource("com/konrad/entity/User.hbm.xml");
复制代码

    SessionFactory:负责创建Session对象,根据核心配置文件的配置,在数据库创建对应的表,一个项目只应有一个此对象

private static final SessionFactory sessionFactory;
    
    static{
        try{
            //配置文件的方式
            sessionFactory = new Configuration().configure("hibernate.cfg.xml")  
                    .buildSessionFactory();  
            /* 注解的方式
            sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();   
            */
        }catch (Throwable ex){
            ex.printStackTrace();
            throw new ExceptionInInitializerError(ex);
        }
    }    
复制代码

    Session:数据库连接会话,负责执行增删改操作

    Transaction:负责事务控制

    Query:负责执行特殊查询

  2.使用步骤

    a)导入Hibernate包,以及数据库驱动包。(开发需要的包不知道的自行百度,也可以通过Maven构建)

    b)引入Hibernate主配置文件hibernate.cfg.xml

       - <session-factory>标签要写在<hibernate-configuration>标签内部

    c)创建实体类

    d)创建映射关系文件(也可以通过注解的方式进行映射,这样就不需要xml映射文件)

      - <class>标签中的name属性写的是类的全路径

       - <id>和<property>标签中的name属性写的是实体类中的属性名称

       - <id>和<property>标签中,column可以省略,若省略就是以name属性值生成表的字段名

         - <property>标签中还有一个type属性,用于生成表的字段的类型,但是使用比较少

    e)使用Hibernate API执行增删改查等操作

      f)额外说明:注解方式的应用

     - 如果实体类属性名与表字段名称不同时,要么都注解在属性前,要么都注解在get方法前。

      - 如果实体类属性名和表字段名称统一,可以部分注解在属性前,部分注解在get方法前。

      - 若都不注解,则默认表字段名和属性名一致

      - 若实体类中某个属性不需要存进数据库表,使用@Transient进行注解即可

      - 表名称可以在实体类前进行注解

      - 所有注解都在javax.persistence包下

  3.映射类型

    a)Java类型:映射关系文件中,配置属性和字段关系时,可以在type属性上指定Java类型,用于做Java属性和数据库字段的转换。指定时需要完整的类型名,如java.lang.String。

    b)自定义类型:当某些特殊类型,Java预置类型无法支持,需要自定义一个类来实现,这个类要求实现接口UserType。比如boolean类型,数据库中一般存char(1),存y/n或者t/f,Java预置类型无法支持boolean类型的配置,需要自定义。

    c)Hibernate也提供了一些类型来支持这些映射,提供了7中映射类型,书写时全是小写。

      

三、Hibernate的主键生成方式

   1.sequence:采用序列生成主键,适用于Oracle数据库。

<generator class="sequence">
    <param name="sequence">序列名</param>
</generator>

  2.identity:采用数据库自增长机制生成主键,适用于Oracle之外的其他

首页 上一页 1 2 3 4 5 6 下一页 尾页 1/6/6
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Actor模型浅析 一致性和隔离性 下一篇Failed to load resource: the se..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目