1.0、Hibernate-快速入门初体验

news2024/11/24 22:47:39

1.0、Hibernate-快速入门初体验

        Hibernate mybatis 一样是 ORM (Object Relation Mapping) 对象关系映射框架,将面向对象映射成面向关系。

如何使用呢?

        1、导入依赖;

        2、创建 Hibernate 配置文件;

        3、创建实体类;

        4、创建实体类 - 关系映射文件;

        5、调用 Hibernate API 完成操作;

具体操作,如下所示:

第一步:打开 IDEA 创建一个 maven 项目,连接好 mysql 数据库,创建数据库 hibernate ,创建好一张表 people【 id 主键要设置为自增】如下图所示->

 

第二步:导入相关的 pom 依赖,依赖如下:

    <dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.10</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.19</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>5.4.10.Final</version>
        </dependency>
    </dependencies>
<!--    IDEA工程中默认在Java文件夹下的 xml文件是读取不到的,所以加上以下配置让他能够读取到 Java 文件夹下的 xml 文件-->
    <build>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
        </resources>
    </build>

第三步:在 resource 文件夹下创建 hibernate.cfg.xml 文件,这个配置文件的名字不要乱改。 

        核心配置:session-factory;

        SessionFactory:针对单个数据库映射经过编译的内存镜像文件,将数据库转换为一个 Java 可以识别的镜像文件;

        构建 SessionFactory 非常耗费资源,所以通常一个工程只需要创建一个SessionFactory;

这里有些语句会报红是因为有些文件还没创建,没关系接着步骤往下走即可,配置文件如下所示->

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>

    <session-factory>
    <!--数据源配置,数据库账号密码配自己的-->
        <property name="connection.username">root</property>
        <property name="connection.password">root</property>
        <property name="connection.driver_class">com.mysql.cj.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://localhost:3306/hibernate?useUnicode=true&amp;characterEncoding=UTF-8&amp;serverTimezone=UTC</property>

<!--        C3P0 连接池-->
<!--        每次不够用的时候,自增10个-->
        <property name="hibernate.c3p0.acquire_increment">10</property>
<!--        多少时间之后会自动 -> 释放资源-->
        <property name="hibernate.c3p0.idle_test_period">10000</property>
<!--        超时时间-->
        <property name="hibernate.c3p0.timeout">5000</property>
<!--        最大连接数-->
        <property name="hibernate.c3p0.max_size">30</property>
<!--        最小连接数-->
        <property name="hibernate.c3p0.min_size">5</property>
<!--        sql的最大线程数-->
        <property name="hibernate.c3p0.max_statements">10</property>

<!--        设置数据库方言,现在我们用的是mysql所以设置mysql的方言,这样 hibernate 可以根据 mysql 的语法去生成执行语句-->
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>

<!--        打印SQL语句,方便排查-->
        <property name="show_sql">true</property>
<!--        格式化SQL语句,方便排查-->
        <property name="format_sql">true</property>
<!--        是否自动生成数据表-->
        <property name="hibernate.hbm2ddl.auto">update</property>

<!--        注册实体关系映射文件-->
        <mapping resource="com/hkl/pojo/People.hbm.xml"></mapping>
    </session-factory>

</hibernate-configuration>

第四步:在com.hkl.pojo文件夹下创建 People.java 实体类文件 ->

People.java 文件如下所示->

package com.hkl.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class People {
    private Integer id;
    private String name;
    private String sex;
}

第五步:将 实体类 和 数据库表 关系映射关联起来,在 com.hkl.pojo 文件夹下创建一个 People.hbm.xml 文件 ->

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
        <!--这里将实体类 People 和表 people 关联映射起来-->
    <class name="com.hkl.pojo.People" table="people">
        <!--键映射,数据库表中的主键字段用 id 配置,而 name = "id" 这个 id 指的是 Customer 实体类中的 id 属性名-->
        <id name="id" type="java.lang.Integer">
            <!--数据库表 id 主键字段配置-->
            <column name="id"></column>
            <!--设置主键自增方式 -> identity-->
            <generator class="identity"></generator>
        </id>
        <property name="name" type="java.lang.String">
            <column name="name"></column>
        </property>
        <property name="sex" type="java.lang.String">
            <column name="sex"></column>
        </property>
    </class>

</hibernate-mapping>

第六步:将关联映射文件注册到 hibernate 配置文件当中【这句代码在之前的配置文件中已经配置过了,这里主要是强调一下他的作用】 ->

<!--        注册实体关系映射文件-->
        <mapping resource="com/hkl/pojo/People.hbm.xml"></mapping>

 

好了到这里配置基本结束,我们来测试一下能否操作数据库 ->

第一步:在 test 文件夹下创建一个 Test.java 文件,如下所示 ->

import org.hibernate.cfg.Configuration;

public class Test {
    public static void main(String[] args) {
//        创建 Configuration
        Configuration configuration = new Configuration().configure();
        System.out.println(configuration);
    }
}

        可以看到没有报错,假设我们的 hibernate 配置文件名不叫 hibernate.cfg.xml 的话那么会报错说找不到 hibernate.cfg.xml 这个文件;
        如果就是不想用这个名字,那么我们只需要在 configure() 中指定这个配置文件的名字即可,如下所示->

Configuration configuration = new Configuration().configure("指定配置文件名.xml");

第二步:在成功获取到 configuration之后,再去获取 SessionFactory 和 Session 对象->

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class Test {
    public static void main(String[] args) {
//        创建 Configuration
        Configuration configuration = new Configuration().configure();
//        获取 SessionFactory
        SessionFactory sessionFactory = configuration.buildSessionFactory();
//        获取 Session 对象
        Session session = sessionFactory.openSession();
    }
}

第三步:使用 hibernate API 去完成数据操作 ->

import com.hkl.pojo.People;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class Test {
    public static void main(String[] args) {
//        创建 Configuration
        Configuration configuration = new Configuration().configure();
//        获取 SessionFactory
        SessionFactory sessionFactory = configuration.buildSessionFactory();
//        获取 Session 对象
        Session session = sessionFactory.openSession();
        People people = new People();
        people.setName("小澜");
        people.setSex("男");
        session.save(people);
        session.beginTransaction().commit();
        session.close();
    }
}

可以看到后台没有报错,并打印出了 sql 语句,最后查看数据库中的数据确实添加成功~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/100132.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Allegro172版本多人协同在线设计操作指导

Allegro172版本多人协同在线设计操作指导 Allegro升级到172版本,可以支持多人协同设计,并且实时同步,具体操作如下 首先用户需要在同一个局域网下,并且Allegro172的版本必须一致,比如都是S082的版本 第一个用户打开PCB,选择Symphony Team design 选择 Start Symphony …

2022年度总结

自我介绍 大家好&#xff0c;我又回来了&#xff01;我在一年之前在 CSDN 写了第一篇文章&#xff0c;到现在也有一年时间了。这次回来呢&#xff0c;也是因为 CSDN 官方发的消息&#xff0c;让写一篇年度总结的文章。在离开的这几个月里&#xff0c;主要是因为工作繁忙&#…

ASO优化:总结APP被下架的5点原因

随着苹果的App Store的监管力度的不断加强&#xff0c;每个APP都会有被下架的风险&#xff0c;而对于开发者来说&#xff0c;APP被下架是一件很严重的事情&#xff0c;不仅会造成用户的流失&#xff0c;还会降低用户对APP 的信任。所以&#xff0c;我们要了解APP被下架的原因&a…

【大数据技术Spark】Spark SQL操作Dataframe、读写MySQL、Hive数据库实战(附源码)

需要源码和依赖请点赞关注收藏后评论区留言私信~~~ 一、Dataframe操作 步骤如下 1&#xff09;利用IntelliJ IDEA新建一个maven工程&#xff0c;界面如下 2&#xff09;修改pom.XML添加相关依赖包 3&#xff09;在工程名处点右键&#xff0c;选择Open Module Settings 4&a…

整数的大小端序

在存储整数时&#xff0c;一般按字节为逻辑单位进行存储&#xff0c;有“小端序”和“大端序”之分。小端序&#xff08;little-endian&#xff09; 是指将表示整数的低位字节存储在内存地址的低位&#xff0c;高位字节存储在内存地址的高位。如果将整数 1982062410 存储至内存…

【CANN训练营第三季】2022年度第三季新手班之昇腾AI入门课

本次参加CANN训练营&#xff0c;本来我报名的是进阶班课程&#xff0c;再看一遍新手班&#xff0c;学习一下目前CANN的最新进展也是不错的&#xff0c;巩固一下。 视频课程大家可以从这里看到 &#xff08;1&#xff09;【CANN训练营第三季】- 昇腾AI入门课&#xff08;上&am…

使用Keepalived工具实现集群节点的高可用

GreatSQL社区原创内容未经授权不得随意使用&#xff0c;转载请联系小编并注明来源。GreatSQL是MySQL的国产分支版本&#xff0c;使用上与MySQL一致。作者&#xff1a;蟹黄瓜子文章来源&#xff1a;社区投稿 1.前言 在集群当中离不开的一个词就是是高可用&#xff0c;用本文来…

OpenWrt + 每步科技DDNS 实现ipv6动态域名解析方法

其实好几个月前我就已经把这个动态域名设置好了&#xff0c;后面重新刷了系统&#xff0c;忘记保存&#xff0c;又得重新再来&#xff0c;这次把过程记录一下&#xff0c;免得下次再从头百度。 工具 刷好openWrt的路由器一个每步科技注册的域名&#xff08;我为什么选择这个&…

数字电子技术(八)D/A和A/D转换

D/A和A/D转换概述D/A转换A/D转换例题练习模拟信号&#xff1a;在时间与数值上都连续 数字信号&#xff1a;在时间与数值上都离散 概述 D/A转换&#xff1a;数字信号——模拟信号 &#xff08;D/A转换器简称DAC&#xff09;A/D转换&#xff1a;模拟信号——数字信号 &#xff0…

修改物料编号格式及长度

修改物料编号格式及长度(OMSL) 路径&#xff1a;IMG--后勤常规--物料主数据--基本设置--定义物料编号的输出格式

毕业设计 - 基于JSP的合同信息管理系统【源码+论文】

文章目录前言一、项目设计1. 模块设计数据库设计2. 实现效果二、部分源码项目源码前言 今天学长向大家分享一个 java web jsp 项目: 基于JSP的合同信息管理系统 适合用于毕业设计、课程设计 一、项目设计 1. 模块设计 需求分析是从客户的需求中提取出软件系统能够帮助用户…

java互联网医院系统HIS源码带本地搭建教程

技术架构 技术框架&#xff1a;SpringBoot MySql MyBatis nginx Vue2.6 原生APP 运行环境&#xff1a;jdk8 IntelliJ IDEA maven 宝塔面板 Android Studio 文字本地搭建教程 下载源码&#xff0c;小皮面板安装mysql5.7数据库&#xff0c;创建一个新数据库&#xff0c;…

引力波探测,冷冻电镜研究:两项诺奖GPU功不可没

我们的日常工作固然重要&#xff0c;但并非每一份重要的工作都能够助力他人获得诺贝尔奖。然而&#xff0c;就在2017年10月&#xff0c;GPU 计算便两度成为了助力获得诺贝尔奖的幕后英雄。 三名美国物理学家Rainer Weiss、Barry Barish和Kip Thorne因探测到了爱因斯坦百年前预测…

从“跨域融合”到“中央计算”,这家Tier1如何率先抢跑?

全球汽车产业已经进入以智能化为主旋律的下半场竞赛&#xff0c;同时整车电子电气架构也在加速跨入集中式电子电气架构时代。 在这样的背景之下&#xff0c;智能驾驶域控制器成为了当前最大的增量市场之一&#xff0c;由此也带动了上游芯片、OS、中间件等域控相关软硬件产品的…

第13讲:Python列表对象中元素的删操作

文章目录1.列表元素删操作的方法2.调用remove方法一次删除一个指定的元素3.调用pop方法一次只删除一个指定索引的元素3.1.使用pop方法删除列表中索引为2的元素3.2.使用pop方法不指定索引3.3.使用pop方法指定的索引不存在时同样也会抛出错误4.使用del语句一次至少删除一个元素4.…

nodejs+vue082新生入学管理系统-vscode msyql

一章 绪论 3 1.1课题背景 3 1.2课题研究的目的和意义 3 1.3 研究现状 4 1.4论文所做的主要工作 4 第二章 技术介绍 5 2.1 B/S结构 5 2.2MySQL介绍 5 2.3MySQL环境配置 6 第三章 系统分析与设计 8 3.1系统说明 8 3.2系统可行性分析 8 3.2.1 技术可行性 8 3.2.2 经济可行性 8 3…

Vue3——路由和嵌套路由的使用

路由的作用 用来在前端的页面实现页面的切换&#xff0c;比如下图中acwing的页面应该就是采用了路由来设计导航栏&#xff0c;在每一次点击不同选项时只有网址后面的索引发生变化&#xff0c;网页并没有刷新 路由的使用方法&#xff1a; 根据导航栏处的跳转的页面的不同&…

如何创建vue项目

一. 环境准备 1.安装node.js 推荐地址&#xff1a;Node.js 2.检查是否安装完成&#xff1a;输出版本号说明安装成功 二.搭建vue环境 1.全局安装vue/cli 推荐地址&#xff1a;快速上手 | Vue.js 2.在命令输入 npm install -g vue/cli 如果使用yarn global add vue/cli 需要…

JVM--基础--19.7--垃圾收集器--G1

​ JVM–基础–19.7–垃圾收集器–G1 1、结构图 ​ 2、G1收集器(面向服务端) 2.1、特点 2.1.1、并行于并发 使用多个CPU(CPU或者CPU核心)来缩短stop-The-World停顿时间&#xff0c;其他需要停顿Java线程执行的GC动作&#xff0c;G1收集器仍然可以通过并发的方式让java程序…

​汽车芯片的可靠性设计:控制亚稳态,提升稳定性

【作者简介】Dr. Roy 复睿微 IC后端工程师&#xff0c;南开大学与韩国首尔国立大学联合培养博士。博士期间发表高水平学术期刊论文多篇&#xff0c;其中一作一区封面文章2篇&#xff1b;授权发明专利5项。同时&#xff0c;在先进工艺大芯片的静态时序分析、芯片设计流程提效优化…