Fakultas Ilmu Komputer UI

Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • muhammad.navis11/tutorial-apap
1 result
Show changes
Commits on Source (2)
......@@ -90,12 +90,15 @@ Pertanyaan 5: tambahkan 1 contoh Course lainnya sesukamu. Lalu cobalah untuk men
Jawab: Terdapat beberapa langkah untuk menyelesaikan rangkaian ini.
Pertama, Saya mengakses link untuk menambahkan course seperti
http://localhost:8080/course/add?code=GAMEDEV&nameCourse=Game%20Development&description=Ini%20contoh%20untuk%20penambahan%20matkul%20gamedev&jumlahSks=101
Pertama, Saya menambahkan mata kuliah gamedev
![alt text](image.png)
Kemudian, Saya langsung mengakses link untuk view all
![alt text](image-1.png)
dapat dilihat bahwa ketika mengakses view all, terdapat dua course baru berkode gamedev
Selanjutnya kita bisa langsung mengakses link viewAll untuk melihat daftar lengkap course yang telah ditambahkan.
TODO: masukkan screenshot. untuk sementara belum bisa dilakukan karena lupa harus revert kemana soalnya udah terlanjur jauh ngerjainnya :D
### Pertanyaan Tutorial 2
......@@ -153,88 +156,4 @@ https://www.baeldung.com/hibernate-lazy-eager-loading
### What I did not understand
Saya tidak memahami kenapa pada tutorial ini rasanya sangat padat sekali dan tidak memberikan ruang untuk mempelajari setiap stepnya. Pada tutorial kali ini, banyak sekali eror yang tidak Saya mengerti yang datang tiba-tiba. Dan anehnya, eror-eror tersebut muncul setelah Saya mengerjakan keseluruhan tutorial 2. Sebelumnya, hingga Saya berhasil melakukan setup MVC pada repo ini, tidak ada eror sama sekali dan semuanya berjalan lancar.
## Tutorial 2
### Pertanyaan MVC
Pertanyaan 1: Cobalah untuk menambahkan sebuah Course dengan mengakses link berikut: http://localhost:8080/course/add?code=APAP&nameCourse=APAP%20Tutorial2&description=2020%20Fasilkom&jumlahSks=3
Apa yang terjadi? Jelaskan mengapa hal tersebut dapat terjadi.
Jawab: Ketika pertanyaan ini ditanyakan, seharusnya akan muncul White Page Error dengan kode `500 Internal Server Error` karena Controller tidak dapat menampilkan laman `add-course.html` dikarenakan laman view tersebut belum diciptakan.
Pertanyaan 2: Menurut kamu anotasi @Autowired pada class Controller tersebut merupakan implementasi dari konsep apa? Dan jelaskan secara singkat cara kerja @Autowired tersebut dalam konteks service dan controller yang telah kamu buat.
Jawab: Anotasi @Autowired pada class Controller berfungsi sebagai pengganti setter, getter, dan/atau constructor secara manual dan eksplisit. Karena @Autowired merupakan implementasi dari konsep Dependency Injection (DI) dan memungkinkan developer untuk memasukkan dependensi objek secara implisit.
Pertanyaan 3: Cobalah untuk menambahkan sebuah Course dengan mengakses link berikut: http://localhost:8080/course/add?code=APAP&nameCourse=APAP%20Tutorial2&jumlahSks=3 Apa yang terjadi? Jelaskan mengapa hal tersebut dapat terjadi.
Jawab: Akan muncul White Page Error dengan kode `400 Bad Request` karena pada path yang dituju tidak dideskripsikan parameter yang lengkap dimana parameter `description` belum ada di dalam link tersebut. Sedangkan pada controller page terkait, dalam kasus ini untuk add course, keberadaan parameter `description` diwajibkan untuk ada pada link.
Pertanyaan 4: Jika ingin melihat Course dengan kode APAP, link apa yang harus diakses?
Jawab: Pertama, harus mengakses link yang bertujuan untuk menambahkan course baru. Seperti contohnya, http://localhost:8080/course/add?code=APAP&nameCourse=APAP%20Tutorial2&description=2020%20Fasilkom&jumlahSks=3 barulah kemudian mengakses sebuah link http://localhost:8080/course/view?code=APAP untuk mencari course dengan kode "APAP". Jika ingin mencari yang lain, tinggal mengubah kode "APAP" menjadi yang lain sesuai dengan yang ingin dicari.
Pertanyaan 5: tambahkan 1 contoh Course lainnya sesukamu. Lalu cobalah untuk mengakses http://localhost:8080/course/viewAll, apa yang akan ditampilkan? Sertakan juga bukti screenshotmu.
Jawab: Terdapat beberapa langkah untuk menyelesaikan rangkaian ini.
Pertama, Saya mengakses link untuk menambahkan course seperti
http://localhost:8080/course/add?code=GAMEDEV&nameCourse=Game%20Development&description=Ini%20contoh%20untuk%20penambahan%20matkul%20gamedev&jumlahSks=101
Selanjutnya kita bisa langsung mengakses link viewAll untuk melihat daftar lengkap course yang telah ditambahkan.
TODO: masukkan screenshot. untuk sementara belum bisa dilakukan karena lupa harus revert kemana soalnya udah terlanjur jauh ngerjainnya :D
### Pertanyaan Tutorial 2
1. Tolong jelaskan secara singkat apa kegunaan dari anotasi-anotasi yang ada pada model
(@AllArgsConstructor, @NoArgsConstructor, @Setter, @Getter, @Entity, @Table)
Jawab:
@AllArgsConstructor merupakan anotasi untuk generate constructor dengan satu parameter untuk setiap field pada kelas
@NoArgsConstructor merupakan anotasi untuk generate construktor yang tidak memiliki parameter untuk setiap field pada kelas
@Setter merupakan anotasi `Lombok` untuk generate method Setter
@Getter merupakan anotasi `Lombok` untuk generate method Getter
@Entity merupakan anotasi untuk menandakan bahwa class tersebut adalah JPA entity dan telah di-map ke sebuah tabel database
@Table merupakan anotasi untuk menspesifikasikan nama tabel database yang digunakan untuk mapping
2. Pada class CourseDb, terdapat method findByCodeUsingQuery dan findByCode, apakah
perbedaan kedua method tersebut? Jelaskan juga kegunaan @Query pada method
findByCodeUsingQuery!
Jawab: Anotasi @Query berfungsi untuk mendeklarasikan kueri finder ke repository method secara langsung
3. Jelaskan perbedaan kegunaan dari anotasi @JoinTable dan @JoinColumn
Jawab:
@JoinTable menyimpan ID dari kedua tabel ke dalam tabel terpisah. Penggunaan @JoinTable sangat sesuai untuk memetakan relasi many-to-many, sehingga mengurangi risiko redundansi data.
@JoinColumn menyimpan ID dari tabel lain dalam kolom baru. Penggunaan @JoinColumn dapat meningkatkan kinerja dan efisiensi karena tidak memerlukan penggabungan tabel tambahan.
4. Pada class Pengajar, digunakan anotasi @JoinColumn pada atribut Course, apa kegunaan dari
name, referencedColumnName, dan nullable dalam anotasi tersebut? dan apa perbedaan
nullable dan penggunaan anotasi @NotNull
Jawab: Name adalah ID yang digunakan untuk menentukan kolom kunci asing.
referencedColumnName digunakan untuk menentukan nama kolom dalam tabel yang menjadi referensi oleh kolom kunci asing.
@Nullable digunakan untuk mendeklarasikan bahwa parameter atau nilai pengembalian yang dianotasi dapat bernilai null dalam kondisi tertentu.
Perbedaan antara @NotNull dan @Nullable adalah @NotNull secara eksplisit menyatakan bahwa metode tidak boleh mengembalikan nilai null dan field dengan anotasi @NotNull tidak boleh bernilai null, sedangkan @Nullable menyatakan bahwa metode tersebut dapat mengembalikan nilai null.
5. Jelaskan kegunaan FetchType.LAZY, CascadeType.ALL, dan FetchType.EAGER
Jawab:
FetchType.LAZY hanya memuat atribut-atribut yang diperlukan. Ini berbeda dengan FetchType.EAGER yang memuat semua atribut secara bersamaan.
CascadeType.ALL menyediakan properti kaskade pada hubungan, sehingga ketika melakukan operasi pembaruan dan penghapusan, entitas lain yang berelasi dengan entitas tersebut juga akan ikut berubah.
Referensi :
https://projectlombok.org/features/GetterSetter
https://projectlombok.org/features/constructor
https://www.baeldung.com/jpa-join-column
https://www.objectdb.com/api/java/jpa/JoinColumn/referencedColumnName
https://www.baeldung.com/hibernate-lazy-eager-loading
Saya tidak memahami kenapa pada tutorial ini rasanya sangat padat sekali dan tidak memberikan ruang untuk mempelajari setiap stepnya. Pada tutorial kali ini, banyak sekali eror yang tidak Saya mengerti yang datang tiba-tiba. Dan anehnya, eror-eror tersebut muncul setelah Saya mengerjakan keseluruhan tutorial 2. Sebelumnya, hingga Saya berhasil melakukan setup MVC pada repo ini, tidak ada eror sama sekali dan semuanya berjalan lancar.
\ No newline at end of file
image-1.png

155 KiB

image.png

140 KiB