博客
关于我
Hibernate学习(1)- 初识
阅读量:799 次
发布时间:2023-03-21

本文共 3261 字,大约阅读时间需要 10 分钟。

Hibernate入门与实践指南

一、Hibernate基础概念

持久化是Hibernate的核心概念,主要解决了关系型数据库与对象的不匹配问题。简单来说,持久化就是将对象的状态持久化到数据库中,保证数据不会丢失。

1. 持久化的理解

  • 狭义概念:数据存储在物理介质中,永远不会丢失。
  • 广义概念:Hibernate中,CRUD操作都被称为持久化。

2. 加载

在Hibernate中,数据是通过Session从数据库加载到内存中的。Session可以看作是对数据库连接的包装,负责事务管理和缓存。

3. ORM(Object Relation Mapping)

Hibernate是一种ORM框架,通过将POJO与数据库表映射起来,解决了传统 JDBC 在数据库操作中存在的阻抗不匹配问题。其优势主要体现在:

  • 无侵入性:不需要继承或实现Hibernate提供的类或接口。
  • 高效性:减少了大量冗余的数据库操作代码,提高了开发效率。

二、Hibernate的第一堂课

1. 环境搭建

1.1 资源包结构

Hibernate项目通常包含以下几个目录:

  • documentation:相关文档。
  • lib:Hibernate及相关jar包。
  • project:项目源码、模板文件等。

1.2 必要jar包

  • Hibernate核心jar包。
  • 数据库驱动jar包(如MySQL驱动)。
  • 其他依赖jar包。

1.3 配置文件

  • hibernate.cfg.xml:主要配置数据源、连接参数、Hibernate方言等。
  • User.hbm.xml:映射User实体与数据库表。

1.4 数据库创建

创建一个简单的用户表:

CREATE TABLE `user` (  `id` bigint(20) NOT NULL AUTO_INCREMENT,  `name` varchar(255) DEFAULT NULL,  `pwd` varchar(255) DEFAULT NULL,  PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;

1.5 实体类

package com.demo.pojo;public class User {    private Long id;    private String name;    private String pwd;    // setter和getter方法    // ...}

1.6 映射文件

2. 测试与运行

2.1 测试类

package com.demo.test;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.hibernate.boot.MetadataSources;import org.hibernate.boot.registry.StandardServiceRegistry;import org.hibernate.boot.registry.StandardServiceRegistryBuilder;import org.junit.jupiter.api.Test;import com.demo.pojo.User;public class QueryTest {    @Test    public void connectTest() {        // 配置ServiceRegistry并创建SessionFactory        StandardServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().configure().build();        SessionFactory sessionFactory = new MetadataSources(serviceRegistry).buildMetadata().buildSessionFactory();        Session session = sessionFactory.openSession();        // 开始事务        Transaction transaction = session.beginTransaction();        // 保存用户        User user = new User();        user.setName("张三");        user.setPwd("123456");        session.save(user);        // 提交事务        transaction.commit();        // 关闭Session        session.close();    }    @Test    public void queryTest() {        // 获取具体的用户        User user = session.get(User.class, 8L);        System.out.println(user);        // 提交事务        transaction.commit();        // 关闭Session        session.close();    }    @Test    public void saveTest() {        // 同connectTest的逻辑,省略重复代码    }}

三、Hibernate常用配置解读

  • hibernate.cfg.xml
    com.mysql.jdbc.Driver
    jdbc:mysql://localhost:3306/hibernate_test
    json
    123456
    org.hibernate.dialect.MySQL5Dialect
    true
    true
    update

四、Hibernate的核心概念解析

  • Session:与数据库连接相关的工厂,负责事务管理和缓存。
  • Transaction:事务对象,用于管理数据库事务。
  • Query:用于执行数据库查询。

五、注意事项

  • hbm2ddl.auto配置需谨慎处理,避免频繁重建数据库表。
  • 事务管理:确保事务正确提交或回滚,防止数据不一致。
  • 缓存管理:合理配置缓存,避免高并发下的性能问题。

通过以上配置和实践,熟悉了Hibernate的基本使用方法和配置方式,可以为后续的开发工作打下坚实基础。

转载地址:http://xyqfk.baihongyu.com/

你可能感兴趣的文章
Plotly 域变量解释(多图)
查看>>
Plotly 绘制表面 3D 未显示
查看>>
Plotly-Dash 存在未知问题并创建“加载依赖项时出错“;通过使用 Python-pandas.date_range
查看>>
Plotly-Dash:如何过滤具有多个数据框列的仪表板?
查看>>
Plotly:如何为 x 轴上的时间序列设置主要刻度线/网格线的值?
查看>>
Plotly:如何从 x 轴删除空日期?
查看>>
Plotly:如何从单条迹线制作堆积条形图?
查看>>
Plotly:如何以 Root 样式绘制直方图,仅显示直方图的轮廓?
查看>>
Plotly:如何使用 Plotly Express 组合散点图和线图?
查看>>
Plotly:如何使用 plotly.graph_objects 和 plotly.express 定义图形中的颜色?
查看>>
Plotly:如何使用 Python 对绘图对象条形图进行颜色编码?
查看>>
Plotly:如何使用 updatemenus 更新一个特定的跟踪?
查看>>
Plotly:如何使用长格式或宽格式的 pandas 数据框制作线图?
查看>>
Plotly:如何向烛台图添加交易量
查看>>
Plotly:如何在 plotly express 中找到趋势线的系数?
查看>>
Plotly:如何在桑基图中设置节点位置?
查看>>
Plotly:如何处理重叠的颜色条和图例?
查看>>
Plotly:如何手动设置 plotly express 散点图中点的颜色?
查看>>
Plotly:如何结合 make_subplots() 和 ff.create_distplot()?
查看>>
Plotly:如何绘制累积的“步骤“;直方图?
查看>>