

Pustaka lan standar
52. Apa Hibernate? Apa bedane JPA lan Hibernate?
Kanggo njawab pitakonan iki, aku kudu ngerti apa JPA. Iki minangka spesifikasi sing njlèntrèhaké pemetaan obyek-relasional saka obyek Jawa sing prasaja lan nyedhiyakake API kanggo nyimpen, njupuk, lan ngapusi obyek kasebut. Tegese, basis data relasional (DB) diwakili minangka sakumpulan tabel sing saling gegandhengan. Lan JPA minangka standar sing diadopsi sacara luas sing nggambarake carane obyek bisa sesambungan karo database relasional. Kaya sing sampeyan ngerteni, JPA minangka sesuatu sing abstrak lan ora nyata. Iku kaya gagasan dhewe, pendekatan.
53. Apa sing diarani cascading? Kepiye cara digunakake ing Hibernate?
Kaya sing dakkandhakake sadurunge, komunikasi ing Hibernate dumadi liwat obyek data sing diarani entitas. Entitas iki makili tabel tartamtu ing database, lan sing bakal kelingan, kelas Jawa bisa ngemot referensi kanggo kelas liyane. Hubungan kasebut uga dibayangke ing basis data. Minangka aturan, iku salah siji tombol manca (kanggo OneToOne, OneToMany, ManyToOne sesambetan) utawa intermediate tabel (kanggo ManyToMany sesambetan). Nalika entitas sampeyan duwe referensi menyang entitas liyane sing gegandhengan, anotasi diselehake ing ndhuwur referensi kasebut kanggo nuduhake jinis hubungan: @OneToOne, @OneToMany, @ManyToOne, @ManyToMany. Sampeyan bisa nemtokake jinis kaskade kanggo hubungan iki ing properti kaskade anotasi. JPA duwe cara khusus kanggo sesambungan karo entitas (terus, nyimpen, gabung ...). Jinis kaskade digunakake kanggo nuduhake carane data sing gegandhengan kudu tumindak; cara iki digunakake ing entitas target. Dadi apa strategi cascading (jinis kaskade)? Standar JPA nyedhiyakake panggunaan enem jinis kaskade:-
PERSIST - operasi nyimpen dumadi ing cascade (kanggo nyimpen () lan persist () cara). Ing tembung liya, yen kita nyimpen entitas sing ana hubungane karo entitas liyane, mula entitas kasebut uga disimpen ing database (yen durung ana)
-
MERGE - operasi nganyari dumadi ing kaskade (kanggo metode gabungan () )
-
Mbusak - mbusak operasi dumadi ing cascade ( mbusak () cara)
-
ALL - ngemot telung operasi cascading bebarengan - PERSIST - MERGE - Mbusak
-
DETACH - entitas sing gegandhengan ora dikelola dening sesi ( metode detach() ). Yaiku, nalika data entitas sing gegandhengan diganti, data ing basis data ora dianyari kanthi otomatis — diowahi saka terus-terusan dadi suwek (yaiku entitas kasebut ora dikelola dening JPA)
-
REFRESH - saben-saben entitas dianyari karo data saka database ( refresh () - refresh obyek suwek), entitas sing gegandhengan uga dianyari. Contone, sampeyan ngganti data sing dijupuk saka database, lan sampeyan pengin mulihake nilai asli. Ing kasus iki, sampeyan bakal nemokake operasi iki migunani.

-
REPLICATE - digunakake nalika kita duwe luwih saka siji sumber data lan kita pengin data disinkronake (metode replika Hibernate). Kabeh entitas kudu duwe pengenal (id) kanggo mesthekake yen bisa digawe tanpa masalah (kanggo mesthekake yen entitas sing padha ora duwe id sing beda kanggo basis data sing beda)
-
SAVE_UPDATE - nyimpen / mbusak runtun (kanggo metode saveOrUpdate Hibernate )
-
KUNCI - kebalikan saka operasi DETACHED : ngowahi entitas sing dicopot bali menyang negara sing terus-terusan, yaiku, sesi saiki bakal nglacak entitas kasebut maneh
54. Apa kelas Entitas bisa abstrak?
Miturut 2.1 Kelas Entitas saka spesifikasi JPA , " Kelas abstrak lan konkrit bisa dadi entitas. " Dadi, jawabane ya, kelas abstrak bisa dadi entitas lan bisa ditandhani karo anotasi @Entity.55. Apa manajer entitas? Apa tanggung jawabe?
Kaping pisanan, aku pengin nyathet yen EntityManager minangka komponen penting JPA . Iki digunakake kanggo interaksi entitas karo database. Umumé, cara kanggo interaksi entitas karo database diarani entitas (terus, gabung, mbusak, copot) ... Nanging aku uga Wigati sing komponen iki biasane ora singleton kanggo kabeh aplikasi. Asring entheng, siji dibusak, lan sing anyar digawe nggunakake EntityManagerFactory . Yen kita nggambar paralel karo JDBC , ing ngendi EntityManagerFactory padha karo DataSource , banjur EntityManager padha karo Connection . Sadurunge, aku nyatakake yen entitas sing terus-terusan minangka entitas sing dikelola dening sambungan saiki. Entitas iki dikelola dening EntityManager , sing ana hubungane karo sambungan saiki, lan TransactionManager , sing tanggung jawab kanggo mbukak / nutup transaksi. Ing gambar ing ngisor iki, sampeyan bisa ndeleng siklus urip entitas:
56. Apa kelas Assert? Kenapa digunakake?
Aku wis ora krungu saka kelas kuwi ing JPA , aku bakal nganggep yen pitakonan iki nuduhake kelas ditemokaké ing perpustakaan JUnit sing digunakake kanggo tes unit. Ing perpustakaan iki, kelas Assert digunakake kanggo mriksa asil eksekusi kode (kene negesake tegese pratelan yen sampeyan duwe negara / data tartamtu ing lokasi tartamtu ing kode kasebut). Contone, ayo ngomong sampeyan nyoba cara sing mesthine nggawe kucing. Sampeyan mbukak cara lan sampeyan entuk sawetara asil:Cat resultOfTest = createCat();
Nanging sampeyan kudu nggawe manawa digawe kanthi bener, ta? Dadi sampeyan kanthi manual nggawe kucing tartamtu ( expectedCat ) kanthi persis paramèter sing dikarepake ing kucing sing dipikolehi saka cara createCat () . Banjur sampeyan nggunakake kelas Assert kanggo verifikasi asil:
Assert.assertEquals(resultOfTest, expectedCat);
Yen kucing beda, banjur AssertionError bakal dibuwang, sing ngandhani yen kita ora entuk asil sing dikarepake. Kelas Assert nduweni macem-macem cara sing nyakup macem-macem operasi sing mbiyantu kanggo verifikasi asil sing dikarepake. Ing ngisor iki sawetara:
-
assertTrue(<boolean>) - nilai sing diterusake minangka argumen dikira bener
-
assertFalse(<boolean>) - nilai sing diterusake minangka argumentasi dianggep palsu
-
assertNotEquals(<object1>, <object2>) — obyek sing dilewati minangka argumen kudu beda yen dibandhingake nggunakake equals ( false )
-
assertThrows(<ClassNameOfException>.class, <exceptionObject>) — argumen kaloro wis samesthine dadi pangecualian sing dibuwang dening argumentasi pisanan (yaiku argumentasi kaloro biasane telpon metode sing kudu mbuwang pengecualian saka jinis sing dibutuhake)
String
57. Nerangake kelas String Jawa
String minangka kelas Java standar sing tanggung jawab kanggo nyimpen lan manipulasi nilai string (urutan karakter). Iku kelas immutable (Aku wrote bab immutable sadurunge kene ), IE, data obyek saka kelas iki ora bisa diganti sawise padha digawe. Aku kaya kanggo Wigati langsung sing kelas StringBuilder lan StringBuffer ateges podho rupo - mung prabédan sing siji saka wong-wong mau dimaksudaké kanggo nggunakake ing lingkungan multithreaded ( StringBuffer ). Kelas iki kaya String , nanging beda amarga bisa diowahi . Sanajan wis digawe, sampeyan ngidini sampeyan ngowahi senar sing diwakili, tanpa nggawe obyek anyar. Cara kasebut beda karo metode String standar lan dirancang kanggo manipulasi senar (ana alesan sing diarani tukang).58. Apa cara kanggo nggawe obyek String? Ing ngendi iku digawe?
Cara sing paling umum kanggo nggawe senar yaiku nemtokake nilai sing dikarepake ing tandha petik dobel:String str = "Hello World!";
Sampeyan uga bisa nindakake kanthi eksplisit nggunakake anyar :
String str = new String("Hello World!");
Sampeyan uga bisa nggawe string saka macem-macem karakter:
char[] charArr = {'H','e','l','l','o',' ', 'W','o','r','l','d','!'};
String str = new String(charArr);
Kita bisa nindakake kanthi nelpon metode toString ing sawetara obyek:
String str = someObject.toString();
Kita bisa nindakake kanthi nelpon cara liya sing ngasilake senar. Tuladha:
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String str = reader.readLine();
Sampeyan ngerti manawa ana akeh cara kanggo nggawe senar. Nalika obyek String digawe, disimpen ing blumbang senar , kang bakal kita rembugan luwih rinci ing salah siji pitakonan ing ngisor iki.
59. Kepriye carane mbandhingake rong senar Jawa, lan kepriye anggone ngurutake?
Jawa nggunakake tandha padha ( == ) kanggo nindakake mbandhingake. Yen kita kudu mbandhingake nilai-nilai prasaja kaya ints, kita bakal nggunakake. Nanging cara iki ora cocok kanggo mbandhingake obyek lengkap. Iku mung bakal mbandhingaké referensi, IE apa referensi nuding obyek padha utawa ora. Iki tegese yen kita mbandhingake rong obyek kanthi nilai lapangan sing padha nggunakake == , kita bakal entuk palsu . Kothak kasebut nduweni nilai sing padha, nanging obyek kasebut manggoni lokasi sing beda ing memori. Objek string , sanajan kesederhanaan sing ngapusi, isih dadi obyek. Mbandhingake nggunakake == uga ora cocok (senadyan ana blumbang senar). Solusi sing tepat yaiku metode standar kelas Obyek , sing kudu diganti supaya bisa digunakake kanthi bener (kanthi standar, nggunakake == kanggo mbandhingake). Kelas String ngatasi, mula kita nggunakake implementasine:String firstStr = "Hello World!";
String secondStr = "Hello World!";
boolean isEquals = firstStr.equals(secondStr);

TreeSet<String> sortedSet = new TreeSet<>();
sortedSet.add("B");
sortedSet.add("C");
sortedSet.add("A");
sortedSet.forEach(System.out::println);
Output konsol:
60. Nyedhiyani algoritma kanggo ngowahi senar kanggo karakter. Tulis kode sing cocog
Kaya sing dakkandhakake sadurunge, obyek String duwe macem-macem cara sing migunani. Salah sijine yaiku toCharArray . Cara iki ngowahi string dadi array karakter:String str = "Hello world";
char[] charArr = str.toCharArray();
Sabanjure, kita duwe macem-macem karakter sing bisa dirujuk kanthi indeks:
char firstChar = charArr[0]; // H
61. Kepiye carane sampeyan ngowahi string menyang array byte lan bali? Tulis kode sing cocog
Kelas String nduweni metode getBytes , sing padha karo metode toCharArray lan ngasilake string minangka array byte:String str = "Hello world";
byte[] byteArr = str.getBytes();
byte firstChar = byteArr[6]; // 119
Kita wis teka ing kesimpulan logis saka review kita dina iki. Matur nuwun kanggo maca!
GO TO FULL VERSION