什么是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. react做购物车的功能

    父组件 import React, { Component } from 'react' import Lists from '../components/Lists' export default ...

  2. go 1.6 废弃 io/ioutil 包后的替换函数

    go 1.6 废弃 io/ioutil  包后的替换函数 io/ioutil 替代 ioutil.ReadAll -> io.ReadAll ioutil.ReadFile -> os.R ...

  3. 夜莺官方文档优化第一弹:手把手教你部署和架构讲解,消灭所有部署失败的 case!干!

    前置说明 各种环境的选型建议 Docker compose 方式:仅仅用于简单测试,不推荐在生产环境使用 Docker compose,升级起来挺麻烦的,除非你对 Docker compose 真的很 ...

  4. flutter 结合 springBoot 完成登录 注册 功能

    后端接口 前端调用接口代码 import 'package:dio/dio.dart'; import 'package:flutter/material.dart'; import '../page ...

  5. ISO pod 使用

    pod 安装 相关依赖包 新建podfile 文件 pod init 编辑podfile文件添加第三方库 // pod '第三方依赖库名', '版本号' pod 'SDWebImageSwiftUI' ...

  6. Java泛型对象在http请求和响应对象中的封装

    Java泛型对象在http请求和响应对象中的封装 public class MySystemBaseResVo<T> { //注意:类的后面需要带上<T>,否则数据无法封装 p ...

  7. mysql自带test数据库表的默认属性:Collation latin1_swedish_ci 更新为utf8_general_ci,解决MYSQL数据库乱码

    ## mysql自带test数据库表的默认属性:Collation latin1_swedish_ci 更新为utf8_general_ci,解决MYSQL数据库乱码USE test;CREATE T ...

  8. const 和 volatile 指针

    关键字 const 和 volatile 规定了指针的处理方式: const 规定指针在初始化后是受保护的,不能够再修改. volatile 规定了变量的值能够被用户应用程序外部的操作所修改. 因此, ...

  9. float与byte[]互相转换

    今天想利用socket发送数据,可是float类型该怎么发送呢?我的想法是先转换成byte[]型,接收之后再转换回来. float类型是4个字节,而byte是1个字节,所以需要转换成为byte[]的类 ...

  10. 实训day2

    HTML基本介绍 编辑网页的语言,超文本标记语言,是迄今为止网络上应用最为广泛的语言,也是抱成网页文档的主要语言.HTML文本是由HTML命令组成的描述性文本,HTML命令可以说明文字.图形.动画.声 ...