Belajar Membuat Restful dengan Spring Boot (JPA & MySQL) [Part 2]
terlebih dahulu lakukan instalasi di tutorial ini
Dependencies:
- DevTools
- JPA
- MySQL
Membuat project baru
Buka aplikasi STS. Kemudian klik
File > New > New Spring Starter Project.
Beri nama pada bagian project, description, packagce dan lain lain kemudian klik next.
Pada bagian dependency, tambahkan dependency DevTools, Web, JPA, dan MySQL. Kita bisa mencari dependency tersebut di kolom pencarian kemudian klik finish.
STS akan secara otomatis mendownload dependency yang dibutuhkan. Kita bisa mendownload maven dengan cara menekan Alt+F5 atau klik kanan pada project > maven > update project..
Hasil struktur direktori nya
Kita bisa menambahkan dependency baru dengan cara buka file pom.xml di direktori dan memasukan dependency baru diantara tag <dependencies> </ dependency>. Kemudian update project lagi
Membuat database dan konfigurasi
Buka xampp dan buat database baru dengan nama “spring_book” tanpa tanda kutip.
Pada STS direktori src/main/resource buka application.properties dan ketikan :
spring.datasource.url = jdbc:mysql://localhost:3306/spring_book?useSSL=false
spring.datasource.username =rootspring.datasource.password =spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialectspring.jpa.hibernate.ddl-auto = update
- spring.datasource.url diisi alamat database yang tadi telah dibuat, yaitu spring_book
- spring.datasource.username dan spring.datasource.password diisi username dan password pada database tersebut
- spring.jpa.hibernate.ddl-auto = update digunakan agar JPA secara otomatis memetakan setiap perubahan model. Sebagai contoh, table akan secara otomaris dibuat apabila belum ada dan akan meng-update setiap perubahan nama.
Membuat model
Kita akan membuat model “buku” dengan penamaan mengikuti camelcase java dan penjelasan :
- Id : id pada buku, dengan autoincrement
- titleBook : String judul pada buku, NOT NULL
- namaDepanPengarang : String nama depan pengarang, NOT NULL
- namaBelakangPengarang : String nama belakang pengarang, NOT NULL
- statusPeminjaman : int status peminjaman, NOT NULL
- namaPeminjam : String nama peminjam, NOT NULL
- createdAt : Date pembuatan buku, TIMESTAMP
- updatedAt : Date update pada buku, TIMESTAMP
Tambahkan package model pada project, dengan cara klik kanan pada
package com.example.springbook > new > package
Pada bagian name, ketikan
com.example.springbook.model
Buat class pada package tersebut dengan nama “Buku.java”. kemudian ketikan :
@Entity @Table(name = “books”)@EntityListeners(AuditingEntityListener.class)@JsonIgnoreProperties(value = {“createdAt”, “updatedAt”}, allowGetters = true)
- @Table digunakan untuk membuat table baru dengan nama “books”
- @EntityListeners(AuditingEntityListener.class) merupakan entity dari JPA yang digunakan untuk meng-update data
- @JsonIgnoreProperties(value = {“createdAt”, “updatedAt”}, allowGetters = true) digunakan agar data pada variable tersebut tidak bisa dimasukan secara manual.
Dalam class berisi :
@Id@GeneratedValue(strategy = javax.persistence.GenerationType.AUTO)private Long id;@NotBlankprivate String titleBook;@NotBlankprivate String namaDepanPengarang;@NotBlankprivate String namaBelakangPengarang;@NotBlankprivate int statusPeminjaman;@NotBlankprivate String namaPeminjam;@Column(nullable = false, updatable = false)@Temporal (TemporalType.TIMESTAMP)@CreatedDateprivate Date createdAt;@Column(nullable = false)@Temporal(TemporalType.TIMESTAMP)@LastModifiedDateprivate Date updatedAt;
- @Id digunakan untuk memdefinisikan primary key
- @GeneratedValue
- @NotBlank digunakan agar isi pada field nya NOT NULL
- @Column digunakan untuk memberikan pengaturan tambahan pada kolom tersebut
- @Temporal digunakan untuk merubah data berupa tanggal dan waktu dari database dan ke database
- @CreatedDate digunakan untuk mendapatkan waktu dibuatnya data
- @LastModifiedDate digunakan untuk mendapatkan waktu terakhir data diedit
Spring akan otomatis membuat atau membaca kolom dari database berdasarkan camelcase dengan underscore. Contoh namaPeminjam akan dibuat atau dibaca dari kolom nama_peminjam pada database
Kemudian tambahkan getter dan setter pada project dengan cara klik kanan > source > generate getter and setter
keseluruhan isi class Buku.java
Enable JPA
Tambahkan anotasi @EnableJpaAuditing pada class SpringBookAplicaiton.java sehingga menjadi
Membuat repository
Repository digunakan untuk mengakses data dari database. Pada dokumentasi ini, kita menggunakan JpaRepository
Buat package baru dengan nama com.example.springbook.repository
Tambahkan class baru dengan nama BukuRepository.java
tambahkan implements JpaRepository <Buku, Long> dan anotasi @Repository
di dalam class, tambahkan query sebagai berikut :
List<Buku> findByStatusPeminjaman (int statusPeminjaman);List<Buku> findByTitleBook(String titleBook);
kita bisa melihat query lain pada dokumentasi JPA disini
hasil keseluruhan
Membuat controller
Buat package baru dengan nama com.example.springbook.repository
Tambahkan class dengan nama BukuController.java
Tambahkan anotasi @RestController untuk menandakan bahwa class ini merupakan controller @RequestMapping(“buku”) untuk slash buku ketika mulai digunakan
Hasilnya menjadi :
@RestController@RequestMapping(“/buku”)public class BukuController {@AutowiredBukuRepository bukuRepository; }
Membuat GetAll buku
@GetMapping(“/”)public List<Buku> getAll(){return bukuRepository.findAll(); }
- @GetMapping digunakan agar http request yang digunakan adalah GET
- Findall() digunakan agar me-return semua list buku
Menambah buku
@PostMapping("/")public Buku tambahbuku(@Valid @RequestBody Buku buku) {return bukuRepository.save(buku); }
- @GetMapping digunakan agar http request yang digunakan adalah POST
- @Valid digunakan agar isi ketika di post valid atau tidak ada yang kosong
Meng-update buku
@PutMapping(“/{id}”)public ResponseEntity<Buku> updateBuku(@PathVariable(value=”id”)Long id, @Valid @RequestBody Buku detailbuku){Buku buku = bukuRepository.findOne(id);if(buku == null)return ResponseEntity.notFound().build();buku.setTitleBook(detailbuku.getTitleBook());buku.setNamaDepanPengarang(detailbuku.getNamaDepanPengarang());buku.setNamaBelakangPengarang(detailbuku.getNamaBelakangPengarang());buku.setNamaPeminjam(detailbuku.getNamaPeminjam());buku.setStatusPeminjaman(detailbuku.getStatusPeminjaman());Buku updatedBuku = bukuRepository.save(buku);return ResponseEntity.ok(updatedBuku); }
- @PathVariable digunakan untuk mendapatkan data dari id ketika diketikan di url. Contoh http://localhost:8080/buku/1
- Apabila id tidak ada di list, akan direspon error
Men-delete buku
@DeleteMapping(“/{id}”)public String deleteBuku(@PathVariable (value=”id”) Long id){Buku buku = bukuRepository.findOne(id);String result = “”;if(buku == null) {result = “id “+id+” tidak ditemukan”;return result;}result = “id “+id+” berhasil di hapus”;bukuRepository.delete(id);return result; }
- @PathVariable digunakan untuk mendapatkan data dari id ketika diketikan di url. Contoh http://localhost:8080/buku/1
Apabila id tidak ada di list, akan direspon error
Mendapatkan data by Id
@GetMapping(“/{id}”)public ResponseEntity<Buku> getBukuById(@PathVariable(value=”id”) Long id){Buku buku = bukuRepository.findOne(id);if(buku == null)return ResponseEntity.notFound().build();return ResponseEntity.ok().body(buku);}
- @PathVariable digunakan untuk mendapatkan data dari id ketika diketikan di url. Contoh http://localhost:8080/buku/1
- Apabila id tidak ada di list, akan direspon error
Sorting buku
@GetMapping("/sortbuku")public List<Buku> sortbuku(@RequestParam(value="title")String titleBook){return bukuRepository.findByTitleBook(titleBook);}
- @RequestParam digunakan untuk mendapatkan data dari ketika diketikan di url. Contoh http://localhost:8080/buku/sortbuku?title=tehbotol
- findByTitleBook merupakan method yang sudah dibuat di repository
Sorting buku by status peminjaman
@GetMapping("/sortstatus/{statusPeminjaman}")public List<Buku> sortstatus(@PathVariable(value="statusPeminjaman") int statusPeminjaman){return bukuRepository.findByStatusPeminjaman(statusPeminjaman);}
- @PathVariable digunakan untuk mendapatkan data dari id ketika diketikan di url.. Contoh http://localhost:8080/buku/sortstatus/1
keselurhan code :
Testing aplikasi
GetAll
Menambah buku
Meng-update buku
Meng-delete buku
Mendapatkan data by Id
Sorting buku
Sorting buku by status peminjaman