0% menganggap dokumen ini bermanfaat (0 suara)
75 tayangan

Modul Training Java Spring Boot Day - 3

Dokumen tersebut memberikan panduan langkah-langkah untuk membuat REST API upsert data (insert dan update) tunggal dan berulang menggunakan Spring Boot dan Java, termasuk konfigurasi multiple datasource. Langkah-langkahnya meliputi pembuatan controller, service, DAO, serta penggunaan annotation dan element-element MyBatis seperti resultMap dan foreach.

Diunggah oleh

abimanyudcse
Hak Cipta
© © All Rights Reserved
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
75 tayangan

Modul Training Java Spring Boot Day - 3

Dokumen tersebut memberikan panduan langkah-langkah untuk membuat REST API upsert data (insert dan update) tunggal dan berulang menggunakan Spring Boot dan Java, termasuk konfigurasi multiple datasource. Langkah-langkahnya meliputi pembuatan controller, service, DAO, serta penggunaan annotation dan element-element MyBatis seperti resultMap dan foreach.

Diunggah oleh

abimanyudcse
Hak Cipta
© © All Rights Reserved
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
Anda di halaman 1/ 16

Training Java Spring Boot

I. Membuat REST API Upsert Data Database


Berikut adalah langkah langkah untuk membuat rest api upsert data database.
A. Buat method baru pada controller dengan menggunakan anotasi
@PostMapping dan anotasi @RequestBody sebagai object yang akan diupsert
ke dalam database.

1. Tambahkan pemanggilan pada method service yang akan digunakan


sebagai tempat penulisan logic dari api.
2. ResponseEntity berfungsi untuk mendefinisikan value dari body response
api dan juga status code http.
3. Perbedaan antara endpoint ini dengan endpoint insert yang telah dibuat
sebelumnya yaitu pada endpoint insert apabila terjadi error, sistem hanya
akan melempar response error pada body response api sementara status
code http tetap 200. Berbeda dengan menggunakan ResponseEntity,
apabila terjadi error maka kita bisa mendefinisikan status code http
dengan menggunakan HttpStatus.valueOf(responseApi.getCode()); .
potongan code tersebut menjelaskan bahwa sistem akan melempar
status code http sesuai dengan nilai dari variabel code (Integer) yang
telah di definisikan pada method serviceImpl.
B. Buat method pada interface service dan class serviceImpl (polimorfisme).
C. Pada method classImpl, tambahkan pendefinisian atau pemanggilan class
model ResponseApi

D. Tambahkan try dan catch statement

Training Java Spring Boot Day 3 - 1


E. Tambahkan return statement menggunakan object ResponseApi

F. Buat method baru pada interface dao


G. Buat method query baru pada mapper dengan menggunakan element <insert>

1. parameterType berfungsi untuk mendefinisikan object yang digunakan


sebagai parameter untuk query
2. Pada query diatas, penulisan code “ON CONFLICT ON CONSTRAINT
karyawan_pkey DO UPDATE” bertujuan untuk melakukan pengecekan
apabila constraint data yang akan disimpan (case tabel karyawan, pkey =
idKaryawan) telah ada di database maka akan dilakukan proses update
query yang ada dibawah.
3. Untuk penulisan update query yang ada dibawah ini tidak diperlukan
pengkodisian menggunakan where, dikarenakan pengecekan telah
dilakukan sebelumnya. Jadi hanya menuliskan query set nilai kolom yang
akan diupdate

Training Java Spring Boot Day 3 - 2


II. Membuat REST API Upsert Multiple Data (Array)
Berikut adalah langkah langkah untuk membuat rest api upsert multiple data.
A. Buat method baru pada class controller dengan menggunakan anotation
@PostMapping

1. Tambahkan pemanggilan pada method service yang akan digunakan


sebagai tempat penulisan logic dari api.
2. Pada anotasi @RequestBody menggunakan type data List<object>
bermaksud untuk mengambil nilai List / Array dari body request yang
dilempar.
B. Buat method baru pada interface service dan class serviceImpl
Ulangi step nomor 1 langkah B
C. Tambahkan config untuk metode yang digunakan ketika proses perulangan
upsert pada application.properties

Buatlah keterangan untuk memudahkan ketika akan dilakukan switch atau


perpindahan metode
D. Pada class serviceImpl, buat pendefinisian class Environment

Class yang digunakan yaitu org.springframework.core.env.Environment


E. Pada method yang telah dibuat di class serviceImpl, lakukan pendefinisian pada
class ResponseApi dan tambahkan try catch statement

F. Pada bagian try, tambahkan pemanggilan config update-method yang ada di


properties. Dengan menggunakan env.getProperty(“nama-property”)

Training Java Spring Boot Day 3 - 3


G. Kemudian buat switch case statement berdasarkan value dari updateMethod

Code diatas menjelaskan bahwa ketika nilai dari variabel upsertMultipleMethod


ini sama dengan 1 maka akan dilakukan perulangan query di mapper.xml . jika
nilai dari variabel upsertMultipleMethod = 2 maka akan dilakukan perulangan di
java dengan menggunakan statement for, dan jika nilai dari variabel
upsertMultipleMethod = 3 maka akan dilakukan perulangan di java tetapi
menggunakan list.stream().parallel().foreach()
Potongan code tersebut menjelaskan:
.stream() untuk streaming atau mengambil nilai data yang ada pada list.
.parallel() untuk membuat streaming data ini bersifat paralel.
.forEach() untuk menjalankan perintah yang akan dilakukan pada saat
streaming data.
H. Tambahkan nilai pada object ResponseAPI

Training Java Spring Boot Day 3 - 4


I. Tambah return statement menggunakan object ResponseApi

J. Buat method baru pada interface dao


K. Buat method query baru dengan menggunakan element <insert>

1. parameterType = “java.util.List” berfungsi untuk mendefinisikan type data


dari parameter method mapper tersebut. Ketika melakukan perulangan
pada mapper maka diperlukan parameter bertype data List / Array.
2. Element <foreach> berfungsi untuk menjalankan perulangan pada method,
disini diperlukan pendefinisian dari collection, item dan separator.
3. Collection berfungsi untuk mendefinisikan type dari collection object yang
akan diproses
4. Item berfungsi sebagai pengaliasan item yang ada dalam collection / list /
array
5. Separator berfungsi sebagai pemisah antar perintah (query) yang akan
dilakukan perulangan

Training Java Spring Boot Day 3 - 5


III. Membuat Query Mapper Dengan Menggunakan Element resultMap
Berikut adalah langkah langkah untuk membuat query mapper dengan menggunakan
element resultMap
A. Buat method baru pada mapper.xml dengan menggunakan element resultMap

1. resultMap berfungsi sebagai pemetaan hasil query select dari database ke


class object model
2. Type pada element resultMap berfungsi untuk pendefinisian class yang
akan dijadikan object model (class yang akan menjadi penampung data
dari hasil query)
3. Aturan penulisan pada resultMap adalah sebagai berikut <result
column="nama_kolom_database" property="namaVariabelObjectModel"/>
4. resultMap digunakan ketika penamaan kolom pada tabel database berbeda
dengan penamaan variabel yang digunakan pada class object model
5. Contoh kasus pada tabel Directory, penamaan kolom menggunakan simbol
underscore sebagai pemisah antar kata (id_karyawan). Ini merupakan
aturan penamaan tidak tertulis ketika membuat sebuah tabel di database

Training Java Spring Boot Day 3 - 6


Sementara aturan tidak tertulis pada penamaan variabel java itu
menggunakan camel case yaitu menggunakan lowercase pada huruf
depan kata pertama dan menggunakan uppercase pada huruf depan kata
selanjutnya (idKaryawan)

Maka diperlukan pemetaan object agar data hasil query dapat disimpan
pada variabel yang ada dalam class object model. Id_karyawan ->
idKaryawan
B. Buat method baru dengan menggunakan element <select>

Penggunaan resultMap disini menggantikan posisi resultType yang digunakan


pada method select yang dilakukan sebelumnya, kedua element ini tidak dapat
digunakan secara berbarengan. Tergantung dari kondisi data hasil dari query
database.
IV. Membuat Multiple Datasource (Multiple Koneksi Database)
Berikut adalah langkah langkah pembuatan multiple datasource atau multiple koneksi
database
A. Buat property database yang akan digunakan pada application.properties

1. Code diatas merupakan syarat property minimal dari koneksi database


yang diperlukan. Yaitu url, username, password dan driver-class-name.
2. Code diatas merupakan contoh jika service menggunakan 2 database,
untuk penambahan database bisa dilakukan dengan pendefinisian
spring.third.dataseource ..... spring.fourth.datasource .....
3. Tidak ada aturan baku pada penulisan custom property

Training Java Spring Boot Day 3 - 7


B. Buat package untuk memisahkan interface dao primary datasource dan
secondary datasource

C. Buat folder untuk memisahkan mapper primary datasource dan secondary


datasource

D. Buat class konfigurasi primary datasource

Class diatas merupakan sebuah konfigurasi Spring menggunakan anotasi


@Configuration. Ini adalah bagian dari konfigurasi basis data menggunakan
MyBatis, sebuah kerangka kerja ORM (Object-Relational Mapping) untuk Java.

Training Java Spring Boot Day 3 - 8


1. Anotasi @Configuration
- Anotasi ini digunakan untuk menandai kelas sebagai kelas konfigurasi
Spring. Ini berarti kelas ini akan memberikan konfigurasi untuk konteks
aplikasi Spring.
2. Anotasi @MapperScan
- Anotasi ini digunakan untuk memberi tahu MyBatis di mana harus mencari
interface mapper, yang merupakan bagian dari MyBatis.
- basePackages: Menunjukkan paket-paket yang akan di-scan untuk interface
mapper.
- sqlSessionFactoryRef: Menentukan nama bean dari SqlSessionFactory yang
akan digunakan oleh MyBatis.
3. Variabel dan Konstanta:
- PACKAGE: Menyimpan nama paket di mana interface mapper akan dicari.
- MAPPER_LOCATION: Menyimpan lokasi dari file XML yang berisi
konfigurasi SQL MyBatis.
- ALIAS_PACKAGE: Menyimpan nama paket yang berisi kelas-kelas yang
akan di-alias oleh MyBatis.
4. Atribut dan Metode
- environment: Digunakan untuk mengakses properti dari lingkungan aplikasi,
seperti konfigurasi basis data yang disediakan oleh Spring.
- primaryDataSource(): Metode ini menentukan konfigurasi dan pengaturan
untuk data source utama. Menggunakan HikariCP sebagai pool koneksi dan
membaca konfigurasi dari properti yang dimuat dari application.properties.
- primaryTransactionManager(): Metode ini membuat dan mengonfigurasi
manajer transaksi untuk data source utama.
- primarySqlSessionFactory(): Metode ini membuat dan mengonfigurasi
SqlSessionFactory untuk data source utama. Ini juga menentukan lokasi
mapper dan paket alias untuk entitas MyBatis.
5. Anotasi @Bean
- Anotasi ini digunakan untuk menunjukkan bahwa metode yang di-annotasi
akan menghasilkan bean yang akan dimasukkan ke dalam konteks Spring.
6. Anotasi @Autowired
- Digunakan untuk menyuntikkan nilai ke dalam atribut kelas. Dalam hal ini,
digunakan untuk menyuntikkan nilai dari lingkungan (environment).
7. Anotasi @Primary
- Menandakan bahwa bean yang dihasilkan oleh metode yang di-annotasi
adalah bean utama (primary) jika ada beberapa bean dengan jenis yang
sama di konteks aplikasi.
Secara keseluruhan, kelas ini bertanggung jawab untuk mengonfigurasi dan
menyediakan bean-bean yang diperlukan untuk interaksi dengan basis data
menggunakan MyBatis di dalam aplikasi Spring.

Training Java Spring Boot Day 3 - 9


E. Buat class konfigurasi secondary datasource

1. Untuk penambahan datasource ke 3 , 4, 5 dst membutuhkan class


konfigurasinya terendiri
2. Jika menggunakan class konfigurasi diatas maka anotasi @MapperScan di
main class Application harus dihilangkan, karena kedua class diatas sudah
mendefinisikan anotasi @MapperScan
3. Jika anotasi @MapperScan pada class Application tidak dihilangkan maka
sistem akan melakukan 2 kali scan, dan akan menyebabkan kerancuan pada
mapper

Training Java Spring Boot Day 3 - 10


V. HTTP Status Code
Kode respons API, atau yang lebih dikenal sebagai status code HTTP, memberikan
informasi tentang hasil dari permintaan HTTP yang telah dikirim ke server. Kode
respons HTTP terdiri dari tiga digit numerik yang disertakan dalam respons server untuk
memberi tahu klien tentang status permintaan tersebut. Berikut adalah beberapa
kategori umum dari kode respons HTTP
1. 1xx (Informasi)
Kode respons dalam kategori ini memberi tahu klien bahwa permintaan telah
diterima dan proses sedang berlanjut. Contoh: 100 Continue.
2. 2xx (Sukses)
Kode respons dalam kategori ini menunjukkan bahwa permintaan telah berhasil
diterima, dimengerti, dan diterima dengan baik. Contoh:
 200 OK: Permintaan berhasil.
 201 Created: Sumber daya baru berhasil dibuat.
 204 No Content: Permintaan berhasil, tetapi tidak ada konten untuk
dikirimkan kembali.
3. 3xx (Redirect)
Kode respons dalam kategori ini menunjukkan bahwa klien harus melakukan
tindakan tambahan untuk menyelesaikan permintaan. Contoh:
 301 Moved Permanently: Sumber daya telah dipindahkan secara
permanen.
 302 Found atau 307 Temporary Redirect: Sumber daya sementara
berada di lokasi lain.
4. 4xx (Kesalahan Klien)
Kode respons dalam kategori ini menunjukkan bahwa ada kesalahan atau
kesalahan pada sisi klien. Contoh:
 400 Bad Request: Permintaan tidak dapat dipahami oleh server.
 401 Unauthorized: Klien tidak diotorisasi untuk mengakses sumber
daya.
 403 Forbidden: Akses ke sumber daya ditolak.
 404 Not Found: Sumber daya yang diminta tidak ditemukan.
5. 5xx (Kesalahan Server):
Kode respons dalam kategori ini menunjukkan bahwa ada kesalahan pada sisi
server. Contoh:
 500 Internal Server Error: Terjadi kesalahan internal pada server.
 502 Bad Gateway: Server bertindak sebagai gateway atau proxy dan menerima
respons yang tidak valid dari server yang lebih tinggi dalam hierarki.
 503 Service Unavailable: Server tidak tersedia untuk menanggapi permintaan.
Setiap kode respons memberikan petunjuk tentang apakah permintaan berhasil,
mengalami kesalahan, atau memerlukan tindakan tambahan. Kode respons HTTP
adalah bagian penting dari komunikasi antara klien dan server dalam lingkungan web
dan API.
Training Java Spring Boot Day 3 - 11
VI. Element Mapper.xml MyBatis
Dalam file mapper.xml MyBatis, terdapat beberapa elemen yang digunakan untuk
mendefinisikan operasi SQL dan pemetaan objek. Berikut adalah beberapa elemen yang
umumnya digunakan:
1. <select>
- Digunakan untuk mendefinisikan operasi SELECT. Elemen ini berisi pernyataan SQL
yang akan dijalankan untuk mengambil data dari database.
- Contoh:
<select id="selectUser" resultType="User">
SELECT * FROM users WHERE id = #{id}
</select>
2. <insert>
- Digunakan untuk mendefinisikan operasi INSERT. Elemen ini berisi pernyataan SQL
yang akan dijalankan untuk menyisipkan data ke dalam database.
- Contoh:
<insert id="insertUser" parameterType="User">
INSERT INTO users (id, username, email) VALUES (#{id}, #{username},
#{email})
</insert>
3. <update>
- Digunakan untuk mendefinisikan operasi UPDATE. Elemen ini berisi pernyataan SQL
yang akan dijalankan untuk memperbarui data di dalam database.
- Contoh:
<update id="updateUser" parameterType="User">
UPDATE users SET username = #{username}, email = #{email} WHERE id =
#{id}
</update>
4. <delete>
- Digunakan untuk mendefinisikan operasi DELETE. Elemen ini berisi pernyataan SQL
yang akan dijalankan untuk menghapus data dari database.
- Contoh:
<delete id="deleteUser" parameterType="int">
DELETE FROM users WHERE id = #{id}
</delete>

Training Java Spring Boot Day 3 - 12


5. <resultMap>
- Digunakan untuk mendefinisikan pemetaan antara kolom database dan properti objek.
Elemen ini memungkinkan konfigurasi pemetaan yang lebih kompleks.
- Contoh:
<resultMap id="userResultMap" type="User">
<id property="id" column="user_id"/>
<result property="username" column="user_name"/>
<result property="email" column="user_email"/>
</resultMap>
6. <association>
- Digunakan dalam <resultMap> untuk menangani pemetaan relasi satu-ke-satu antara
objek dan tabel terkait.
- Contoh:
<resultMap id="userWithAddressResultMap" type="User">
<id property="id" column="user_id"/>
<result property="username" column="user_name"/>
<result property="email" column="user_email"/>
<association property="address" columnPrefix="addr_" javaType="Address">
<!-- Pemetaan kolom-kolom untuk Address -->
</association>
</resultMap>
7. <collection>
- Digunakan dalam <resultMap> untuk menangani pemetaan relasi satu-ke-banyak
antara objek dan tabel terkait.
- Contoh:
<resultMap id="userWithOrdersResultMap" type="User">
<id property="id" column="user_id"/>
<result property="username" column="user_name"/>
<result property="email" column="user_email"/>
<collection property="orders" ofType="Order" column="order_user_id">
<!-- Pemetaan kolom-kolom untuk Order -->
</collection>
</resultMap>
8. <sql>
- Digunakan untuk mendefinisikan fragmen SQL yang dapat digunakan kembali di
berbagai bagian dari file mapper.xml.
- Contoh:
<sql id="userColumns">
id, username, email
</sql>

Training Java Spring Boot Day 3 - 13


9. <if>
- Digunakan untuk memberikan kondisional di dalam pernyataan SQL. Pernyataan
SQL di dalam elemen <if> hanya dieksekusi jika kondisi yang diberikan terpenuhi.
- Contoh:

<select id="selectUsers" resultType="User">


SELECT * FROM users
<where>
<if test="username != null">
AND username = #{username}
</if>
<if test="email != null">
AND email = #{email}
</if>
</where>
</select>
10. <choose>, <when>, <otherwise>
- Digunakan untuk membuat konstruksi kondisional yang lebih kompleks. <choose>
berisi serangkaian <when> dan <otherwise>, dan hanya satu dari blok <when> atau
<otherwise> yang akan dieksekusi.
- Contoh:
<select id="selectUsers" resultType="User">
SELECT * FROM users
<where>
<choose>
<when test="username != null">
AND username = #{username}
</when>
<when test="email != null">
AND email = #{email}
</when>
<otherwise>
AND status = 'ACTIVE'
</otherwise>
</choose>
</where>
</select>

Training Java Spring Boot Day 3 - 14


11. <trim>, <set>, <foreach>
- <trim> digunakan untuk menghilangkan atau menambahkan elemen-elemen di
sekitar pernyataan SQL. <set> digunakan dalam pernyataan UPDATE untuk
menghasilkan daftar kolom yang akan diperbarui. <foreach> digunakan untuk
mengulangi elemen-elemen SQL.
- Contoh:
<update id="updateUser" parameterType="User">
UPDATE users
<set>
<if test="username != null">username = #{username},</if>
<if test="email != null">email = #{email},</if>
</set>
WHERE id = #{id}
</update>
12. <result>
- Digunakan dalam <resultMap> untuk memetakan kolom database ke properti objek.
- Contoh:
<resultMap id="userResultMap" type="User">
<id property="id" column="user_id"/>
<result property="username" column="user_name"/>
<result property="email" column="user_email"/>
</resultMap>
13. <include>
- Digunakan untuk menyertakan fragmen SQL yang telah didefinisikan sebelumnya
menggunakan elemen <sql>.
- Contoh:
<sql id="userColumns">
id, username, email
</sql>
<select id="selectUsers" resultType="User">
SELECT <include refid="userColumns"/> FROM users
</select>
14. <bind>
- Digunakan untuk mengikat ekspresi atau ekspresi kompleks ke variabel yang dapat
digunakan nanti dalam pernyataan SQL.
- Contoh:
<select id="selectUsers" resultType="User">
<bind name="pattern" value="'%' + username + '%'"/>
SELECT * FROM users WHERE username LIKE #{pattern}
</select>

Training Java Spring Boot Day 3 - 15


15. <resultType>
- Digunakan untuk menentukan tipe data yang diharapkan dari hasil query.
- Contoh:
<select id="selectUsers" resultType="User">
SELECT * FROM users
</select>

Training Java Spring Boot Day 3 - 16

Anda mungkin juga menyukai