Hibernate完成CRUD操作的代码详解
本篇文章主要介绍了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在线手册
Atas ialah kandungan terperinci Hibernate完成CRUD操作的代码详解. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Panduan untuk Square Root di Java. Di sini kita membincangkan cara Square Root berfungsi di Java dengan contoh dan pelaksanaan kodnya masing-masing.

Panduan Nombor Sempurna di Jawa. Di sini kita membincangkan Definisi, Bagaimana untuk menyemak nombor Perfect dalam Java?, contoh dengan pelaksanaan kod.

Panduan untuk Penjana Nombor Rawak di Jawa. Di sini kita membincangkan Fungsi dalam Java dengan contoh dan dua Penjana berbeza dengan contoh lain.

Panduan untuk Weka di Jawa. Di sini kita membincangkan Pengenalan, cara menggunakan weka java, jenis platform, dan kelebihan dengan contoh.

Panduan untuk Nombor Smith di Jawa. Di sini kita membincangkan Definisi, Bagaimana untuk menyemak nombor smith di Jawa? contoh dengan pelaksanaan kod.

Dalam artikel ini, kami telah menyimpan Soalan Temuduga Spring Java yang paling banyak ditanya dengan jawapan terperinci mereka. Supaya anda boleh memecahkan temuduga.

Java 8 memperkenalkan API Stream, menyediakan cara yang kuat dan ekspresif untuk memproses koleksi data. Walau bagaimanapun, soalan biasa apabila menggunakan aliran adalah: bagaimana untuk memecahkan atau kembali dari operasi foreach? Gelung tradisional membolehkan gangguan awal atau pulangan, tetapi kaedah Foreach Stream tidak menyokong secara langsung kaedah ini. Artikel ini akan menerangkan sebab -sebab dan meneroka kaedah alternatif untuk melaksanakan penamatan pramatang dalam sistem pemprosesan aliran. Bacaan Lanjut: Penambahbaikan API Java Stream Memahami aliran aliran Kaedah Foreach adalah operasi terminal yang melakukan satu operasi pada setiap elemen dalam aliran. Niat reka bentuknya adalah

Panduan untuk TimeStamp to Date di Java. Di sini kita juga membincangkan pengenalan dan cara menukar cap waktu kepada tarikh dalam java bersama-sama dengan contoh.
