1、Session单表的CRUD操作

1、增加或者修改,使用同一个方法,或者下面的两个也行:

感觉多此一举。。。

2、删除方法,硬删除:

3、获取方法提供了两种,Get & Load

get方法

load方法

2、Get 和 Load 的区别?

使用get方法获取,如果查询的数据不存在则直接返回Null,即空指针。

如果使用Load方法获取,查询的数据不存在,则抛出异常。

3、JavaBean在Hibernate的Session中的持久化生命周期

一、瞬时状态

ORM对象和数据库不存在关联,且对象在数据库中没有关联记录,该对象的状态为瞬时状态。对象会被GC回收

二、持久状态

Bean与Session关联,被Session管理的情况下,该对象状态为持久状态。

也就是通过上述的Get,Load方法得到对象。调用save方法存入的对象也会被Session关联,变为持久状态

三、游离状态

脱离Session管理的bean对象,该对象状态即为游离状态

4、DirtyCheck 脏检查?

对象的属性发生变化的,称为脏对象,脏检查也就是对前面描述的对象进行检查

如果发现了脏变化,对象的属性发生改变,Session也要对应的将改变更新到数据库中,保证数据一致

5、FlushCache 缓存刷新

触发脏检查的方式就是刷新缓存,Session刷新的方式有两种,在commit提交的时候触发,二是手动调用flush方法触发

6、更新方法API详细

虽然说save也可以用来作更新操作,因为有OID就行,但是Hibernate还是提供了对应的更新方法

update 将游离状态的对象恢复持久状态,同时进行数据库更新操作,如果OID不存在则抛出异常

saveOrUpdate 包含save和update方法,参数是游离状态的对象就调用update执行

merge 将参数的游离状态对象复制属性到一个拥有相同OID的持久状态对象,通过对持久状态对象的脏检查进行更新操作,并返回

7、唯一结果 UniqueResult方法

查询返回的多个记录可以被List集合或者Iterator迭代器对象封装

二者皆可以被遍历处理,但是只有一个结果的情况,可以不需要集合对象处理,直接调用这个就行了

要注意的是,如果返回的结果不唯一,则Hibernate会抛出异常:NonUniqueResultException

8、分页与投影查询

一些分页需要的数据,使用Hibernate获取代码片段:

@Test
public void hibernatePaging() { Session session = HibernateUtil.getSession(); final String HQL_STATEMENT = "FROM xx.xx.xxx.DomainClass"; final Integer pageIndex = 10;
final Integer pageSize = 20; Query<Object> totalCountQuery = session.createQuery(HQL_STATEMENT, Object.class);
long count = totalCountQuery.stream().count();
Integer totalPage = new Long((count % pageSize == 0) ? (count / pageSize) : (count /pageSize + 1)).intValue(); Query<Object> pageListQuery = session.createQuery(HQL_STATEMENT, Object.class); pageListQuery.setFirstResult( (pageIndex - 1) * pageSize );
pageListQuery.setMaxResults( pageSize ); List<Object> objectList = pageListQuery.list();
}

一般来说封装的分页对象:

package cn.zeal4j.model;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List; /**
* @author Administrator
* @file IntelliJ IDEA Hibernate-Tutorial
* @create 2020 09 26 19:10
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class PageModel<Entity> {
private Integer pageIndex;
private Integer pageSize;
private Long totalCount;
private Integer totalPage;
private List<Entity> pageList; public void setTotalPage(Long totalCount) {
totalPage = new Long((totalCount % pageSize == 0) ?
(totalCount / pageSize) : (totalCount /pageSize + 1)).intValue();
}
}

使用分页模型处理:

只是写了一个大概的蓝图,实际操作再看吧

@Test
public void hibernatePaging2() {
// 参数
int index = 2;
int size = 20;
// 复杂一些还需要查询条件也封装进去才行,这里就不设置了
final String HQL_STATEMENT = "FROM xx.xx.xxx.DomainClass"; Session session = HibernateUtil.getSession(); Query<Object> query = session.createQuery(HQL_STATEMENT, Object.class); long count = query.stream().count(); PageModel<Object> pageModel = new PageModel<>(); pageModel.setPageIndex(index); pageModel.setPageSize(size); pageModel.setTotalCount(count); pageModel.setTotalPage(count); query.setFirstResult( (pageModel.getPageIndex() - 1) * pageModel.getPageSize() );
query.setMaxResults( pageModel.getPageSize() ); List<Object> objectList = query.list(); pageModel.setPageList(objectList); // 业务就可以返回这个包装的分页模型对象了
// return pageModel;
}

9、投影查询

数据的展示并不需要全部获取,只是部分的属性,或者使用表达式、函数、等获取结果

可以使用投影函数。有三种情景适用:

1、每条结果仅包含一个字段列,查询的结果泛型可以直接返回那个字段的类型

2、或者多个字段列,查询的结果泛型可以直接返回Object数组

3、结果通过构造器封装成对象,查询的结果就是映射的实体类对象

发现构造器查询是这样的。。。眼睛已经瞎掉了。。。

【Hibernate】Re01.5 API的更多相关文章

  1. 【Hibernate】Hibernate的多表查询

    在<[Hibernate]Hibernate的聚类查询.分组查询.排序与时间之差>(点击打开链接)一文中已经讲述过怎样利用HQL语句代替SQL语句.进行聚类查询.分组查询.排序与时间之差的 ...

  2. 【hibernate】映射继承关系

    [hibernate]映射继承关系 转载:https://www.cnblogs.com/yangchongxing/p/10405151.html ========================= ...

  3. 【hibernate】自定义转换器

    [hibernate]自定义转换器 转载:https://www.cnblogs.com/yangchongxing/p/10398255.html 1.转换基本属性 package cn.ycx.s ...

  4. 【hibernate】存储图片

    [hibernate]存储图片 转载: package cn.ycx.study.hibernate.entity; import javax.persistence.Entity; import j ...

  5. 【hibernate】映射可嵌入式组件

    [hibernate]映射可嵌入式组件 转载:https://www.cnblogs.com/yangchongxing/p/10376452.html 可嵌入 Address 类,没有对应的数据表 ...

  6. 【hibernate】应用程序级别的视图

    [hibernate]应用程序级别的视图 转载:https://www.cnblogs.com/yangchongxing/p/10361281.html 在没有数据库修改权限时,像创建视图可以使用 ...

  7. 【hibernate】重写物理表名和列明

    [hibernate]重写物理表名和列明 转载:https://www.cnblogs.com/yangchongxing/p/10357123.html 假设你的数据库命名有这样的需求,表都以 yc ...

  8. 【hibernate】常用注解

    [hibernate]常用注解 转载:https://www.cnblogs.com/yangchongxing/p/10357118.html 目录 ======================== ...

  9. 【译】Android NDK API 规范

    [译]Android NDK API 规范 译者按: 修改R代码遇到Lint tool的报错,搜到了这篇文档,aosp仓库地址:Android NDK API Guidelines. 975a589 ...

  10. 【算法】实现字典API:有序数组和无序链表

    参考资料 <算法(java)>                           — — Robert Sedgewick, Kevin Wayne <数据结构>       ...

随机推荐

  1. 增补博客 第三篇 python 英文统计

    编写程序实现对特定英文文章(文本文件)的单词数和有效行数的统计,其中要求空行不计数: def count_words_and_lines(file_path): word_count = 0 line ...

  2. 洛谷 P1216 数字三角形

    题目链接:数字三角形 思路 dp:金字塔顶的元素为起点,金字塔每行的最左侧数字只能从上一层的最左侧数字到达,如7 -> 3 -> 8 -> 2 -> 4,这些数字中的每一个(除 ...

  3. MegaCli命令使用整理

    1. 软件安装 rpm -ivh Lib_Utils-1.00-09.noarch.rpm rpm -ivh MegaCli-8.02.21-1.noarch.rpm 2. 常用命令 /opt/Meg ...

  4. 通俗易懂的路径搜索之A-star算法

    A-star算法 搜索技术 搜索技术是一种通用的问题求解技术,可以将待解决的问题转化为可搜索的问题空间,然后在该空间中搜索求解.搜索技术在人工智能领域有着非常广泛的应用. 盲目搜索 盲目搜索是最简单的 ...

  5. 【动手学深度学习】第五章笔记:层与块、参数管理、自定义层、读写文件、GPU

    为了更好的阅读体验,请点击这里 由于本章内容比较少且以后很显然会经常回来翻,因此会写得比较详细. 5.1 层和块 事实证明,研究讨论"比单个层大"但"比整个模型小&quo ...

  6. EasyExcel 无法读取图片?用poi写了一个工具类

    在平时的开发中,经常要开发 Excel 的导入导出功能.一般使用 poi 或者 EasyExcel 开发,使用 poi 做 excel 比较复杂,大部分开发都会使用 EasyExcel 因为一行代码就 ...

  7. 2024-06-26:用go语言,给定一个长度为n的数组nums和一个正整数k, 找到数组中所有相差绝对值恰好为k的子数组, 并返回这些子数组中元素之和的最大值。 如果找不到这样的子数组,返回0。 输

    2024-06-26:用go语言,给定一个长度为n的数组nums和一个正整数k, 找到数组中所有相差绝对值恰好为k的子数组, 并返回这些子数组中元素之和的最大值. 如果找不到这样的子数组,返回0. 输 ...

  8. Linux 内核:设备树(1)dtb格式

    Linux 内核:设备树(1)dtb格式 背景 dtb作为二进制文件被加载到内存中,然后由内核读取并进行解析,如果对dtb文件的格式不了解,那么在看设备树解析相关的内核代码时将会寸步难行,而阅读源代码 ...

  9. Freertos学习:08-信号量

    --- title: rtos-freertos-08-ipc-semaphore date: 2020-06-23 11:01:12 categories: tags: - freertos - i ...

  10. 【基础推导】MPC控制器及其车辆模型详细推导 (附代码链接及详细推导说明)

    0. 参考与前言 Python 代码:github AtsushiSakai/PythonRobotics C++ 代码:github jchengai/gpir/mpc_controller 相关参 ...