首页 > 开发 > Java > 正文

hibernate增删改查操作代码

2024-07-13 10:12:00
字体:
来源:转载
供稿:网友

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增删改查操作代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对VeVb武林网网站的支持!


注:相关教程知识阅读请移步到JAVA教程频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表