hibernate增删改查操作代码

 更新时间:2017年09月11日 14:50:10   作者:动力节点  
这篇文章主要介绍了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对象.
     User user =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方法.
  List userList = query.list();
  //迭代器去迭代.
  for(Iterator iter=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方法.
  List userList = query.list();
  //迭代器去迭代.
  for(Iterator iter=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);
    }
   }

总结

以上所述是小编给大家介绍的hibernate增删改查操作代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • SpringSecurity动态加载用户角色权限实现登录及鉴权功能

    SpringSecurity动态加载用户角色权限实现登录及鉴权功能

    这篇文章主要介绍了SpringSecurity动态加载用户角色权限实现登录及鉴权功能,很多朋友感觉这个功能很难,今天小编通过实例代码给大家讲解,需要的朋友可以参考下
    2019-11-11
  • spring为java.util.Properties类型的属性进行赋值过程解析

    spring为java.util.Properties类型的属性进行赋值过程解析

    这篇文章主要介绍了spring为java.util.Properties类型的属性进行赋值过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • 讨论分析JDK17是否会代替JDK8

    讨论分析JDK17是否会代替JDK8

    这篇文章主要为大家介绍了JDK17是否会代替JDK8的问题分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • 基于Redis实现分布式应用限流的方法

    基于Redis实现分布式应用限流的方法

    本篇文章主要介绍了基于 Redis 实现分布式应用限流的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-12-12
  • java操作ElasticSearch聚合查询的示例代码

    java操作ElasticSearch聚合查询的示例代码

    这篇文章主要介绍了java操作ElasticSearch聚合查询的示例代码,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧
    2024-08-08
  • Spring Boot 启动、停止、重启、状态脚本

    Spring Boot 启动、停止、重启、状态脚本

    今天给大家分享Spring Boot 项目脚本(启动、停止、重启、状态),通过示例代码给大家介绍的非常详细,需要的朋友参考下吧
    2021-06-06
  • Java中常用的设计模式之工厂模式详解

    Java中常用的设计模式之工厂模式详解

    这篇文章主要为大家详细介绍了Java中常用的设计模式之工厂模式,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-02-02
  • Java超细致讲解数组的使用

    Java超细致讲解数组的使用

    数组对于每一门编程语言来说都是重要的数据结构之一,当然不同语言对数组的实现及处理也不尽相同。Java 语言中提供的数组是用来存储固定大小的同类型元素
    2022-05-05
  • 深入理解spring boot 监控

    深入理解spring boot 监控

    今天通过本文给大家介绍关于spring boot 监控的相关知识,引入jar包的实例代码文中也给大家详细介绍,对spring boot 监控相关知识感兴趣的朋友一起看看吧
    2021-10-10
  • SpringBoot实现动态加载外部Jar流程详解

    SpringBoot实现动态加载外部Jar流程详解

    这篇文章主要介绍了SpringBoot动态加载外部Jar的流程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2023-05-05

最新评论