搜索
首页Javajava教程Hibernate完成CRUD操作的代码详解

本篇文章主要介绍了Hibernate对数据库删除、查找、更新操作实例代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本节继续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);
        }
        
      }

【相关推荐】

1. 特别推荐:“php程序员工具箱”V0.1版本下载

2. Java免费视频教程

3. YMP在线手册

以上是Hibernate完成CRUD操作的代码详解的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
JVM中的类加载程序子系统如何促进平台独立性?JVM中的类加载程序子系统如何促进平台独立性?Apr 23, 2025 am 12:14 AM

类加载器通过统一的类文件格式、动态加载、双亲委派模型和平台无关的字节码,确保Java程序在不同平台上的一致性和兼容性,实现平台独立性。

Java编译器会产生特定于平台的代码吗?解释。Java编译器会产生特定于平台的代码吗?解释。Apr 23, 2025 am 12:09 AM

Java编译器生成的代码是平台无关的,但最终执行的代码是平台特定的。1.Java源代码编译成平台无关的字节码。2.JVM将字节码转换为特定平台的机器码,确保跨平台运行但性能可能不同。

JVM如何处理不同操作系统的多线程?JVM如何处理不同操作系统的多线程?Apr 23, 2025 am 12:07 AM

多线程在现代编程中重要,因为它能提高程序的响应性和资源利用率,并处理复杂的并发任务。JVM通过线程映射、调度机制和同步锁机制,在不同操作系统上确保多线程的一致性和高效性。

在Java的背景下,'平台独立性”意味着什么?在Java的背景下,'平台独立性”意味着什么?Apr 23, 2025 am 12:05 AM

Java的平台独立性是指编写的代码可以在任何安装了JVM的平台上运行,无需修改。1)Java源代码编译成字节码,2)字节码由JVM解释执行,3)JVM提供内存管理和垃圾回收功能,确保程序在不同操作系统上运行。

Java应用程序仍然可以遇到平台特定的错误或问题吗?Java应用程序仍然可以遇到平台特定的错误或问题吗?Apr 23, 2025 am 12:03 AM

Javaapplicationscanindeedencounterplatform-specificissuesdespitetheJVM'sabstraction.Reasonsinclude:1)Nativecodeandlibraries,2)Operatingsystemdifferences,3)JVMimplementationvariations,and4)Hardwaredependencies.Tomitigatethese,developersshould:1)Conduc

云计算如何影响Java平台独立性的重要性?云计算如何影响Java平台独立性的重要性?Apr 22, 2025 pm 07:05 PM

云计算显着提升了Java的平台独立性。 1)Java代码编译为字节码,由JVM在不同操作系统上执行,确保跨平台运行。 2)使用Docker和Kubernetes部署Java应用,提高可移植性和可扩展性。

Java的平台独立性在广泛采用中扮演着什么角色?Java的平台独立性在广泛采用中扮演着什么角色?Apr 22, 2025 pm 06:53 PM

Java'splatformindependenceallowsdeveloperstowritecodeonceandrunitonanydeviceorOSwithaJVM.Thisisachievedthroughcompilingtobytecode,whichtheJVMinterpretsorcompilesatruntime.ThisfeaturehassignificantlyboostedJava'sadoptionduetocross-platformdeployment,s

容器化技术(例如Docker)如何影响Java平台独立性的重要性?容器化技术(例如Docker)如何影响Java平台独立性的重要性?Apr 22, 2025 pm 06:49 PM

容器化技术如Docker增强而非替代Java的平台独立性。1)确保跨环境的一致性,2)管理依赖性,包括特定JVM版本,3)简化部署过程,使Java应用更具适应性和易管理性。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

将Eclipse与SAP NetWeaver应用服务器集成。

Dreamweaver Mac版

Dreamweaver Mac版

视觉化网页开发工具

SublimeText3 英文版

SublimeText3 英文版

推荐:为Win版本,支持代码提示!

螳螂BT

螳螂BT

Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

WebStorm Mac版

WebStorm Mac版

好用的JavaScript开发工具