Hibernate常用API

文章目录

  • 删除指定的记录
  • 新增记录
  • 更新记录
  • 清空缓存
  • 将实体对象从缓存中清除
  • 将缓存中更新的数据同步到数据库
  • 把数据库中的数据刷到缓存中
  • 查询多个对象(也就是查询多条记录)
  • 查询指定ID的对象(查询指定ID值的记录)
  • 参考

删除指定的记录

  User user = new User();user.setId(9);// user.setAccountName("liudehua"); // 不会按accountName删除Session session = HibernateUtils.openSession();/*// 获取事务对象Transaction tx = session.getTransaction();// 开启事务tx.begin();*/// 方法beginTransaction会完成上面的两个操作Transaction tx = session.beginTransaction();// 方法delete会获取对象user的属性ID的值,然后自动拼接一条删除的SQL语句// delete from user where id=?// 但是delete() 方法不会立即发送SQL语句给数据库session.delete(user);// 执行commit()方法后才会调用JDBC的API将SQL语句发送给数据库执行tx.commit();session.close();

新增记录

 User user = new User();user.setAccountName("liaowenxiong");user.setRealName("廖文雄");user.setPassword("123");// 调用Hibernate的API,用于装载Hibernate配置文件Configuration cfg = new Configuration();// 调用无参的方法configure会默认装载目录classes下的Hibernate配置文件(hibernate.cfg.xml及mapping文件)cfg.configure();SessionFactory factory = cfg.buildSessionFactory();// 通过Session工厂类获取Session对象Session session = factory.openSession();// 通过Session对象获取事务对象Transaction tx = session.getTransaction();// 开启事务tx.begin();// 保存数据session.save(user);// 提交事务tx.commit();// 关闭Sessionsession.close();

更新记录

    User user = new User();user.setId(13);user.setAccountName("liaowenxiong");user.setRealName("雄霸天下");Session session = HibernateUtils.openSession();Transaction tx = session.beginTransaction();session.update(user);tx.commit();session.close();

清空缓存

session.clear();  

将实体对象从缓存中清除

session.evict(Object obj);

将缓存中更新的数据同步到数据库

session.flush();

具体流程如下:
1、检查持久化对象在数据库中是否存在与之对应的记录
1)如果存在则检查实体对象的快照数据与数据库中对应的记录是否相同
①如果相同,则什么都不做
②如果不相同,则发出 update 语句
2)如果持久化对象在数据库中不存在与之对应的记录,则发出 insert 语句

2、检查对象与对象之间的级联操作 cascade=“save-update”,“all”

3、检查关系操作 inverse=“false”(维护关系),“true”(不维护)

把数据库中的数据刷到缓存中

session.refresh();

查询多个对象(也就是查询多条记录)

Query query = session.createQuery(String hql);

使用示例1:

// 方法createQuery并没有调用JDBC访问数据库,只是拼接了一条查询SQL语句而已
// User是类名,"from User"是Hibernate提供的面向对象的查询语言:HQL(Hibernate Query Language)语言。
Query query = session.createQuery("from User");
// 方法list()不支持懒加载,会访问数据库获取所有的记录
// 方法list调用JDBC的API访问数据库,再将获取到的数据封装成List对象返回
List<User> users = query.list();
// 所以这里就可以关闭Session了
session.close();

使用示例2:

Session session = HibernateUtils.getSession();Transaction tx = session.beginTransaction();Query query = session.createQuery("from Employee");// 方法iterate()默认支持懒加载机制,所以对象iterate中的元素对象都是代理对象// 当 query.iterate()语句执行结束后,因为延迟加载机制,// 先执行 select id from emp;语句,从数据库中仅仅将 id 取出;Iterator<Employee> iterate = query.iterate();while (iterate.hasNext()) {Employee employee = iterate.next();// 对象next其实是一个代理对象// 获取对象employee中的数据时才会去访问数据库获取对应的记录System.out.println(employee.getName());}

查询指定ID的对象(查询指定ID值的记录)

// 对应的数据表中并不存在id=2的记录,get方法会返回null
Employee e1 = session.get(Employee.class, 2);
System.out.println(e1);// null
Employee e2 = session.load(Employee.class, 2);// 因为懒加载机制,得到一个代理对象
System.out.println(e2); // 访问对象,获取对象中的数据时,会查询数据库,因为找不到对应的记录所以会报错

可以参阅《Hibernate中的Session.load() 和 Session.get() 的区别》。

参考

1.https://blog.csdn.net/xlgen157387/article/details/39777827#

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

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

相关文章

solid设计原则_SOLID设计原则

solid设计原则介绍&#xff1a; Robert C. Martin定义了五项面向对象的设计原则&#xff1a; 小号英格尔-责任原则 笔封闭原则 大号 iskov的替换原则 我覆盖整个院落分离原则&#xff0c;并 d ependency倒置原则 这些一起被普遍称为SOLID原则。 在设计面向对象的系统时&a…

nosql简答什么是最终一致性_NoSql的三大基石:CAP理论BASE最终一致性

关系型数据库的局限NoSql出现在关系型数据库之后&#xff0c;主要是为了解决关系型数据库的短板&#xff0c;我们先来看看随着软件行业的发展&#xff0c;关系型数据库面临了哪些挑战&#xff1a;1、高并发一个最典型的就是电商网站&#xff0c;例如双11&#xff0c;几亿大军的…

二叉树的先中后序遍历

【0】README 0.1&#xff09;本文旨在理清二叉树的先中后序遍历&#xff0c; 以及如何建立二叉树等相关内容&#xff1b; 0.2&#xff09;本文涉及代码均为原创&#xff1b; 0.3&#xff09;本文中遍历后的打印结果&#xff0c;朋友您可以直接写出二叉树的节点构造出来&…

表达式树

【0】README 0.1&#xff09;本文旨在总结出表达式树的构建步骤&#xff0c; 其中还涉及到中缀转后缀表达式&#xff0c;以及如何计算 表达式树中的值&#xff1b; 0.2&#xff09;本文源代码均为原创&#xff1b; 0.3&#xff09; 其实&#xff0c; 实现一个简单的计算器&a…

Date/Timestamp/String/LocalDate/LocalDateTime

文章目录String 转成 DateDate 转成 StringString 转成 Timestamp获取系统当前的毫秒数获取系统当前的日期时间毫秒数转成 Timestamp毫秒数转成 DateTimestamp 转成 StringDate 转成 TimestampTimestamp 转成 Datejava.util.Date 转成 java.sql.Date将带T的日期时间转成正常的日…

python可以用来写什么工具_python写工具

谷歌开源 Python Fire&#xff1a;可自动生成命令行接口今天我们很高兴地宣布 Python Fire 开源。Python Fire 可从任何 Python 代码生成命令行接口(command line interfaces (CLIs))&#xff0c;简单地调用任意 Python 程序中的 Fire 函数以将那个程序自动地转化为 CLI。该库可…

java原始类型和引用类型_Java中的8种原始类型

java原始类型和引用类型几年前&#xff0c;当我开始编辑Java Basics系列时&#xff0c;我认为将一些非常详细的信息拉到自己的帖子中是很有意义的。 这样&#xff0c;初学者的内容就更容易消化了。 首先&#xff0c;我将介绍有关Java的8种原始类型的所有信息。 Java基本类型 正…

androidtabhost缓存_FragmentTabHost布局的使用及优化方式

欢迎Follow我的GitHub, 关注我的简书. 其余参考Android目录.TabHostAndroidFragmentTabHost作为Android4.0版本的控件, 已经被项目广泛使用, 5.0版本又推出TabLayoutViewPager显示多页. 我来讲解如何使用FragmentTabHost.本文源码的GitHub下载地址主要包括:(1) 自定义Tab的图片…

二叉查找树

【0】README 0.1&#xff09;本文的重点在于介绍 二叉查找树的概念&#xff0c;以及写出 二叉查找树的操作例程的源代码&#xff0c; 其中当属delete 操作的源代码最不容易实现&#xff1b; 0.2&#xff09;本文源代码均为原创&#xff0c; 当然 代码中的idea 是借鉴人家的&a…

常用的命名规范/命名规则

文章目录骆驼式命名法&#xff08;CamelCase&#xff09;帕斯卡命名法&#xff08;PascalCase&#xff09;串式命名法&#xff08;KebabCase&#xff09;下划线命名法&#xff08;UnderScoreCase&#xff09;骆驼式命名法&#xff08;CamelCase&#xff09; 也叫小驼峰式命名法…

spring order_Spring @Order批注

spring order介绍&#xff1a; Spring Order注释是在Spring 2.0中首次引入的。 然后&#xff0c;它仅用于定义AspectJ建议中的顺序。 在Spring 4.0的后面&#xff0c;对该注释的实现进行了进一步改进。 从那时起&#xff0c;它还支持对Java数组或List之类的集合中的Spring组件或…

AVL树

【0】README 0.1&#xff09;本文给出了平衡二叉树&#xff08;AVL树&#xff09;的插入例程涉及到的单旋转双旋转的概念&#xff0c;并给出了代码实现&#xff1b; 0.2&#xff09;本文源代码均为原创&#xff0c; 当然相关idea 还是借鉴人家的&#xff1b;&#xff08;真心…

spring 注释_Spring@懒惰注释

spring 注释介绍&#xff1a; 默认情况下&#xff0c; Spring框架在应用程序启动时加载并热切初始化所有bean。 在我们的应用程序中&#xff0c;我们可能有一些非常消耗资源的bean。 我们宁愿根据需要加载此类bean。 我们可以使用Spring Lazy批注实现此目的 。 在本教程中&…

管理系统的账户设计(涉及注册/登录逻辑)

文章目录方案一方案二方案三方案一 类似华为云IAM&#xff08;Identity and Access Management 身份和访问管理&#xff09;用户&#xff0c;阿里云的 RAM&#xff08;Resource Access Management 资源访问管理&#xff09;用户 机构有独立的账户&#xff08;主账户&#xff…

opencv生成日志_OpenCV-Utils学习日志:VideoCapture使用样例

1.VideoCapture可以打开多种来源的数据流&#xff0c;但常见的是相机、视频及图像序列三类数据流&#xff1a;(1)打开相机数据流&#xff0c;需要指定相机在主机上的设备编号&#xff0c;若主机上只有一个相机则编号通常是0。(2)打开视频数据流&#xff0c;需要指定视频的完整路…

jdbc查询序列_JDBC –模拟序列

jdbc查询序列也许我们每个人在程序员的生活中至少遇到过一次这个问题- 如何模拟数据库序列&#xff1f; 在下面&#xff0c;您可能会发现我对该问题解决方案的各种了解。 假设我们有一个接口定义了所需的API&#xff0c;用于返回整数序列&#xff1a; public interface Sequen…

利用 GregorianCalendar 制作当前月的月历

【0】README 0.1&#xff09;本文文字总结于 core java volume 1 &#xff0c; 源代码均为原创&#xff1b; 0.2&#xff09;本文旨在熟悉 GregorianCalendar 日历类&#xff0c;每一天就是一个GregorianCalendar 日历类&#xff0c;一天有很多的日历属性&#xff0c;觉得用它…

pyecharts怎么绘制散点图_PyeCharts绘制各种图形

简介PyeCharts 是一个用于生成 Echarts 图表的类库&#xff0c;用其生成的图可视化效果非常棒&#xff0c;而且使用起来非常简单。下面是一些常用图的pyecharts实现方法柱状图bar pye.Bar("柱状图")#新建柱状图bar.add("服装", #图例名称["衬衫"…

junit junit_穿越JUnit流

junit junit关于JUnit 5迁移的好处之一是&#xff0c;您可以在老式模式下运行JUnit 4测试&#xff0c;并且所有内容仍然兼容。 不利的一面是&#xff0c;某些注释和方法在JUnit 4和JUnit 5中具有相同的名称&#xff0c;并且当两组库依赖项都可用时&#xff0c;很容易导入错误的…

被遗忘的软件产品形态

从2010年以后&#xff0c;很多公司开发的软件产品&#xff0c;很少有客户端了&#xff0c;web2.0之后&#xff0c;主流的业务系统基本上都是基于Web去构建业务系统。这几年见到的业务应用系统都是基于Web的构建的。而在To C市场&#xff0c;几乎就没有客户端了&#xff0c;都是…