【Hibernate】01 概述

什么是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语句优化功能

原文地址:https://www.cnblogs.com/mindzone/p/12862181.html