我的Hibernate学习记录(一)

Hibernate框架深入学习资料大全 本文还有配套的精品资源,点击获取 简介:Hibernate是一个广泛使用的对象关系映射(ORM)框架,它让Java开发者能以面向对象的方式操作数据库。本资料包提供了全面的学习资源,覆盖Hibernate从基础到高级的各个方面。涵盖了实体映射、会话管理、事务控制、查询语言以及性能优化等多个关键点。适合不同经验层次的开发者进行学习和参考。 1. ORM框架概念与Hib... 阅读详情

之前已经过滤一下hibernate的简单的用法,但是近期有点时间,所以重新看下视频,敲下代码,翻下笔记,写博客与大家分享一下。 

hibernate简介

Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。

来自百度百科

我对hibernate的看法

其实对于很多的概念,比如什么jpa orm之类的刚刚开始入门的时候可以说是让我自己头晕,天花乱坠的解释触不及防,当我使用了hibernate之后我也就渐渐的了解orm,刚刚入门我就觉得自己先不要太过于深究了,框架就拿来用就行了。
用了之后发觉hibernate真的挺好,节省了我们的很多时间,不用程序员自己编写SQL语句,而是通过对象的形式去操作数据库,当然还有就是一些需要配合HQL的地方,个人感觉蛮好的。
不过以对象的形式去映射表,用对象操作数据库,SQL语言的生成掌握在hibernate的手中也暴露了一些问题,你怎么去控制它生成的SQL等等等

创建项目、搭建环境

现在开始搭建我们的开发环境,这里我使用的是maven项目
项目结构
项目结构图

如果没有尝试过maven,可以在博客上搜一下,然后配置一下,你会爱上它的
这里我在porm.xml中引入了相关的依赖

<dependencies>
        <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>5.2.10.Final</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.43</version>
        </dependency>

    </dependencies>

通过添加了以上的依赖,jar已经就自动的添加到了项目中了,所以现在剩下的就是编码和配置了

生成pojo(java对象)并写映射文件

Customer对象
别问我这是哪里来的,直接拿来用一下就行了

public class Customer {

    /*
     * CREATE TABLE `cst_customer` (
      `cust_id` BIGINT(32) NOT NULL AUTO_INCREMENT COMMENT '客户编号(主键)',
      `cust_name` VARCHAR(32) NOT NULL COMMENT '客户名称(公司名称)',
      `cust_source` VARCHAR(32) DEFAULT NULL COMMENT '客户信息来源',
      `cust_industry` VARCHAR(32) DEFAULT NULL COMMENT '客户所属行业',
      `cust_level` VARCHAR(32) DEFAULT NULL COMMENT '客户级别',
      `cust_linkman` VARCHAR(64) DEFAULT NULL COMMENT '联系人',
      `cust_phone` VARCHAR(64) DEFAULT NULL COMMENT '固定电话',
      `cust_mobile` VARCHAR(16) DEFAULT NULL COMMENT '移动电话',
      PRIMARY KEY (`cust_id`)
    ) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
     */
    private Long cust_id;

    private String cust_name;
    private String cust_source;
    private String cust_industry;
    private String cust_level;
    private String cust_linkman;
    private String cust_phone;
    private String cust_mobile;
    public Long getCust_id() {
        return cust_id;
    }
    public void setCust_id(Long cust_id) {
        this.cust_id = cust_id;
    }
    public String getCust_name() {
        return cust_name;
    }
    public void setCust_name(String cust_name) {
        this.cust_name = cust_name;
    }
    public String getCust_source() {
        return cust_source;
    }
    public void setCust_source(String cust_source) {
        this.cust_source = cust_source;
    }
    public String getCust_industry() {
        return cust_industry;
    }
    public void setCust_industry(String cust_industry) {
        this.cust_industry = cust_industry;
    }
    public String getCust_level() {
        return cust_level;
    }
    public void setCust_level(String cust_level) {
        this.cust_level = cust_level;
    }
    public String getCust_linkman() {
        return cust_linkman;
    }
    public void setCust_linkman(String cust_linkman) {
        this.cust_linkman = cust_linkman;
    }
    public String getCust_phone() {
        return cust_phone;
    }
    public void setCust_phone(String cust_phone) {
        this.cust_phone = cust_phone;
    }
    public String getCust_mobile() {
        return cust_mobile;
    }
    public void setCust_mobile(String cust_mobile) {
        this.cust_mobile = cust_mobile;
    }
    @Override
    public String toString() {
        return "Customer [cust_id=" + cust_id + ", cust_name=" + cust_name + "]";
    }

}

customer.hbm.xml是一个关于对象的映射文件,它解释了对象中的一些属性在数据库中的表示方式,文件有一定的命名格式,就是后缀需要使用.hbm.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping package="cn.lger.domain">
    <!--声明对象Customer和表cst_customer是关联的,当然了这不是必须的-->
    <class name="Customer" table="cst_customer">
        <!--
        声明表中的每一个字段对应的对象中的属性
        除了id其他的为非必须的
        -->
        <id name="cust_id" column="cust_id">
            <generator class="increment"/>
        </id>

        <property name="cust_name" column="cust_name" />
        <property name="cust_source" column="cust_source" />
        <property name="cust_industry" column="cust_industry" />
        <property name="cust_level" column="cust_level" />
        <property name="cust_linkman" column="cust_linkman" />
        <property name="cust_phone" column="cust_phone" />
        <property name="cust_mobile" column="cust_mobile" />
    </class>
</hibernate-mapping>

配置hibernate.cfg.xml

现在接下来就是配置hibernate的配置文件,这里也是有命名规则的,就是后缀需要用.cfg.xml,并且将hibernate.cfg.xml放置于根目录classpath下(src),至于是为什么这么做,在测试中的注释有解释

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

<hibernate-configuration>
    <!--一个配置文件中仅有的一个sessionFactory-->
    <session-factory>
        <!--连接数据库的基本操作-->
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.connection.password">root</property>
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate_base</property>
        <!--
        hibernate.hbm2ddl.auto这个参数配置是在hibernate启动的时候对于表的操作的措施

        create      自动建表.每次框架运行都会创建新的表.以前表将会被覆盖,表数据会丢失.(开发环境中测试使用)
        create-drop 自动建表.每次框架运行结束都会将所有表删除.(开发环境中测试使用)
        update      自动生成表.如果已经存在不会再生成.如果表有变动.自动更新表(不会删除任何数据).
        validate    校验.不自动生成表.每次启动会校验数据库中表是否正确.
        -->
        <property name="hibernate.hbm2ddl.auto">update</property>

        <!--下列为非必须配置,只是为了开发方便-->
        <!--hibernate.show_sql为true的时候可以在控制台打印出sql-->
        <property name="hibernate.show_sql">true</property>
        <!--hibernate.format_sql为true可以在打印sql的时候格式化,不然sql就是一行,不利于我们观看-->
        <property name="hibernate.format_sql">true</property>

        <!--加入映射文件-->
        <mapping resource="customer.hbm.xml"/>
    </session-factory>
</hibernate-configuration>

运行测试

接下来我创建了一个测试类,用于测试是否成功运行

public class TestInsertCustomer {

    @Test
    public void test01(){

        Configuration configuration = new Configuration();
        //初始化hibernate的配置,这里默认的是配置根目录下的hibernate.cfg.xml
        //如果不想用这个函数,或者说不想将配置文件放于根目录可以使用configure(String resource)或configure(URL url)....
        configuration.configure();
        //从会话工厂中拿取session
        SessionFactory sessionFactory = configuration.buildSessionFactory();
        //打开会话
        Session session = sessionFactory.openSession();
        //开启事务
        Transaction transaction = session.beginTransaction();
        //操作数据库部分
        Customer customer = new Customer();
        customer.setCust_name("张三");
        customer.setCust_mobile("1231222");
        //将customer保存到数据库
        session.save(customer);

        transaction.commit();
        session.close();
        sessionFactory.close();
    }
}

当然了,这里可能会有疑问,就是说我们根本不存在这个cst_customer表,它能将数据放进去吗?答案是可以,这是因为hibernate会根据对象创建表。

完整代码可以上github下载

《Python全栈系列教程》专栏介绍及文章汇总 阅读详情

相关推荐

Unity AR涂涂乐实战:用户上传图片秒变3D模型新皮肤(附完整代码)

本文详细介绍了如何在Unity AR应用中实现用户上传图片动态生成3D模型皮肤的功能,重点讲解了动态创建材质球的技术方案和性能优化策略。通过完整的代码示例,开发者可以学习到多源图片处理、移动端内存管理以及AR场景适配等核心技巧,快速打造高性能的儿童教育类AR应用。

weixin_31509753的博客 370

Hibernate基本的增删改查(一)

1.Hibernate的必要性 在某些大型应用场合,我们要对数据库中的记录进行一些操作,比如insert、select、delete、update、等等。这些功能可以在JSP或者DAO里面实现,但是这又必须要求开发者精通数据库的操作。某些开发者注重的是业务逻辑和页面表示,再不想写数据库代码的情况下,Hibernate就起到了一个很重要的作用。 Hibernate是一个开放源代码的对象关系映射框架...

欧世乐 505

【Cadence软件技巧集萃】从Capture到Allergo——分布演示从原理符号导出到网络表

Cadence软件功能多样、性能强大,但是使用起来颇费步骤,尤其是从原理图到网络表的导入步骤,没有经过上手实践还真不一定一次就能搞定哩。本文笔者用将分步演示:1、在Capture软件上绘制原理图;2、将原理图导出网络表;3、在Allergo软件上更新网络表;希望给予使用Cadence的读者有效的帮助1、本文简述了建立Capture项目的步骤,演示了调用元件符号库的方法,并绘制了电气原理图;2、针对加载元件封装库可能遇到的问题,做了排查步骤建议;

qq_33175704的博客 2537

灵活控制 Hibernate 的日志或 SQL 输出,以便于诊断

我们在使用 Hibernate 时一般只会关注是否显示生成的 SQL 语句,不过有些时候还不够。默认时 Hibernate 执行的 SQL 语句是打印在控制台上的,它也可以配置为输出给 Log4J 或是 Log4Back,还能显示出更详细的参数和取值信息。这里简单讲来。 Hibernate 的配置文件 hibernate.cfg.xml 里提供有三个有关显示 SQL 的配置项,如果是与 Spri

1228

4D Gaussian Splatting for Real-Time Dynamic Scene Rendering-4DGS阅读笔记

为了实现实时动态场景渲染,同时还能具备较高的训练和存储效率,作者提出了四维高斯溅射(4D-GS)方法,将其作为动态场景的一种整体表示方式,而不是对每个单独的帧应用三维高斯溅射(3D-GS)方法。在 4D-GS 中,提出了一种新颖的显式表示方法,它同时包含三维高斯模型和四维神经体素。受 HexPlane 启发,提出了一种分解的神经体素编码算法,以高效地从四维神经体素构建高斯特征,然后应用一个轻量级多层感知器(MLP)来预测在新时间戳下的高斯变形。

2403_85515624的博客 2343

maya权重拷贝一对一,一对多

是不是有时候盔甲很多很碎头很大,用代理一个个拷贝很麻烦吧 用下面代码直接运行进行一对多或者一对一拷贝 第一个先选择参考物体,加选其他一堆有的没的有权重或没权重的物体执行一键拷贝,就可以啦 以下是源码送上,带走吧 ------------------------ #! -*- coding:utf -8 -*- #author:liubingdong #date:20...

weixin_30852367的博客 1532

Hibernate的面试题

*  比较Hibernate的三种检索策略优缺点 1立即检索; 优点:对应用程序完全透明,不管对象处于持久化状态,还是游离状态,应用程序都可以方便的从一个对象导航到与它关联的对象; 缺点:1.select语句太多;2.可能会加载应用程序不需要访问的对象白白浪费许多内存空间; 2延迟检索: 优点:由应用程序决定需要加载哪些对象,可以避免可执行多余的select语句,以及避免加载应用程序不需

小黄师傅的专栏 2452

大数据之数据抽取架构演变过程

而当时我们搭建的Flink集群是基于YARN进行资源管理和调度的,因为YARN中不仅仅包含着FLInk的资源,也有hive,zoozie,hdfs等等的资源,这样容易造成yarn资源的过度使用,容易引起整个底座的cpu以及内存的使用问题,经过排查,主要是由于FLink的使用资源引起的,所以后续就把Flink从整个集群中剥离出来,进行资源的隔离,最后Flink采用了StandAlone HA部署(但是这个目前还是存在问题,后续根据项目进行优化)'topic' = '表名',二、数据抽取架构的演变。

天道酬勤 867

hibernate学习记录(一)

报错:org.hibernate.boot.MappingNotFoundException: Mapping (RESOURCE) not found : com/test/bean/Test.hbm.xml : origin(com/test/bean/Test.hbm.xml) 找不到配置文件 解决方案: pom.xml配置如下: <build> <resources> <resource> <.

zoro_soro的博客 150

ChatTutor:让AI老师“会写会画”,打造可视化、互动式智能教育新范式

ChatTutor是一款突破性的开源AI教学助手,通过可视化电子白板实现"边讲边写"的沉浸式教学体验。该项目支持数学公式手写输入、动态函数绘图、自动生成思维导图等功能,采用多智能体架构实现专业协同。未来将扩展至编程、物理等STEM教育领域,适用于学生自学、教师备课和教育平台集成。作为MIT协议开源项目,ChatTutor通过赋予AI"教学肢体语言",推动教育从信息传递转向可视化互动建构,重新定义了AI助教的可能性。

这里汇聚了前沿的技术分享与实用的开发技巧,带你探索从创意到企业的技术创业之路。 423

C#使用OpenCvSharp+微信模型识别多个二维码

本文介绍了一个基于OpenCvSharp和微信开源二维码检测器的多二维码识别项目。该项目通过C# WinForm实现,主要功能包括:加载图片、识别图片中的多个二维码并显示识别结果。核心代码使用了OpenCvSharp.WeChatQRCode类,通过预训练的caffe模型(detect.prototxt/detect.caffemodel和sr.prototxt/sr.caffemodel)进行二维码检测和解码。识别结果包括每个二维码的编号、内容及位置信息。项目适用于批量二维码识别场景,部署简单,识别效果良

遇见--专栏 123

Hibernate 学习记录(一)

开发环境 Myeclipse2017+SQL server2008R2 用到的框架技术 Hibernate 装备阶段 一、下载安装hibernate-toos插件 http://hibernate.org/tools/ 官网下载适合自己eclipse版本的插件。 一个个下麻烦也可以下载我的hibernate-toos+核心jar包+SQL server2008R2驱动的打包 http...

TJ94_优快云的博客 189

论deepseek软件底层原理

如处理医学文本时,将任务分配给擅长医学知识处理的专家,避免通用模块处理的低效性,极大提升计算效率与任务处理的针对性。教师模型复杂且强大,学生模型结构简单。协作处理:多模块协作时,建立数据流通与交互机制,各模块按顺序或并行处理数据,不断传递与更新中间结果,共同完成复杂任务。(一)输入处理与任务判断 输入预处理:接收输入数据,如用户文本提问,首先进行清洗,去除噪声数据、特殊字符等。任务分类:通过MoE架构“路由器”,依据输入数据特征,判断任务所属领域与类型,如文本分类、情感分析等,为后续处理模块选择提供依据。

欢乐打代码! 2738

Hibernate4入门学习过程记录一

使用IDEA,src下的资源文件无法自动编译输出到out目录下,网上给出4种解决方案,请参考http://blog.youkuaiyun.com/shifangwannian/article/details/48882201 本人采用建立resources文件夹并Mark Directory as --->Resources Root的方案,是实际项目中这种方法也是最常用的。 简单的过程不做记录,

筱光的博客 303

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

记录一下Hibernate的学习

总共四张表,用户表、用户扩展表、车辆信息表、用户标签表。用来展示hibernate中的一对一、一对多、多对多关系。

... 956

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Hibernate框架【一】——HIbernate框架介绍

Hibernate是一个开源的Java对象关系映射(ORM)框架,它提供了一种方便的方式将Java对象与关系型数据库进行映射和交互。通过Hibernate,开发人员可以使用面向对象的方式操作数据库,而不需要直接编写SQL查询语句。

理想主义的花最终会盛开在浪漫主义的土壤里,我的热情永远不会熄灭在现实的平凡之中,我们终将上岸,阳光万里。 1万+

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Hibernate学习总结(一)

1、什么是Hibernate Hibernate是轻量级JavaEE应用的持久层解决方案,是一个关系数据库ORM框架(ORM,对象关系映射 Object Relationship mapper) ORM 就是通过将Java对象映射到数据库表,通过操作Java对象,就可以完成对数据表的操作 轻量级:指的是对于内存,cpu资源消耗比较小,学习也相对容易。 发展由来: jdbc实现DAO数据访问,d

2033

记录Hibernate SQL

有两种众所周知的在Grails中记录Hibernate SQL的方法。 一种是在DataSource.groovy添加logSql = true (在所有环境或每个环境的顶级块中) dataSource { dbCreate = ... url = ... ... logSql = true } 另一种是使用Log4j日志记录配置: log4j = { ...

241

hibernate sql_记录Hibernate SQL

hibernate sql 有两种众所周知的在Grails中记录Hibernate SQL的方法。 一种是在DataSource.groovy添加logSql = true (在所有环境或每个环境的顶级块中) dataSource { dbCreate = ... url = ... ... logSql = true } 另一种是使用Log4j日志记录配置: ...

559

Hibernate Log4j日志记录

Welcome to Hibernate Log4j Logging example. Hibernate 4 uses JBoss logging rather than slf4j in older hibernate versions. Today we will look into how to configure log4j in a hibernate application. 欢迎使...

从零开始的教程世界 423

hibernate删除记录_Hibernate记录:常见问题的提示和解决方案

hibernate删除记录 如何通过适当的日志记录解决一些最常见的Hibernate问题? Hibernate的日志记录配置是一个重要但很少讨论的主题。 正确的配置可以帮助您在开发过程中发现潜在的问题,而错误的配置则可以在生产中导致严重的性能问题。 这就是我在新书《 Hibernate提示》中解释不同配置选项的原因之一: 常见Hibernate问题的70多种解决方案 。 在本文中,我们...

最佳 Java 编程 343

Hibernate简单学习记录

Hibernate配置 首先Hibernate需要事先知道在哪里找映射信息。 == hibernate.properties == 或者 hibernate.cfg.xml文件 重要的属性 属性 描述 hibernate.dialect 这个属性使 Hibernate 应用为被选择的数据库生成适当的 SQL hibernate.connection.driver_cl...

Aizen_Sousuke的博客 294

hibernate总结(一)

Hibrenate概述 Hibernate框架是当今主流的Java持久层框架之一,由于它具有简单易学、灵活性强、扩展性强等特点,能够大大地简化程序的代码量,提高工作效率,因此受到广大开发人员的喜爱。 Hibernate是一个开放源代码的ORM框架,它对JDBC进行了轻量级的对象封装,使得Java开发人员可以使用面向对象的编程思想来操作数据库。 ORM概述 Object Rela...

Gray_humor的博客 402

关于Hibernate学习记录

Criteria

wq_c的博客 574

hibernate_Hibernate记录:常见问题的提示和解决方案

hibernate 如何通过适当的日志记录解决一些最常见的Hibernate问题? Hibernate的日志记录配置是一个重要但很少讨论的主题。 正确的配置可以帮助您在开发过程中发现潜在的问题,而错误的配置则可以在生产中导致严重的性能问题。 这就是我在新书《 Hibernate提示》中解释不同配置选项的原因之一:常见Hibernate问题的70多种解决方案。 在本文中,我们将分享本书中最有用...

cunhu2961的博客 494

Hibernate框架基础(学习记录)

Hibernate框架基础知识

YangSuzy的博客 292
下一篇: 我的Hibernate学习记录(二)
lger_Pro
博客等级 码龄10年 44粉丝 48原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值