Aplikasi REST API untuk manajemen data karyawan dan jabatan menggunakan Spring Boot, MySQL, dan Hibernate dengan HQL.
- Java 24
- Spring Boot 3.5.3
- Spring Data JPA dengan Hibernate
- MySQL Database
- Lombok
- Maven
- CRUD operasi untuk data karyawan dan jabatan
- Pencarian karyawan berdasarkan nama, jabatan, gender, dan nomor induk
- Pencarian jabatan berdasarkan kode dan nama
- Semua query menggunakan HQL (Hibernate Query Language)
- Format respons API yang konsisten
- Penanganan kesalahan yang baik
- Soft delete untuk data karyawan dan jabatan
Aplikasi ini menggunakan dua tabel utama:
| Field | Tipe Data | Keterangan |
|---|---|---|
| ID | NUMBER | Primary Key, Auto Increment |
| CODE | VARCHAR(50) | Kode jabatan |
| NAME | VARCHAR(100) | Nama jabatan |
| IS_DELETE | NUMBER | Flag untuk soft delete (1: dihapus, 0: aktif) |
| Field | Tipe Data | Keterangan |
|---|---|---|
| ID | NUMBER | Primary Key, Auto Increment |
| NAME | VARCHAR(100) | Nama karyawan |
| BIRTH_DATE | DATE | Tanggal lahir karyawan |
| POSITION_ID | NUMBER | Foreign Key ke tabel T1_POSITION |
| ID_NUMBER | NUMBER | Nomor induk pegawai |
| GENDER | NUMBER | Jenis kelamin (1: Pria, 2: Wanita) |
| IS_DELETE | NUMBER | Flag untuk soft delete (1: dihapus, 0: aktif) |
Proyek ini mengikuti arsitektur MVC (Model-View-Controller):
- Model: Representasi data dan logika bisnis
- Repository: Akses data menggunakan HQL
- Service: Logika bisnis dan transaksi
- Controller: Endpoint API REST
- Buat database MySQL dengan nama
master_karyawan - Konfigurasi koneksi database di
application.properties
spring.datasource.url=jdbc:mysql://localhost:3306/master_karyawan
spring.datasource.username=root
spring.datasource.password=
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialect
spring.jpa.properties.hibernate.format_sql=true
spring.sql.init.mode=always
spring.jpa.defer-datasource-initialization=true- Clone repositori
- Pastikan MySQL server berjalan
- Build dan jalankan aplikasi:
mvn clean install
mvn spring-boot:runAplikasi akan berjalan di http://localhost:8080
| Metode | URL | Deskripsi |
|---|---|---|
| GET | /api/karyawan | Mendapatkan semua karyawan aktif |
| GET | /api/karyawan/{id} | Mendapatkan karyawan berdasarkan ID |
| GET | /api/karyawan/search/name?name={name} | Mencari karyawan berdasarkan nama |
| GET | /api/karyawan/search/position?positionId={positionId} | Mencari karyawan berdasarkan ID jabatan |
| GET | /api/karyawan/search/gender?gender={gender} | Mencari karyawan berdasarkan gender (1: Pria, 2: Wanita) |
| GET | /api/karyawan/search/idNumber?idNumber={idNumber} | Mencari karyawan berdasarkan nomor induk |
| POST | /api/karyawan | Membuat karyawan baru |
| PUT | /api/karyawan/{id} | Mengupdate karyawan yang ada |
| DELETE | /api/karyawan/{id} | Menghapus karyawan (soft delete) |
| Metode | URL | Deskripsi |
|---|---|---|
| GET | /api/positions | Mendapatkan semua jabatan aktif |
| GET | /api/positions/{id} | Mendapatkan jabatan berdasarkan ID |
| GET | /api/positions/code/{code} | Mendapatkan jabatan berdasarkan kode |
| GET | /api/positions/search?name={name} | Mencari jabatan berdasarkan nama |
| POST | /api/positions | Membuat jabatan baru |
| PUT | /api/positions/{id} | Mengupdate jabatan yang ada |
| DELETE | /api/positions/{id} | Menghapus jabatan (soft delete) |
{
"name": "John Doe",
"birthDate": "1990-01-01",
"position": {
"id": 1
},
"idNumber": 12345678,
"gender": 1,
"isDelete": 0
}{
"code": "MGR",
"name": "Manager",
"isDelete": 0
}Semua response API menggunakan format yang konsisten:
{
"success": true,
"message": "Pesan sukses atau error",
"data": {},
"timestamp": "2023-09-20T12:34:56.789"
}{
"success": true,
"message": "Berhasil mengambil data karyawan",
"data": {
"id": 1,
"name": "Yogi Lestari",
"birthDate": "1990-02-14",
"position": {
"id": 1,
"code": "SA",
"name": "System Analyst",
"isDelete": 0
},
"idNumber": 14021990,
"gender": 1,
"isDelete": 0
},
"timestamp": "2023-09-20T12:34:56.789"
}{
"success": false,
"message": "Karyawan dengan ID 999 tidak ditemukan",
"data": null,
"timestamp": "2023-09-20T12:34:56.789"
}Aplikasi ini diinisialisasi dengan data master berikut:
| ID | CODE | NAME | IS_DELETE |
|---|---|---|---|
| 1 | SA | System Analyst | 0 |
| 2 | BPS | BPS | 0 |
| 3 | PRG | Programmer | 0 |
| 4 | TEST | Tester | 0 |
| 5 | HELP | Helpdesk | 0 |
| ID | NAME | BIRTH_DATE | POSITION_ID | ID_NUMBER | GENDER | IS_DELETE |
|---|---|---|---|---|---|---|
| 1 | Yogi Lestari | 1990-02-14 | 1 | 14021990 | 1 | 0 |
| 2 | Anggi Setiawan | 1991-05-10 | 5 | 10051991 | 1 | 0 |
| 3 | Rosiana | 1993-04-20 | 3 | 20041993 | 2 | 0 |
| 4 | Yudi Ismiaji | 1994-01-11 | 4 | 11011994 | 1 | 0 |
Semua query database dalam aplikasi ini menggunakan HQL (Hibernate Query Language) sesuai dengan persyaratan. Contoh implementasi dapat dilihat di KaryawanRepository.java dan PositionRepository.java.