• 技术文章 >Java >java教程

    Hibernate完成CRUD操作的代码详解

    Y2JY2J2017-05-13 11:06:41原创600
    本篇文章主要介绍了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核实处理。
    上一篇:java实现插入排序的实例详解 下一篇:java希尔排序的实例详解
    20期PHP线上班

    相关文章推荐

    • 【活动】充值PHP中文网VIP即送云服务器• 一文带你认识Java栈和队列• 一文掌握Java8新特性Stream流的概念和使用• Java线程学习之并发编程知识点• 完全掌握Java中的抽象类和接口• Java中的set集合如何理解
    1/1

    PHP中文网