zoukankan      html  css  js  c++  java
  • 【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语句优化功能

  • 相关阅读:
    CoreOS 手动更新
    阿里云ECS安装 CoreOS
    CoreOS 手动升级篇
    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
    Microsoft.NETCore.App 版本不一致导致的运行失败
    设计模式之观察者模式
    设计模式之策略模式
    树的广度优先遍历和深度优先遍历(递归非递归、Java实现)
    设计模式之组合模式
    设计模式之外观模式
  • 原文地址:https://www.cnblogs.com/mindzone/p/12862181.html
Copyright © 2011-2022 走看看