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增删改查操作代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对小牛知识库网站的支持!
主要内容:插入记录,修改记录,删除记录,查询数据接下来,我们将介绍 Hibernate 是如何实现对数据库的增删改查(CRUD)操作的。 插入记录 Hibernate 在 Session 接口中为我们提供了一个 save() 方法,该方法可以向据库表中插入记录。 1. 在测试类 MyTest 中,创建一个名称为 testInsert 的方法,代码如下。 2. 运行测试方法 testInsert(),控制台输出如下。 3. 查询数据库 user
本文向大家介绍node.js操作mysql(增删改查),包括了node.js操作mysql(增删改查)的使用技巧和注意事项,需要的朋友参考一下 最近这段时间研究Node感觉不错,自己做了一个增删改查,虽然有些简陋,但是思想是想通的,其实所有项目都是增删改查,有助于初学者快速掌握Node 首先 本实例展示的是基于Node+Express+node-mysql快速搭建的一套增删改查,视图模板是jad
一、前言 在第二章《Memcached源码分析 - Memcached源码分析之命令解析(2)》 和第三章《Memcached源码分析 - Memcached源码分析之消息回应(3)》 中我们主要通过Memcached的get命令,分析了Memcached的命令解析和消息回应的模块功能。这一章,我们主要来详细看一下Memcached常用的增删改查操作。 在看Memcached的增删改查操作前,我们
本文向大家介绍Jquery对select的增、删、改、查操作,包括了Jquery对select的增、删、改、查操作的使用技巧和注意事项,需要的朋友参考一下 逃不开传统的四种操作:增、删、改、查。 <四处搜刮了jquery对select操作的代码,汇集一下,方便以后查看。日历天数变化代码为原创。> [增]: [删]: [改](设置选中项): [查](获取选中值): 1.获取选中项的value 附上代
本文向大家介绍hibernate通过session实现增删改查操作实例解析,包括了hibernate通过session实现增删改查操作实例解析的使用技巧和注意事项,需要的朋友参考一下 今天学习了一下如何通过hibernate来实现对数据库的增删改查,下面来简单介绍一下: 首先创建个Student类: 然后创建个JUnit Test Case类型的TeacherTest: 先讲讲session.sa
本文向大家介绍Node.js操作mysql数据库增删改查,包括了Node.js操作mysql数据库增删改查的使用技巧和注意事项,需要的朋友参考一下 关于node.js操作mysql数据库的相关介绍请阅读全文吧。下文介绍的非常详细,具体内容如下所示: 安装mysql模块 数据库准备 mysql server所在的机器IP地址是192.168.0.108,登录账户就用root@123456 在mys