Hibernate旅程(四)Hibernate对数据库删除、查找、更新操作

2023-05-16

上篇,我们以向数据库添加操作来演示hibernate持久化对象的三种状态。本节继续hibernate对数据库的其他操作,删除、查询、修改。

Hibernate对数据删除操作

删除User表中个一条数据,是需要更具User表的主键id值来删除的。首先根据id值向数据库中查询出来对应的对象。可以采用两种方式一是sessionget方法,一个是sessionload方法。

SessionGet方法:调用这个方法会返回一个Object对象。然后我们对其强制转换。Useruser = (User)session.get(User.class,” 402881e5441c035e01441c0360510003”); 当我们传递id值在数据中查找没有相应的结果时,get方法会返回一个null值。

   区别:get方法加载的时候会立刻发出sql语句去查询,而load方法在执行的时候没有立刻的发出sql去查询,生成一个代理User,没有生成真正的User。当我们真正的去用这个user的时候才会加载真正的UserLoad()支持延迟加载,而Get()不支持延迟加载。Get加载的对象不存在时返回的是null对象,而Load()加载对象不存在时会抛出ObjectNotFoundException异常。

   SessionLoad方法:同样是调用这个方法返回一个Object对象,再进行强制转换。

然后我们通过getload加载上来对应userid的对象,再调用sessiondelete方法删除该对象同时删除表中的一条记录,代码如下所示。

第一种删除方式。

  publicvoid testDel1()

           {

               Sessionsession =null;

               

               try

               {

                  session= HibernateUtils.getSession();

                  //开启事务.

                  session.beginTransaction();

                  //采用load查询不存在的数据,hibernate会抛出object not found exception

                  Useruser = (User)session.load(User.class,"402881e5441c035e01441c0360510003");

                  

                  //删除表中的记录.

                  //删除,建议用此种方式删除,先加载再删除.

                  session.delete(user);

                  

                  //提交事务.把内存的改变提交到数据库上.

                  session.getTransaction().commit();

                  

               }catch(Exception e){

                  e.printStackTrace();

                  session.getTransaction().rollback();

               }finally{

                  HibernateUtils.closeSession(session);

               }

               

           }

           

第二种删除方式,手动构造detached对象再删除。代码如下所示。

  //测试方法以test开头.测试del方法.返回存在的加载的.

           publicvoid testDel2()

           {

               Sessionsession =null;

               

               try

               {

                  session= HibernateUtils.getSession();

                  //开启事务.

                  session.beginTransaction();

                  

                  //手动构造的Detached对象.

                  Useruser =new User();

                  user.setId("402881e4441b3d1c01441b3f5dfe0001");

                  session.delete(user);

                  

                  

                  //提交事务.把内存的改变提交到数据库上.

                  session.getTransaction().commit();

                  

               }catch(Exception e){

                  e.printStackTrace();

                  session.getTransaction().rollback();

               }finally{

                  HibernateUtils.closeSession(session);

               }

               

           }

Hibernate对数据查询操作

一般查询,代码如下所示。

//查询方法.

  publicvoid testQuery1()

  {

     Sessionsession =null;

     try

     {

        session= HibernateUtils.getSession();

        

        session.beginTransaction();

        //参数是一个字符串,HQL的查询语句.注意此时的的UserU为大写,为对象的,而不是表的.

        Queryquery = session.createQuery("from User");

        

        //使用List方法.

        ListuserList = query.list();

        //迭代器去迭代.

        for(Iteratoriter=userList.iterator();iter.hasNext();)

        {

           Useruser =(User)iter.next();

           System.out.println("id="+user.getId() + "name="+user.getName());

        }

        

        session.getTransaction().commit();

     }catch(Exception e){

        e.printStackTrace();

        session.getTransaction().rollback();

     }finally{

        HibernateUtils.closeSession(session);

     }

     

  }

  

 

分页查询,代码如下所示。

//分页查询,从什么地方查,查几个;

  publicvoid testQuery2()

  {

     Sessionsession =null;

     try

     {

        session=HibernateUtils.getSession();

        

        session.beginTransaction();

        //参数是一个字符串,HQL的查询语句.注意此时的的UserU为大写,为对象的,而不是表的.

        Queryquery = session.createQuery("from User");

        //从第一个开始查起.可以设置从第几个查起.

        query.setFirstResult(0);

        //最大条数为两个

        query.setMaxResults(2);

        

        //使用List方法.

        ListuserList = query.list();

        //迭代器去迭代.

        for(Iteratoriter=userList.iterator();iter.hasNext();)

        {

           Useruser =(User)iter.next();

           System.out.println("id="+user.getId() + "name="+user.getName());

        }

        

        session.getTransaction().commit();

     }catch(Exception e){

        e.printStackTrace();

        session.getTransaction().rollback();

     }finally{

        HibernateUtils.closeSession(session);

     }

     

  }

Hibernate对数据更新操作

手动构造detached对象,调用sessionupdate()方法,代码如下所示。

 

           //测试方法以test开头.测试update方法.返回存在的加载的.

           publicvoid testUpdate1()

           {

               Sessionsession =null;

               

               try

               {

                  session= HibernateUtils.getSession();

                  //开启事务.

                  session.beginTransaction();

                  //采用load查询不存在的数据,hibernate会抛出object not found exception

                  

                  //手动构造的Detached对象.

                  Useruser =newUser();

                  user.setId("402881e5441bfb0601441bfb075b0002");

                  user.setName("周六");

                  

                  session.update(user);

                  

                  

                  //提交事务.把内存的改变提交到数据库上.

                  session.getTransaction().commit();

                  

               }catch(Exception e){

                  e.printStackTrace();

                  session.getTransaction().rollback();

               }finally{

                  HibernateUtils.closeSession(session);

               }

               

           }

 

加载对象,调用sessionupdate()方法,让对象处于持久化状态的时候进行更新操作,代码如下所示。

  //测试方法以test开头.测试update方法.返回存在的加载的.

           publicvoid testUpdate2()

           {

               Sessionsession =null;

               

               try

               {

                  session= HibernateUtils.getSession();

                  //开启事务.

                  session.beginTransaction();

                  //采用load查询不存在的数据,hibernate会抛出object not found exception

                  

                  //先把要更新的查出来.

                  //建议采用此种方式,先加载再更新的方式.

                  Useruser = (User)session.load(User.class,"402881e5441bfb0601441bfb075b0002");

                  //查出来的话就直接放入了.处于持久化状态.

                  user.setName("周日");

                  

                  //显示的调用,因为为持久化状态也可以不显示调用.

                  session.update(user);

                  

                  

                  //提交事务.把内存的改变提交到数据库上.

                  session.getTransaction().commit();

                  

               }catch(Exceptione){

                  e.printStackTrace();

                  session.getTransaction().rollback();

               }finally{

                  HibernateUtils.closeSession(session);

               }

               

           }

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Hibernate旅程(四)Hibernate对数据库删除、查找、更新操作 的相关文章

随机推荐

  • macOS 使用 - 使用系统屏幕共享(VNC)

    文章目录 关于 屏幕共享 应用 权限开启 开始连接 使用 Apple ID 连接 使用 IP 连接 连接成功 断开连接 参考 关于 屏幕共享 应用 macOS 自带屏幕共享功能 路径为 System Library CoreServices
  • 免费ddns f3322.net使用脚本更新公网ip小记

    话说今天服务器域名访问不了 xff0c 路由器也访问不了 xff0c 另听说停电了 xff0c 估计是ddns没有更新 下午到现场一看 xff0c c7v2的ddns显示未登陆 xff0c 因为这货刷了us固件 xff0c 能用的ddnd只
  • Unresolved reference: databinding 模块化,组件化报错

    不要只在 总的 libaray 中添加 dataBinding span class token punctuation span enabled span class token operator 61 span span class t
  • Android lottie java.lang.IllegalStateException: Missing values for keyframe

    使用Lottie动画的时候 xff0c 运行发现了此报错 xff0c 版本为2 4 0 xff0c 在经过几番的测试后 xff0c 更改了资源文件和xml里面的配置也不大行 tips 一定要在xml里面配置资源文件 xff0c 当你把资源文
  • 追求技术之路 - 那些陪伴我的书籍

    如今已经在广州一家嵌入式公司实习 xff0c 分享大学里度过的一些书籍 xff0c 有些还没读完 xff0c 个人比较喜欢经典书籍 xff0c 研读起来就有种奇妙的感觉 xff0c 比起人与人之间的复杂的关系 xff0c 书籍带给我的感觉很
  • 详解蓝牙标准中的GFSK调制

    简介 GFSK是一种简单但应用广泛的调制方式 xff0c 在蓝牙和802 11等无线通信标准中都有应用 802 11跳频FHSS时所用的调制方式是GFSK 2和GFSK 4 xff0c 采用BT 61 0 5的高斯滤波器 在GFSK 2和G
  • ajax入门 不要畏惧 很简单 进了门一切都好学多了

    以前总是听别人说ajax是多么的好 xff0c 然后自己就去借了本书看 xff0c 哇塞感觉好难哦 xff0c 什么介绍javascript html css xff0c 还有很多一些东西 看的那个难啊 xff0c 然后就是硬着头皮把它给看
  • IntelliJ IDEA With Git

    记录下Git如何与IntelliJ IDEA协作 文章目录 环境准备IntelliJ IDEA With Git 开发过程1 初次获取远端代码2 查看远端仓库分支3 将指定的远端分支同步到本地 xff08 建议同远端名一致 xff09 4
  • 环形缓冲区(ringbuffer)

    环形缓冲区 xff08 ringbuffer xff09 环形缓冲区是嵌入式系统中十分重要的一种数据结构 xff0c 比如在串口处理中 xff0c 串口中断接收数据直接往环形缓冲区丢数据 xff0c 而应用可以从环形缓冲区取数据进行处理 x
  • Gson解析异常:Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 1 path $

    首先检查你的retrofit配置是否正确 xff0c 解析异常 addConverterFactory GsonConverterFactory create 在这里修改成这个gson的 Retrofit retrofit 61 new R
  • leetcode|多线程专题

    1114 按序打印 我们提供了一个类 xff1a public class Foo public void one print 34 one 34 public void two print 34 two 34 public void th
  • OpenCV实战(1)——OpenCV与图像处理基础

    OpenCV实战 xff08 1 xff09 OpenCV与图像处理基础 0 前言1 OpenCV 基础1 1 安装 OpenCV1 2 OpenCV 主要模块1 3 使用 Qt 进行 OpenCV 开发 2 OpenCV 图像处理基础2
  • 1.机器视觉标准框架学习

    在工业机器视觉上 xff0c 常见的图像处理库有opencv halcon visionpro sherlcok等 其中visionpro和sherlcok是拖拽式编程 xff0c 方便用户开发视觉项目 但对于opencv 和halcon则
  • Gitlab权限说明

    Gitlab权限管理 Gitlab用户在组中有五种权限 xff1a Guest Reporter Developer Master Owner Guest xff1a 可以创建issue 发表评论 xff0c 不能读写版本库 Reporte
  • 二进制的浪漫

    0 基本性质 0 1 交换律 相同运算符下可任意交换 xff0c 不同的运算符不可交换 0 2 结合律 相同运算符是可结合的 0 3 分配律 a amp b
  • (九)分支限界法

    分支限界法 xff08 branch and bound method xff09 按广度优先策略搜索问题的解空间树 xff0c 在搜索过程中 xff0c 对待处理的节点根据限界函数估算目标函数的可能取值 xff0c 从中选取使目标函数取得
  • (七)贪心法

    贪心法比较简单 xff0c 从这个算法的名字看来差不多都了解了 xff0c 贪心 xff0c 贪心的人是只顾一时的利益 xff0c 不顾长远的利益 贪心法把一个问复杂问题分解为一系列较为简单的局部最优选择 xff0c 每一步选择都是对当前的
  • Struts旅程(一)Struts简介和原理

    struts 简介 Struts 是 Apache 软件基金会 xff08 ASF xff09 赞助的一个开源项目 它最初是 jakarta 项目中的一 个子项目 xff0c 并在 2004 年 3 月成为 ASF 的顶级项目 它通过采用
  • Struts旅程(六)Struts页面转发控制ActionForward和ActionMapping

    上篇讲述了 struts 控制器 Action 和 DispatchAction 以及 LookupDispatchAction xff0c 本篇主要说说 struts 中的页面转发控制 xff0c struts 提供了 ActionFor
  • Hibernate旅程(四)Hibernate对数据库删除、查找、更新操作

    上篇 xff0c 我们以向数据库添加操作来演示 hibernate 持久化对象的三种状态 本节继续 hibernate 对数据库的其他操作 xff0c 删除 查询 修改 Hibernate 对数据删除操作 删除 User 表中个一条数据 x