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