Hibernate对数据库删除、查找、更新操作实例代码

发布时间 - 2026-01-11 00:56:49    点击率:

本节继续hibernate对数据库的其他操作,删除、查询、修改。

Hibernate对数据删除操作

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

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

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

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

然后我们通过get或load加载上来对应user表id的对象,再调用session的delete方法删除该对象同时删除表中的一条记录,代码如下所示。

第一种删除方式

 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对象,调用session的update()方法,代码如下所示。

      //测试方法以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);
        }
        
      }

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

 //测试方法以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);
        }
        
      }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# hibernate4操作数据库  # hibernate查询数据库  # hibernate更新数据库  # Hibernate中Session增删改查操作代码详解  # hibernate通过session实现增删改查操作实例解析  # hibernate增删改查操作代码  # 全面解析Hibernate关联操作、查询操作、高级特性、并发处理机制  # hibernate批量操作实例详解  # Java的Hibernate框架数据库操作中锁的使用和查询类型  # Java的Hibernate框架中用于操作数据库的HQL语句讲解  # Hibernate单表操作实例解析  # 加载  # 所示  # 不存在  # 抛出  # 是一个  # 迭代  # 几个  # 分页  # 当我们  # 此种  # 的是  # 而不是  # 法会  # 第一个  # 一是  # 才会  # 两种  # 对其  # 不支持  # 什么地方 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)  如何在IIS中新建站点并配置端口与IP地址?  Laravel怎么使用Blade模板引擎_Laravel模板继承与Component组件复用【手册】  EditPlus中的正则表达式实战(5)  Android okhttputils现在进度显示实例代码  如何快速查询网站的真实建站时间?  如何用AWS免费套餐快速搭建高效网站?  家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?  如何彻底删除建站之星生成的Banner?  油猴 教程,油猴搜脚本为什么会网页无法显示?  在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?  Laravel怎么实现搜索功能_Laravel使用Eloquent实现模糊查询与多条件搜索【实例】  详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)  如何快速打造个性化非模板自助建站?  node.js报错:Cannot find module 'ejs'的解决办法  成都品牌网站制作公司,成都营业执照年报网上怎么办理?  Laravel怎么清理缓存_Laravel optimize clear命令详解  Gemini手机端怎么发图片_Gemini手机端发图方法【步骤】  Laravel怎么发送邮件_Laravel Mail类SMTP配置教程  如何续费美橙建站之星域名及服务?  Windows10电脑怎么设置虚拟光驱_Win10右键装载ISO镜像文件  Laravel表单请求验证类怎么用_Laravel Form Request分离验证逻辑教程  如何实现javascript表单验证_正则表达式有哪些实用技巧  长沙做网站要多少钱,长沙国安网络怎么样?  桂林网站制作公司有哪些,桂林马拉松怎么报名?  UC浏览器如何设置启动页 UC浏览器启动页设置方法  Gemini怎么用新功能实时问答_Gemini实时问答使用【步骤】  网站制作企业,网站的banner和导航栏是指什么?  潮流网站制作头像软件下载,适合母子的网名有哪些?  Laravel如何处理跨站请求伪造(CSRF)保护_Laravel表单安全机制与令牌校验  制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?  Laravel Livewire是什么_使用Laravel Livewire构建动态前端界面  如何基于PHP生成高效IDC网络公司建站源码?  php结合redis实现高并发下的抢购、秒杀功能的实例  php 三元运算符实例详细介绍  Laravel怎么配置S3云存储驱动_Laravel集成阿里云OSS或AWS S3存储桶【教程】  微信小程序 五星评分(包括半颗星评分)实例代码  如何在万网利用已有域名快速建站?  香港服务器建站指南:外贸独立站搭建与跨境电商配置流程  如何用美橙互联一键搭建多站合一网站?  北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?  如何在HTML表单中获取用户输入并结合JavaScript动态控制复利计算循环  Laravel怎么使用Collection集合方法_Laravel数组操作高级函数pluck与map【手册】  如何快速选择适合个人网站的云服务器配置?  如何获取PHP WAP自助建站系统源码?  Laravel的Blade指令怎么自定义_创建你自己的Laravel Blade Directives  微信小程序 HTTPS报错整理常见问题及解决方案  Win11搜索栏无法输入_解决Win11开始菜单搜索没反应问题【技巧】  Angular 表单中正确绑定输入值以确保提交与验证正常工作  Laravel如何集成Inertia.js与Vue/React?(安装配置)