Spring Boot + PostgreSQL + JPA/Hibernate CRUD Restful API Tutorial
Requirements:
- JDK 8
- Spring Boot Tools 3
- Maven 3
- PostgreSQL
- Postman
Memulai project di STS
Buat project baru di STS dengan cara File > New > Spring Starter Project. Kemudian beri nama pada bagian project, description, packagce dan lain lain kemudian klik next.
· Name : spring_jdbc
· Group : com.example.jdbc
· Package : Group : com.example.jdbc
Setelah selesai, tambahkan dependency pada file pom.xml sebagai berikut :
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.postgresql</groupId><artifactId>postgresql</artifactId></dependency>
Kemudian klik kanan pada project > maven > update project..
Konfigurasi ke database
Pada STS direktori src/main/resource buka application.properties dan ketikan :
spring.datasource.url=jdbc:postgresql://localhost:5432/examplejdbcspring.datasource.username=postgresspring.datasource.password=1234spring.datasource.platform=postgresql
- examplejdbc merupakan nama db yang pada langkah awal dibuat
- spring.datasource.url berisi nama database yang tadi dibuat. Pada dokumentasi ini nama database yang dibuat adalah examplejdbc
- spring.datasource.username berisi username dan spring.datasource.password berisi password postgres ketika dibuat
Membuat model
Pada dokumentasi ini, kita akan membuat 2 model, yaitu model untuk input berupa Rest.java dan model untuk output berupa RestResult.java
Model pertama, Rest.java. Buat package baru dengan nama com.example.jdbc.model dan tambahkan class baru dengan nama Rest.java. isi dari class tersebut sebagai berikut :
public class Rest {private int id;private String key,value;//getter dan setter}
Kemudian buat model yang kedua. Buat class baru dengan nama RestResult.java pada package model. Isi dari class tersebut sebagai berikut :
public class RestResult {private int id,rand;//getter dan setter}
buat class baru dengan nama RestMapper.java pada package yang sama. Class ini merupakan interface dari RowMapper, digunakan untuk mengambil data dari database dengan querynya dan mengkonversikanya. Isi dari class tersebut sebagai berikut :
public interface RestDao {List<RestResult> getAll();RestResult getRestById(int id);void addRest(Rest rest);void updateRest(Rest rest, int id);void deleteRestById(int id);int lastestInput();}
Kemudian buat class lagi di package yang sama dengan dengan nama RestDaoImp.java class ini merupakan implement dari interface restdao. Class ini berisi sql query dari interface dao dengan isi sebagai berikut:
@Transactional@Repositorypublic class RestDaoImp implements RestDao{@Autowiredprivate JdbcTemplate jdbcTemplate;//method dari interface}
- Isi dari method getAll. Method ini bergungsi menyeleksi semua data dari table rest dan di sort secara ascending
@Overridepublic List<RestResult> getAll() {// TODO Auto-generated method stubString sql = "select * from rest order by id asc";List<RestResult> rest = jdbcTemplate.query(sql, new RestMapper());return rest;}
- Isi dari method getRestById. Method ini berisi query berupa men select data berdasarkan id
@Overridepublic RestResult getRestById(int id) {String sql2 = "select * from rest where id = ?";RestResult rest2 = jdbcTemplate.queryForObject(sql2, new Object[]{id}, new RestMapper());return rest2;}
- addRest(). Menambahkan data ke dalam database. Pada bagian akhir diinputkan data yg diambil dari method getRandomNumber
@Overridepublic void addRest(Rest rest) {String sql = "INSERT INTO rest (key, value, rand) VALUES (?, ?, ?) ";jdbcTemplate.update(sql, rest.getKey(), rest.getValue(), getRandomNumber());}
- updateRest(). Mengupdate data ke dalam database. Data yang diupdate brupa random number, key, dan value
@Overridepublic void updateRest(Rest rest, int id) {int a = getRandomNumber();String sql = "update rest set key=?, value=? ,rand=? where id=?";jdbcTemplate.update(sql,rest.getKey(), rest.getValue(),a, id);}
- deleteRestById(). Method ini berfungsi menghapus data berdasarkan id yang diberikan
@Overridepublic void deleteRestById(int id) {String sql = "delete from rest where id=?";jdbcTemplate.update(sql, id);}
- getRandomNumber(). Method ini berfungsi mengenerate random number untuk diinpout ke dalam database
private int getRandomNumber() {Random rand = new Random();return rand.nextInt(50);}
- lastestInput(). Method ini berfungsi agar mengetahui id teratas yang ada di database.
@Overridepublic int lastestInput() {String sql2 = "SELECT currval(pg_get_serial_sequence('rest','id'))";int id = jdbcTemplate.queryForObject(sql2,Integer.class);return id;}
- Hasil akhir dari class tersebut sebagai berikut :
Membuat service
Buat package baru dengan nama com.example.jdbc.service. kemudian buat class baru pada package tersebut dengan nama RestService.java . class ini merupakan interface yang berisi method yang dapat diakses pada controller. Isi dari class ini sebagai berikut :
public interface RestService {List<RestResult> getAll();RestResult getRestById(int id);void addRest(Rest rest);void updateRest(Rest rest, int id);void deleteRestById(int id);int lastestInput();}
Kemudian buat class dengan nama RestServiceImp.java. class ini berisi implementasi dari method yang ada di interface RestService.
@Servicepublic class RestServiceImp implements RestService{@Autowiredprivate RestDao restDao;}
Kemudian isi code dari method tersebut sebagai berikut.
- getAll()
@Overridepublic List<RestResult> getAll() {return restDao.getAll();}
- getRestById()
@Overridepublic RestResult getRestById(int id) {return restDao.getRestById(id);}
- addRest()
@Overridepublic void addRest(Rest rest) {restDao.addRest(rest);}
- updateRest()
@Override public void updateRest(Rest rest, int id) {restDao.updateRest(rest, id);}
- deleteRestById()
@Overridepublic void deleteRestById(int id) {restDao.deleteRestById(id);}
- lastestInput()
@Overridepublic int lastestInput() {return restDao.lastestInput();}
Sehingga hasil akhir dari class tersebut sebagai berikut :
Membuat controller
Buat package baru dengan nama com.example.jdbc.controller. kemudian buat class baru pada package tersebut dengan nama RestController.java . class ini merupakan controller dari aplikasi yang dibuat. Isi dari class tersebut sebagai berikut :
Method getById(). Method ini berfungsi untuk menampilkan data dari hasil yang diberikan. Method ini menggunakan http method Get
@Controller@RequestMapping("rest")public class RestController {@AutowiredRestService restService;}
- method getAll(). Method ini menggunakan http method get.
@GetMapping("/{id}")public ResponseEntity<RestResult> getById(@PathVariable("id") int id){RestResult rest = restService.getRestById(id);return new ResponseEntity<RestResult>(rest, HttpStatus.OK);}
- Method addRest(). Input yang dimasukan berupa key dan value sesuai model rest. Kemudian hasil outputnya berupa model dari RestResult
@PostMapping("/")public ResponseEntity<RestResult> addRest(@RequestBody Rest rest){restService.addRest(rest);RestResult rest2 = restService.getRestById(restService.lastestInput());return new ResponseEntity<RestResult>(rest2,HttpStatus.OK);}
- Method updateRest(). Menggunakan http method put.
@PutMapping("/{id}")public ResponseEntity<RestResult> updateRest(@PathVariable("id") int id, @RequestBody Rest rest){restService.updateRest(rest,id);RestResult rest2 = restService.getRestById(id);return new ResponseEntity<RestResult>(rest2, HttpStatus.OK);}
- Method delete
@DeleteMapping("/{id}")public ResponseEntity<RestResult> deleteRest(@PathVariable("id") int id){RestResult rest2 = restService.getRestById(id);restService.deleteRestById(id);return new ResponseEntity<RestResult>(rest2,HttpStatus.OK);}
Hasil akhir dari class tersebut sebagai berikut :
Uji coba :
- Get All dengan method get

- get by id dengan method get
- add dengan method Post
- update dengan method put

- delete dengan method delete

Demikian. Lain kali saya akan bahas Golang






Comments
Post a Comment