Belajar Membuat Restful dengan Spring Boot (JPA & MySQL) [Part 2]

Gwoks
6 min readMar 17, 2018

--

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

Pilih select all > ok.

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; }

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);}

Sorting buku by status peminjaman

@GetMapping("/sortstatus/{statusPeminjaman}")public List<Buku> sortstatus(@PathVariable(value="statusPeminjaman") int statusPeminjaman){return bukuRepository.findByStatusPeminjaman(statusPeminjaman);}

keselurhan code :

Testing aplikasi

GetAll

Menambah buku

Meng-update buku

Meng-delete buku

Mendapatkan data by Id

Sorting buku

Sorting buku by status peminjaman

--

--