Hibernate第二篇【API讲解、执行流程图】

前言

从上一篇中已经大致介绍了Hibernate并且有了一个快速入门案例的基础了,….本博文主要讲解Hibernate API

我们看看快速入门案例的代码用到了什么对象吧,然后一个一个讲解


    public static void main(String[] args) {

        //创建对象
        User user = new User();
        user.setPassword("123");
        user.setCellphone("122222");
        user.setUsername("nihao");

        //获取加载配置管理类
        Configuration configuration = new Configuration();

        //不给参数就默认加载hibernate.cfg.xml文件,
        configuration.configure();

        //创建Session工厂对象
        SessionFactory factory = configuration.buildSessionFactory();

        //得到Session对象
        Session session = factory.openSession();

        //使用Hibernate操作数据库,都要开启事务,得到事务对象
        Transaction transaction = session.getTransaction();

        //开启事务
        transaction.begin();

        //把对象添加到数据库中
        session.save(user);

        //提交事务
        transaction.commit();

        //关闭Session
        session.close();
    }

Configuration

配置管理类:主要管理配置文件的一个类

它拥有一个子类AnnotationConfiguration,也就是说:我们可以使用注解来代替XML配置文件来配置相对应的信息

这里写图片描述

configure方法

configure()方法用于加载配置文件

  • 加载主配置文件的方法
    • 如果指定参数,那么加载参数的路径配置文件
    • 如果不指定参数,默认加载src/目录下的hibernate.cfg.xml

buildSessionFactory方法

buildSessionFactory()用于创建Session工厂


SessionFactory

SessionFactory–>Session的工厂,也可以说代表了hibernate.cfg.xml这个文件…hibernate.cfg.xml的就有<session-factory>这么一个节点

openSession方法

创建一个Session对象

getCurrentSession方法

创建Session对象或取出Session对象


Session

Session是Hibernate最重要的对象,Session维护了一个连接(Connection),只要使用Hibernate操作数据库,都需要用到Session对象

通常我们在DAO层中都会有以下的方法,Session也为我们提供了对应的方法来实现!


public interface IEmployeeDao {

    void save(Employee emp);
    void update(Employee emp);
    Employee findById(Serializable id);
    List<Employee> getAll();
    List<Employee> getAll(String employeeName);
    List<Employee> getAll(int index, int count);
    void delete(Serializable id);

}

更新操作

我们在快速入门中使用到了save(Objcet o)方法,调用了这个方法就把对象保存在数据库之中了。Session对象还提供着其他的方法来进行对数据库的更新

  • session.save(obj); 【保存一个对象】
  • session.update(obj); 【更新一个对象】
  • session.saveOrUpdate(obj); 【保存或者更新的方法】
    • 没有设置主键,执行保存;
    • 有设置主键,执行更新操作;
    • 如果设置主键不存在报错!

我们来使用一下update()方法吧….既然是更新操作了,那么肯定需要设置主键的,不设置主键,数据库怎么知道你要更新什么。将id为1的记录修改成如下:


        user.setId(1);
        user.setPassword("qwer");
        user.setCellphone("1111");
        user.setUsername("zhongfucheng");

这里写图片描述


主键查询

通过主键来查询数据库的记录,从而返回一个JavaBean对象

  • session.get(javaBean.class, int id); 【传入对应的class和id就可以查询】
  • session.load(javaBean.class, int id); 【支持懒加载】

User重写toString()来看一下效果:


       User user1 = (User) session.get(User.class, 1);
        System.out.println(user1);

这里写图片描述


HQL查询

HQL:hibernate query language 即hibernate提供的面向对象的查询语言

  • 查询的是对象以及对象的属性【它查询的是对象以及属性,因此是区分大小写的!】。

SQL:Struct query language 结构化查询语言

  • 查询的是表以及列【不区分大小写】

HQL是面向对象的查询语言,可以用来查询全部的数据!


        Query query = session.createQuery("FROM User");

        List list = query.list();
        System.out.println(list);

这里写图片描述

当然啦,它也可以传递参数进去查询

        Query query = session.createQuery("FROM User WHERE id=?");

        //这里的?号是从0开始的,并不像JDBC从1开始的!
        query.setParameter(0, user.getId());

        List list = query.list();
        System.out.println(list);

这里写图片描述


QBC查询

QBC查询: query by criteria 完全面向对象的查询

从上面的HQL查询,我们就可以发现:HQL查询是需要SQL的基础的,因为还是要写少部分的SQL代码….QBC查询就是完全的面向对象查询…但是呢,我们用得比较少

我们来看一下怎么使用吧:


        //创建关于user对象的criteria对象
        Criteria criteria = session.createCriteria(User.class);

        //添加条件
        criteria.add(Restrictions.eq("id", 1));

        //查询全部数据
        List list = criteria.list();
        System.out.println(list);

这里写图片描述


本地SQL查询

有的时候,如果SQL是非常复杂的,我们不能靠HQL查询来实现功能的话,我们就需要使用原生的SQL来进行复杂查询了!

但是呢,它有一个缺陷:它是不能跨平台的…因此我们在主配置文件中已经配置了数据库的“方言“了。

我们来简单使用一下把:


        //将所有的记录封装成User对象存进List集合中
        SQLQuery sqlQuery = session.createSQLQuery("SELECT * FROM user").addEntity(User.class);

        List list = sqlQuery.list();

        System.out.println(list);

这里写图片描述

beginTransaction方法

开启事务,返回的是一个事务对象….Hibernate规定所有的数据库操作都必须在事务环境下进行,否则报错!


Hibernate执行流程图

这里写图片描述

<script type="text/javascript"> $(function () { $('pre.prettyprint code').each(function () { var lines = $(this).text().split('\n').length; var $numbering = $('<ul/>').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($('<li/>').text(i)); }; $numbering.fadeIn(1700); }); }); </script>
深入掌握Hibernate3_API:最佳实践指南 本文还有配套的精品资源,点击获取 简介:Hibernate是一个开源的ORM框架,为Java开发者提供了面向对象操作数据库的方式。Hibernate3_API包含了对Hibernate 3.x版本的全面API文档,提供了丰富的资源,如完整的API文档、示例代码和教程等,对深入学习Hibernate非常有帮助。该API涵盖多个核心组件,包括SessionFactory、Ses... 阅读详情

相关推荐

Hibernate原理流程

Hibernate原理流程

api调用流程图_流API

api调用流程图Using streams we can receive a resource from the network, or from other sources, and process it as soon as the first bit arrives. 使用流,我们可以从网络或其他来源接收资源,并在第一位到达时对其进行处理。 Instead of waiting for...

cuk0051的博客 4003

R语言安装包镜像报错?5分钟教你快速切换国内镜像源(含清华/阿里云配置)

本文详细介绍了R语言安装包镜像报错的解决方案,包括如何快速切换国内镜像源(如清华、阿里云等),解决'无法读写貯藏處索引'等常见问题。通过图形界面和命令行两种方式,帮助用户高效配置镜像源,提升R语言包安装速度与稳定性。

weixin_29053073的博客 419

API流程和代码结构

go语言里面的API流程和代码结构

xiaoliu的博客 1878

ddr3ip核心_DDR3 IP 核配置

DDR3 控制器 IP 核2.DDR3 IP核配置点击 Flow Navigator 面板下的“Project Manager -->IP Catalog”。 在“Memories & Storage Elements -->Memory Interface Generators”分类展开后,可以看到名为“Memory Interface Generator (MIG 7 ...

weixin_33049919的博客 2936

对Palantir的本体论的理解

本体论Ontology是Palantir的整个技术架构的核心与基石,它远不止是一个数据模型,而是一个旨在对企业决策本身进行建模的“数字世界的操作系统”。

liuyukuan的专栏 1156

Hibernate的执行流程

在hibernate开发的过程中通常会用到5个核心接口,分别为Configuration接口、SessionFaction接口Session接口、Transaction接口和Query接口。通过这些接口可以对持久化对象进行操作,还可以进行实物的控制。                先来看看hibernate的执行流程图 (1)初始化hibernate,构建hiberna

技术从心 1117

从图像处理到AI:手把手教你用Halcon DL Tool完成第一个缺陷检测项目

本文详细介绍了如何使用Halcon深度学习工具(DL Tool)完成金属表面缺陷检测项目。从环境准备、数据采集标注到模型训练与部署,手把手指导工程师快速构建AI质检系统,显著提升工业缺陷检测效率。特别针对金属反光等难点问题提供实用解决方案。

weixin_42531886的博客 292

【架构图解】API架构图解:如何以图表形式展现复杂系统

架构图是链接到 API 的不同组件/服务如何相互交互的直观表示。当需要理解 API 的架构并将其传达给不同的利益相关者(包括其他开发人员、项目经理和客户)时,这些图表非常有用。图表/视觉效果有多种类型,每种都有其自己的用途和优点。在本部分中,我们将探讨不同类型的图表及其用途。

DreamSun的博客 2804

「UG/NX」BlockUI 树列表(回调函数)

官方对树控件提供了21种回调函数,树的一些操作可以在这些回调函数中进行操作。

何曾参静谧的博客 1334

【GlobalMapper精品教程】070:专题地图制作完整操作教程

与其它GIS软件一样,Globalmapper也可以制作出漂亮的地图,本文讲解专题地图制作完整操作流程。

智慧空间实验室 3757

API架构图解:如何以图表形式展现复杂系统

通过以上图表形式和技巧,你可以有效地展现复杂系统的 API 架构,帮助团队成员更好地理解系统的结构和功能。时序图用于展示系统中不同组件在时间序列上的交互过程,特别适合展示 API 的调用顺序和响应时间。对于具有多层架构的复杂系统,可以使用层次结构图来展示 API 的分布和层次关系。组件图可以帮助你展示系统中各个组件以及它们之间通过 API 进行的交互。流程图可以清晰地展示 API 在复杂系统中的调用流程和数据流向。

lovelin_5566的博客 1865

【网络教程】Ubuntu有线连接消失,无法联网怎么办!(亲测有效!)

文章目录问题描述解决方案 问题描述 今天打开Ubuntu,突然发现无法连接网络,并且打开设置,发现设置里面的网络已经没有了有线连接,只有VPN设置选项,如图 解决方案 按照下列的代码执行即可! # 关闭网路 service NetworkManager stop # 删除NetworkManager缓存文件 sudo rm /var/lib/NetworkManager/NetworkManager.state # 打开网络 service NetworkManager start 运行完

XiaoqiangClub的博客 1万+

Hibernate入门第四讲——Hibernate的核心API

百度Hibernate,可在度娘上看到如下文字: 还记得上一篇文章讲的是《Hibernate入门第三讲——Hibernate的常见配置》,本文继续在其基础之上讲解Hibernate的核心API。 Configuration:Hibernate的配置对象 从度娘上我们可以看到Configuration的定义: 从以上文章中,我们可以知道Configuration类主要是用于加载Hibernate...

李阿昀的博客 3441

功能安全Safety Case构建方法论

本文系统阐述了功能安全认证中SafetyCase的构建方法。SafetyCase是一套结构化论证体系,通过Claim-Argument-Evidence(CAE)逻辑链证明系统安全性,包含系统级、技术安全级和实现级三层论证。文章详细介绍了SafetyCase的核心框架、与FMEDA等验证方法的关系、工程化实施步骤,以及常见失效模式。特别强调SafetyCase连接理论、实现与证据的桥梁作用,是功能安全认证的灵魂文件,要求将分散的安全活动组织成完整的逻辑论证。

VehSwHwDeveloper的博客 578

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Hibernate API 详解

Hibernate 主要的 API 详解 org.hibernate.cfg.Configuration 加载主配置文件以及映射文件,启动 hibernate。 主配置文件中主要有:数据库连接四要素,方言,数据源… 默认获取 hibernate.cfg.xml 配置文件 Configuration configer = new Configuration().configure(); ...

. 1789

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Hibernate框架介绍以及入门 【三】Hibernate核心API

/自定义与数据库匹配的类customer.setCust_name(“王小东”);//提交事务@Test// 查询:// 创建数据库事务对象开启事务// 使用get方法来进行查询/**/// 使用load方法查询//发送SQL语句// 提交事务三、Session:类似Connection对象是链接对象(实现Hibbernate和数据库建立连接)Session接口负责执行被持久化对象的CRUD操作(CRUD的任务是完成与数据库的交流,包含了很多常见的SQL语句)。

2401_89191552的博客 838

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Hibernate详细讲解

 Hibernate是Java应用和关系数据库之间的桥梁,它负责Java对象和关系数据之间的映射。Hibernate内部封装了通过JDBC访问数据库的操作,向上层应用提供了面向对象的数据访问API。在Java应用中使用Hibernate包含以下步骤。 (1)创建Hibernate的配置文件。 (2)创建持久化类。 (3)创建对象-关系映射文件。 (4)通过Hibernate API

Fangfengk的专栏 938

Hibernate简介、hibernate的简单使用、常见问题、hibernate的API详解-day01

目录一级目录 一级目录

ShuYY的博客 1397

Hibernate常用API详解

hibernate常用API详解 原文地址:http://blessht.iteye.com/blog/1327883 根据个人使用Hibernate的经验,介绍一下Hibernate的多种不同的查询和CUD操作,这些东西在日常开发中非常常用,希望对大家有所帮助。 以下示例均以两张表为例:member和userinfo,member帐号信息表外键关联userinfo用户基本信息...

disheng1504的博客 166

—— —— hibernate常用API详解 —— ——

根据个人使用Hibernate的经验,介绍一下Hibernate的多种不同的查询和CUD操作,这些东西在日常开发中非常常用,希望对大家有所帮助。 以下示例均以两张表为例:member和userinfo,member帐号信息表外键关联userinfo用户基本信息表,主键自动生成即可              然后映射出的POJO如下: public class Use...

148

hibernate常用API详解

根据个人使用Hibernate的经验,介绍一下Hibernate的多种不同的查询和CUD操作,这些东西在日常开发中非常常用,希望对大家有所帮助。     以下示例均以两张表为例:member和userinfo,member帐号信息表外键关联userinfo用户基本信息表,主键自动生成即可   然后映射出的POJO如下: public class Userinfo  implemen

fanlulu2015的博客 484

Hibernate快速入门详细讲解

Hibernate框架介绍 什么是Hibernate Hibernate是一种ORM框架,全称为 Object_Relative DateBase-Mapping,在Java对象与关系数据库之间建立某种映射,以实现直接存取Java对象! Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,...

Yang_Hui_Liang的博客 758
上一篇: Hibernate第一篇【介绍Hibernate,简述ORM,快速入门】
下一篇: Hibernate第三篇【主配置文件、映射文件、复合主键映射】
Java3y
Java3y 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄9年 1万+粉丝 509原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值