【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;
    }
}