当前位置: 移动技术网 > IT编程>开发语言>Java > Hibernate对数据库删除、查找、更新操作实例代码

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

2019年07月22日  | 移动技术网IT编程  | 我要评论

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

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网