什么是Hibernate?

- Hibernate是我们JavaEE开发中的DAO层框架

- DAO【Data Access Object】 数据访问对象层

- 在DAO层,访问数据库,进行CRUD操作

- Hibernate是对JDBC的封装,最大的好处就是不用手写SQL


ORM思想?

即:Object Relation Mapping 对象关系映射

- 数据库结构和Java语言结构形成关系映射

- 一张数据表对应了一个JavaBean【实体类Entity or Pojo】

- 一张表的一个字段【列】对应了JavaBean的一个属性

- 一张表的一个记录对应了JavaBean的一个实例


什么是POJO、Entity、JavaBean?

- POJO(Plain Ordinary Java Object) 普通Java对象

- Entity 实体的,即实体类

- JavaBean

用于在Java中构建映射数据库的对应结构,

数据库的操作可以被Java程序控制


回顾原生JDBC的操作

import org.junit.Test;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet; /**
* @author ArkD42
* @file Hibernate
* @create 2020 - 05 - 10 - 8:50
*/
public class OriginalJdbc { @Test
public void jdbc() throws Exception { // 注册驱动 MySQL5.0+ 可以不注册了
// Class.forName("com.mysql.cj.jdbc.Driver"); // 创建连接
Connection connection = DriverManager.getConnection(
"jdbc:mysql:///ssm?serverTimezone=Asia/Shanghai",
"root",
"123456"
); // 编写SQL 创建预编译SQL对象并注入
String sql = "SELECT * FROM user;";
PreparedStatement preparedStatement = connection.prepareStatement(sql); // 查询返回结果集,增删改返回结果记录数
ResultSet resultSet = preparedStatement.executeQuery(); // 对查询的结果集进行处理 // 释放资源
preparedStatement.close();
connection.close();
}
}

对结果集的处理最好的办法就是使用ORM对数据表映射出一个Java实体类

我们使用这个类来对应结果集接收数据,以便我们方便的操作和处理

再没有ORM思想的情况下,我们能想到的就是以容器来处理

例如个单个记录的多个字段与值,因为字段是唯一的,值可能重复

那这个特性我们可以是用Map容器来存储一个记录,

如果有若干个结果集记录,我们就对Map再进行一个组合,封装进List容器处理


改正初学时的JDBC工具类:

当时写的是在静态代码块里面,如果连接对象资源释放了,静态连接对象的引用会空指针

所以不能写一个静态连接对象的引用

而是直接写进封装的方法里面获取

package cn.dai.util;

import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties; /**
* @author ArkD42
* @file Hibernate
* @create 2020 - 05 - 10 - 9:04
*/
public class JdbcUtil { static String url ;
static String username;
static String password; static { try {
// Class.forName("com.mysql.cj.jdbc.Driver"); InputStream inputStream = JdbcUtil.class.getClassLoader().getResourceAsStream("jdbc.properties"); Properties properties = new Properties(); properties.load(inputStream); url = properties.getProperty("url");
username = properties.getProperty("username");
password = properties.getProperty("password");
} catch (Exception exception) {
exception.printStackTrace();
}
} public static Connection getConnection(){
try {
return DriverManager.getConnection(url, username, password);
} catch (SQLException sqlException) {
sqlException.printStackTrace();
}
return null;
}
}

持久化

狭义的理解,“持久化”仅仅指把对象永久保存到数据库中

广义的理解,“持久化”包括和数据库相关的各种操作:

保存:把对象永久保存到数据库中。

更新:更新数据库中对象(记录)的状态。

删除:从数据库中删除一个对象。

查询:根据特定的查询条件,把符合查询条件的一个或多个对象从数据库加载到内存中。

加载:根据特定的OID,把一个对象从数据库加载到内存中。

为了在系统中能够找到所需对象,需要为每一个对象分配一个唯一的标识号。

在关系数据库中称之为主键,而在对象术语中,则叫做对象标识(Object identifier-OID).


主流持久化框架:

Hibernate

myBatis

TopLink

OJB

Hibernate  完成对象的持久化操作,允许开发者采用面向对象的方式来操作关系数据库。 消除那些针对特定数据库厂商的 SQL 代码

MyBatis 相比 Hibernate 灵活高,运行速度快 开发速度慢,不支持纯粹的面向对象操作,需熟悉sql语 句,并且熟练使用sql语句优化功能

【Hibernate】01 概述的更多相关文章

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

    目录 Hibernate框架概述 什么是框架 hibernate简介(JavaEE技术三层架构所用到的技术) hibernate是什么框架 ORM hibernate好处 Hibernate基本使用 ...

  2. kafka详解(01) - 概述

    kafka详解(01) - 概述 定义:Kafka是一个分布式的基于发布/订阅模式的消息队列(Message Queue),主要应用于大数据实时处理领域. 消息队列 MQ传统应用场景之异步处理 使用消 ...

  3. Zookeeper详解(01) -概述

    Zookeeper详解(01) -概述 概念 Zookeeper是一个开源的分布式的,为分布式应用提供协调服务的Apache项目. Zookeeper从设计模式角度来理解,是一个基于观察者模式设计的分 ...

  4. HIBERNATE 01

    2017年1月8日 {LJ?Dragon}[标题]Hibernate基础知识简介_01 {LJ?Dragon}[Links]Hibernate注解详解 {LJ?Dragon}[Daily]特种部队2, ...

  5. 01 - 概述 VTK 6.0 迁移

    摘要 对vtk版本4和5的管道机制重新架架构的主要目的是:迁移数据对象和算法对象中的管道执行逻辑到一个新集合的类中,我们称这个集合类叫executives.分离数据和执行模型的代码后,可以双双简化修改 ...

  6. Hibernate知识总结(一)——Hibernate原理概述

    一.Hibernate是什么: 它是一个持久化框架,它对JDBC进行了轻量级的封装,简化对数据库的操作,提高开发效率.和另一个持久化框架MyBatis一样,他们操作数据库都是通过一个session对象 ...

  7. 一起学习Hibernate: Hibernate01 —— Hibernate的概述与入门案例

    一 Hibernate的介绍 1 让我们从JDBC与替代它的框架Hibernate进行一下对比. 1.1 JDBC的缺点 1) 代码结构繁琐.每次书写sql语句操作数据库都得需要很多步; 2) 是面向 ...

  8. Redis数据库 01概述| 五大数据类型

    1.NoSQL数据库简介 解决应用服务器的CPU和内存压力:解决数据库服务的IO压力: ----->>> ① session存在缓存数据库(完全在内存里),速度快且数据结构简单: 打 ...

  9. Rhythmk 学习 Hibernate 01 - maven 创建Hibernate 项目之 增删改查入门

    1.环境: Maven :3.1.1 开发工具:Spring Tool Suite 数据库 : Mysql  5.6 2.项目文件结构 文件代码: 2.1 .pom.xml <project x ...

  10. Hive 01 概述、安装配置

    概述 数据仓库:是一个面向主题的.集成的.不可更新的.随时间不变化的数据集合,它用于支持企业或组织的决策分析处理. 数据仓库的结构和建立过程: 数据源 数据存储及管理 ETL Extract 提取 T ...

随机推荐

  1. The solution of CF380C

    problem 希望这篇题解不要明年才审完. 标签:线段树 记录 \(Lsum_p\) 为这个区间有多少个 ( 不能匹配,\(Rsum_p\) 为这个区间有多少个 ) 不能匹配. 对于叶子结点如果是 ...

  2. “Newtonsoft.Json”已拥有为“Microsoft.CSharp”定义的依赖项。

    安装较低版本的Newtonsoft.Json: Newtonsoft.Json官网:https://www.nuget.org/packages/Newtonsoft.Json/ Install-Pa ...

  3. 内部网关协议RIP-路由选择协议

    路由信息协议RIP(Routing Information Protocol)是内部网关协议IGP中最先得到广泛使用的协议,其相关标准文档为RFC1058. 一.RIP基本工作原理 RIP要求自治系统 ...

  4. 阿里云ECS主机自建SNAT,实现没有公网的主机通过有公网的主机访问外网

    目的: SNAT:实现没有公网IP的ECS实例借助有公网的ECS访问外网 实现前提: 有公网的主机与没有公网的主机必须处在同一个VPC安全组(确保两个主机互通才可以) 全程都在有公网的主机上操作 开启 ...

  5. EMQX配置ssl/tls双向认证+SpringBoot项目整合MQTT_真实业务实践

    一.使用docker搭建Emqx 1.拉取emqx镜像 docker pull emqx/emqx:5.7 2.运行 docker run -d --name emqx emqx/emqx:5.7 3 ...

  6. .NET 文件上传服务设计

    .NET文件上传服务设计 前言 在b站学习了一个后端小项目,然后发现这个文件上传设计还挺不错,来实现讲解一下. 项目结构如下: 基于策略+工厂模式实现文件上传服务 枚举 在Model层创建即可 pub ...

  7. UEFI与inf文件

    UEFI与inf文件 背景 学习高通UEFI中的LCD显示框架,看到有些博客对inf文件进行了介绍,因此整理了这方面的一些入门知识. 参考: https://blog.csdn.net/yunfeng ...

  8. uniapp+thinkphp5实现微信扫码支付(APP支付)

    前言 统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返回预支付订单号的接口,目前微信支付所有场景均使用这一接口.下面介绍的是其中APP的支付的配置与实现流程 配置 1.首先登录 ...

  9. C语言的简单学习

    C语言是编译型语言,先编译再运行,通常用gcc进行编译,于是安装了Ubuntu操作系统.至于编辑器,VS Code也能用,先sudo apt install build-essential gdb,再 ...

  10. CF1860

    很失败啊 A 题大力分讨,罚了 \(2\) 次 B 题大力分讨,罚了 \(1\) 次 C 题大力 dp 一发过 然后就睡觉了 感觉 CF 打少了智商掉了,被前几题拖了太久