三大框架 之 Hibernate框架概述(概述、配置、核心API)

2021-06-08 05:03

阅读:656

标签:c3p0   ref   net   min   代理   rem   1.0   联网   用户名   

目录

  • Hibernate框架概述
    • 什么是框架
    • hibernate简介(JavaEE技术三层架构所用到的技术)
      • hibernate是什么框架
      • ORM
      • hibernate好处
  • Hibernate基本使用
    • 下载框架
    • Hibernate目录
    • 使用
  • 常见配置
    • 映射配置
    • 核心配置
  • 核心API
    • Configuration
    • SessionFactory
      • sessionFactory简介
      • 配置连接池
      • 查看日志
      • 工具类
    • session
      • session的api

Hibernate框架概述

什么是框架

  • 软件的一个半成品,已经帮你完成了部分功能。
  • 把一些不确定的东西,按照框架要求,达到相应的功能

hibernate简介(JavaEE技术三层架构所用到的技术)

hibernate是什么框架

  • Hibernate是一个开放源代码的对象关系映射框架
  • 它对JDBC进行了非常轻量级的对象封装
  • 它将POJO与数据库表建立映射关系,是一个全自动的orm框架
  • hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。
  • Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用
  • 持久层的ORM框架

ORM

  • Object Relational Mapping(对象关系映射)。
  • 指的是将一个Java中的对象与关系型数据库中的表建立一种映射关系,从而操作对象就可以操作数据库中的表。

hibernate好处

  • 对JDBC访问数据库的代码进行了轻量级封装,简化了数据访问层繁琐重复性的代码,减少了内存消耗,加快了运行效率
  • 是一个基本JDBC的主流持久化框架,很大程度上简化了DAO层的编码工作
  • 性能非常好, 映射灵活性比较好,支持多关系数据库,一对一,一对多,多对多的各种复杂关系
  • 可扩展性强,源代码及API开放,当本身功能不够用时,可以自行编码进行扩展

Hibernate基本使用

下载框架

http://hibernate.org/orm/

https://sourceforge.net/projects/hibernate/files/hibernate-orm/

Hibernate目录

documentation
    Hibernate开发的文档
lib
    Hibernate开发的文档
    required
        Hibernate开发的必须的依赖包
    optional
        Hibernate开发的可选的jar包
project
    Hibernate提供的参考项目

使用

1.创建一个项目

  • 可以Java项目中使用
  • 可以在Web项目中使用都可以

2.引入必须的jar包

  • 数据库的驱动包
  • Hibernate开发必须的Jar包

3.建表

CREATE TABLE `customer` (
              `cust_id` bigint(32) NOT NULL AUTO_INCREMENT COMMENT '客户编号(主键)',
              `cust_name` varchar(32) NOT NULL COMMENT '客户名称(公司名称)',
              `cust_source` varchar(32) DEFAULT NULL COMMENT '客户信息来源',
              `cust_industry` varchar(32) DEFAULT NULL COMMENT '客户所属行业',
              `cust_level` varchar(32) DEFAULT NULL COMMENT '客户级别',
              `cust_phone` varchar(64) DEFAULT NULL COMMENT '固定电话',
              `cust_mobile` varchar(16) DEFAULT NULL COMMENT '移动电话',
              PRIMARY KEY (`cust_id`)
            ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

4.创建ORM类

package ***.***.****;

import lombok.Getter;
import lombok.Setter;
import java.util.HashSet;
import java.util.Set;

@Getter@Setter
public class Customer {
    private Long cust_id;
    private String cust_name;
    private String cust_source;
    private String cust_industry;
    private String cust_level;
    private String cust_phone;
    private String cust_mobile;

    @Override
    public String toString() {
        return "Customer{" +
                "cust_id=" + cust_id +
                ", cust_name='" + cust_name + '\'' +
                ", cust_source='" + cust_source + '\'' +
                ", cust_industry='" + cust_industry + '\'' +
                ", cust_level='" + cust_level + '\'' +
                ", cust_phone='" + cust_phone + '\'' +
                ", cust_mobile='" + cust_mobile + '\'' +
                '}';
    }
}

5.创建Hibernate的核心配置文件

通常叫hibernate.cfg.xml
创建完毕后, 也有一个约束要引入
在org.hibernate包当中可以找到对应的dtd  configuration.dtd
属性名记不住
    在目录提供的project当中有一个etc
    在etc当中 有一个hibernate.properties的文件打开
    打开后,会看到连接各种数据库时需要的属性参数 
需要配置方言
    不同的数据库,使用的语言不一样
    在hibernate当中,sql语句会自动帮你生成
    设置方言,就是设置自动生成的语言是哪个数据库当中的sql
配置核心配置文件要加载哪一个映射
    映射的路径就是上面创建的跟表相对应的配置文件
    把全路径的点,要换成斜杠

6.配置演示
技术图片

?

hibernate.cfg.xml

com.mysql.jdbc.Driverjdbc:mysql:///hibernateroot1234org.hibernate.dialect.MySQLDialecttruetrueupdate

7.创建类执行
技术图片

// 1.加载Hibernate的核心配置文件
Configuration configuration = new Configuration().configure();
// 2.创建一个SessionFactory对象:类似于JDBC中连接池
SessionFactory sessionFactory = configuration.buildSessionFactory();
// 3.通过SessionFactory获取到Session对象:类似于JDBC中Connection
Session session = sessionFactory.openSession();
// 5.编写代码
Customer customer = new Customer();
customer.setCust_name("Myxq2");
customer.setCust_level("12");
session.save(customer);
// 6.资源释放
session.close();
sessionFactory.close();

常见配置

映射配置

class标签
    作用
        建立类与表的映射关系
    属性
        name
            类的全路径
        table
            表名
                类名与表名一致,table可以省略
                如果没有该表,或自动创建一个表
        catalog
            数据库名,可以不写
ID标签
    作用
        建立类中的属性与表中主键的对应关系
    属性
        name
        column
        length
        type
property
    作用
        用于建立类中普通属性与表的对应关系
    属性
        name
            类中的属性名
        column
            表中的字段名
                如果字段名与类中的属性名一致,column是可以省略
        length
            字段的长度
                默认数据库当中已经有长度了
                hibernate是可以根据映射自动建表
                建表是没有设定长度,就使用默认的长度
        type
            类型
            可以不用写,会自动帮你装换
        not-null
            不允许为空
        unique
            唯一的

核心配置

必须配置
    连接数据库的基本的property参数
        驱动类
        url路径
        用户名
        密码
    方言
可选配置
    显示SQL
        hibernate.show_sql
    格式化SQL
        hibernate.format_sql
    自动建表
        hibernate.hbm2ddl.auto
        属性
            none    
                不使用hibernate的自动建表
            create
                无论数据库中是否已经有表,都执行删除原有表,重新创建表的操作
            create-drop
                如果数据库中已经有表,删除原有表,执行操作,删除这个表。如果没有表,新建一个,使用完了删除该表。
                最后数据库中一个表没有,为了做测试用
                把sessionFactory也close掉时才有效果
            update
                如果数据库中有表,使用原有表,如果没有表,创建新表
                更新表结构,如果column没有时会创建新的一列
            validate    
                校验映射和表结构是否一致,不一致就会报错
                如果没有表,不会创建表。只会使用数据库中原有的表
引入映射文件
    

? 提示

  • dtd必须得要联网
  • 如果没有联网,就没有提示
  • 添加外部DTD

技术图片

核心API

Configuration

Hibernate的配置对象
    Configuration 类的作用是对Hibernate 进行配置,以及对它进行启动。
    在Hibernate 的启动过程中,Configuration 类的实例首先定位映射文档的位置,读取这些配置,然后创建一个SessionFactory对象。
    虽然Configuration 类在整个Hibernate 项目中只扮演着一个很小的角色,但它是启动hibernate 时所遇到的第一个对象。
    通过这个对象去加载它里面的配置
    把里面的数据内容或得到,才能进行后面的工作
作用
    1.加载核心配置文件
        核心配置文件是属性文件
            直接configuration cfg = new configuration()
            名称为:hibernate.properties
        核心配置文件是一个xml
            名称为:hibernate.cfg.xml
            1.configuration cfg = new configuration();
            2.cfg.config()
    2.加载映射文件
        属性文件是没有办法加载映射
        可以通过config加载映射文件
        configuration.addResource("映射文件的全路径");

SessionFactory

sessionFactory简介

SessionFactory接口:SessionFactory接口负责初始化Hibernate。
并负责创建Session对象。
需要注意的是SessionFactory并不是轻量级的,因为一般情况下,一个项目通常只需要一个SessionFactory就够,
当需要操作多个数据库时,可以为每个数据库指定一个SessionFactory。
内部维护了Hibernate的连接池和Hibernate的二级缓存
一个项目只需要创建一个就行了,因为里面有连接池,连接池创建一个就可以了

配置连接池

  • 了解即可,以后会使用spring进行整合
  • C3P0

? 引入C3P0的jar包
? 添加C3P0的配置信息
?

org.hibernate.connection.C3P0ConnectionProvider5201203000

查看日志

把log4j.preperties放到src下
结构
? 输出源

  • console控制台
  • file文件

? 级别

error
    只显示error信息
warn
    显示warn  error信息,比自己严重的信息
info
    会显示 info debug  trace级别的信息
debug
    调试信息,会把上面的都显示
trace
    栈信息

工具类

  • 一个项目只需要创建一个就行了,因为里面有连接池,连接池创建一个就可以了
  • 通过一个工具类来获取,只需要创建一次

技术图片

session

  • 代表的是hibernate与数据库的连接对象
  • 与数据库交互的桥梁,通过它来完成与数据库的增删改查的工作

session的api

保存

? save(Object obj)

查询

get(T.class,id)
? 1.查询之后,返回的是真实对象本身
? 2.没有查询到指定的id,返回的是一个空值
技术图片

load(T.class,id)
? 1.查询之后返回的是一个代理对象,使用的是第三方的代理机制,javassist.jar
? 2.没有查询到结果直接报一个异常

技术图片

修改

void update(Object obj)
? 直接创建对象修改

  • 如果没有指定其它的字段,会把其它的字段设置为null
  • 不建议使用

技术图片

? 查询之后再修改

  • 修改了某一个字段,不会把其它的字段设置为null

删除

void delete(Object obj)
? 直接创建对象删除(不支持级联删除)

技术图片

? 查询之后再删除(支持级联删除)

技术图片

保存或更新

void saveOrUpdate(Object obj)
? 没有设置id,是保存的操作
? 设置了id是修改的操作,如果设置的id没有,就会报错

技术图片

查询所有

使用HQL的方式

? HQL:Hibernate Query Language 面向对象的查询语言
? Query query = session.createQuery("from Customer");
? List list = query.list()
技术图片

支持SQL语句的方式

? SQLQuery query = session.createSQLQuery("sql语句");
? List query.list();

技术图片

三大框架 之 Hibernate框架概述(概述、配置、核心API)

标签:c3p0   ref   net   min   代理   rem   1.0   联网   用户名   

原文地址:https://www.cnblogs.com/mumuyinxin/p/10708201.html


评论


亲,登录后才可以留言!