tag:blogger.com,1999:blog-2001600534298100352024-03-14T13:18:11.986+07:00Java CommunitySitus Belajar Pemrograman dan Databasecahendihttp://www.blogger.com/profile/08018498600195831981noreply@blogger.comBlogger125125tag:blogger.com,1999:blog-200160053429810035.post-87495785308685543882023-12-17T15:41:00.000+07:002023-12-17T15:41:25.304+07:00Belajar Database PostgreSQL - Contoh Penggunaan Truncate<p style="text-align: justify;">
Dalam manajemen basis data, operasi <b>TRUNCATE</b> merupakan salah satu fitur penting yang tersedia di PostgreSQL. Operasi ini memungkinkan pengguna untuk menghapus semua data dari sebuah tabel dengan cepat dan efisien. Namun, ada beberapa hal yang perlu dipahami sebelum menggunakan perintah <b>TRUNCATE</b>.
</p>
<h3>Apa Itu Truncate?</h3>
<p style="text-align: justify;">
Perintah <b>TRUNCATE</b> digunakan untuk menghapus semua baris (records) dari sebuah tabel di dalam database PostgreSQL. Perbedaan utama antara <b>TRUNCATE</b> dengan perintah <b>DELETE</b> adalah bahwa <b>TRUNCATE</b> adalah operasi non-transactional yang bekerja secara instan tanpa menimbulkan log perubahan data, sedangkan DELETE adalah operasi transaksional yang memengaruhi log dan dapat digulirkan kembali (rollback).
</p>
<h3>Cara Menggunakan Truncate di PostgreSQL</h3>
<p style="text-align: justify;">
Syntax dasar untuk menggunakan perintah <b>TRUNCATE</b> adalah:
</p>
<div class="baca_juga">
<div class="baca_juga_title">Syntax</div>
<pre>
TRUNCATE TABLE nama_tabel;
</pre>
</div>
<p style="text-align: justify;">
Misalnya, jika Anda memiliki tabel bernama pengguna, Anda bisa menghapus semua datanya dengan perintah:
</p>
<div class="baca_juga">
<div class="baca_juga_title">Syntax</div>
<pre>
TRUNCATE TABLE produk;
</pre>
</div>
<div class="baca_juga">
<div class="baca_juga_title">BACA JUGA</div>
<ul>
<li><a href="https://www.community-java.com/2019/04/belajar-database-postgres-klausa-limit-dan-offset.html">Belajar Database Postgres - Cara Penggunaan Limit dan Offset</a></li>
<li><a href="https://www.community-java.com/2022/03/cara-export-postgresql-ke-file-csv.html">Belajar Database Postgres - Cara Export ke File CSV</a></li>
<li><a href="https://www.community-java.com/2022/03/contoh-penggunaan-cursor-di-postgresql.html">Belajar Database Postgres - Contoh Penggunaan Cursor</a></li>
<li><a href="https://www.community-java.com/2021/11/cara-melakukan-backup-dan-restore-database-postgresql.html">Cara Melakukan Backup dan Restore PostgreSQL</a></li>
<li><a href="https://www.community-java.com/2017/02/contoh-penggunaan-join.html">Belajar Database PostgreSQL - Contoh Penggunaan Join</a></li>
</ul>
</div>
<h3>Truncate Cascade</h3>
<p style="text-align: justify;">
<b>TRUNCATE CASCADE</b> adalah varian dari perintah <b>TRUNCATE</b> yang memiliki fungsi tambahan dalam menghapus data dari tabel. Ketika Anda menggunakan <b>TRUNCATE CASCADE</b>, selain menghapus semua baris dari tabel target, itu juga akan menghapus semua baris dari tabel-tabel yang memiliki relasi referensial terhadap tabel tersebut.
</p>
<p style="text-align: justify;">
Contohnya, jika Tabel <i>transaksi</i> memiliki relasi referensial ke Tabel <i>transaksi_detail</i>, ketika Anda menggunakan <b>TRUNCATE TABLE transaksi CASCADE</b>, selain menghapus semua data dari Tabel <i>transaksi</i>, itu juga akan menghapus data dari Tabel <i>transaksi_detail</i> yang memiliki relasi referensial ke Tabel <i>transaksi</i>.
</p>
<h3>Contoh Penggunaan TRUNCATE CASCADE di PostgreSQL</h3>
<div class="baca_juga">
<div class="baca_juga_title">Syntax</div>
<pre>
CREATE TABLE transaksi (
id BIGSERIAL PRIMARY KEY NOT NULL,
kode_transaksi VARCHAR(10) NOT NULL,
tanggal_transaksi date NOT NULL
);
CREATE TABLE transaksi_detail (
id BIGSERIAL PRIMARY KEY NOT NULL,
id_transaksi BIGINT REFERENCES transaksi(id) NOT NULL,
kode_produk VARCHAR(100) NOT NULL,
nama_produk VARCHAR(100) NOT NULL,
jumlah INT NOT NULL
);
</pre>
</div>
<p style="text-align: justify;">
Jika kita ingin menghapus semua data dari tabel <i>transaksi</i> beserta semua detail yang terkait di tabel <i>transaksi_detail</i>, kita bisa menggunakan <b>TRUNCATE CASCADE</b> seperti ini:
</p>
<div class="baca_juga">
<div class="baca_juga_title">Syntax</div>
<pre>
TRUNCATE TABLE transaksi CASCADE;
</pre>
</div>
<p style="text-align: justify;">
Perintah di atas akan menghapus semua data dari tabel orders dan juga semua data yang memiliki relasi referensial ke <i>transaksi</i> di dalam tabel <i>transaksi_detail</i>.
</p>
<p style="text-align: justify;">
Penggunaan TRUNCATE CASCADE sangat berguna untuk membersihkan data dengan cepat dari beberapa tabel yang saling terhubung dalam struktur basis data Anda. Namun, pastikan untuk memahami dampaknya dan pastikan untuk melakukan backup data yang diperlukan sebelum menjalankan operasi semacam itu.
</p>
<h4>Perhatian Sebelum Menggunakan Truncate</h4>
<p style="text-align: justify;">
Sebelum menggunakan <b>TRUNCATE</b>, ada beberapa hal yang perlu diperhatikan:
</p>
<ul>
<li>Tidak bisa di-rollback</li>
<p style="text-align: justify;">Operasi <b>TRUNCATE</b> tidak dapat digulirkan kembali (rollback). Setelah <b>TRUNCATE</b> dieksekusi, data akan dihapus permanen.</p>
<li>Reset auto-increment</li>
<p style="text-align: justify;">ika terdapat kolom dengan penomoran otomatis (auto-increment), <b>TRUNCATE</b> akan mengatur ulang nilai penomoran tersebut ke awal.</p>
<li>Priviliges</li>
<p style="text-align: justify;">Pastikan Anda memiliki hak akses yang cukup untuk menjalankan perintah <b>TRUNCATE</b> pada tabel tertentu.</p>
</ul>
<h3>Perbedaan Truncate dengan Delete</h3>
<p style="text-align: justify;">
Perintah <b>DELETE</b> memungkinkan pengguna untuk menghapus baris data dengan kriteria tertentu menggunakan kondisi <b>WHERE</b>, sedangkan <b>TRUNCATE</b> menghapus semua data tanpa mempertimbangkan kondisi.
</p>
<h3>Kapan Menggunakan Truncate?</h3>
<p style="text-align: justify;">
<b>TRUNCATE</b> cocok digunakan ketika Anda ingin menghapus semua data dari sebuah tabel tanpa memperhatikan kondisi spesifik. Contohnya, jika Anda ingin membersihkan tabel log atau tabel yang menyimpan data sementara.
</p>
<p style="text-align: justify;">
Namun, sebaiknya gunakan <b>DELETE</b> jika Anda perlu menghapus data berdasarkan kondisi tertentu atau jika Anda ingin mempertahankan log transaksi untuk tujuan audit atau pemulihan data.
</p>
<h3>Kesimpulan</h3>
<p style="text-align: justify;">
<b>TRUNCATE</b> adalah perintah yang sangat berguna untuk menghapus seluruh isi tabel dengan cepat. Namun, penting untuk memahami bahwa operasi ini bersifat permanen dan tidak dapat digulirkan kembali. Selalu pastikan untuk melakukan backup data sebelum menjalankan operasi <b>TRUNCATE</b> pada tabel yang berisi data penting.
</p>
<p style="text-align: justify;">
Saat menggunakan <b>TRUNCATE</b> di PostgreSQL, Anda dapat membersihkan tabel dengan efisien tanpa kebutuhan untuk mempertimbangkan kriteria penghapusan. Namun, pastikan untuk memahami implikasi penggunaannya agar tidak kehilangan data yang penting.
</p>cahendihttp://www.blogger.com/profile/08018498600195831981noreply@blogger.com0Tangerang, Tangerang City, Banten, Indonesia-6.1701796 106.6403236-34.480413436178843 71.4840736 22.140054236178845 141.7965736tag:blogger.com,1999:blog-200160053429810035.post-56535678812966445562023-12-14T17:00:00.004+07:002023-12-14T18:51:21.334+07:00Panduan Lengkap: Cara Install RabbitMQ dengan Docker untuk Pemula<p style="text-align: justify;">
Dalam artikel ini, kita akan menjelajahi langkah-langkah praktis yang memungkinkan Anda menginstal RabbitMQ dengan mudah menggunakan Docker. Dengan menggunakan teknologi containerisasi seperti Docker, Anda dapat mempercepat proses instalasi, isolasi lingkungan, dan meningkatkan fleksibilitas dalam mengelola layanan message broker yang kuat ini.
</p>
<h3>Melakukan Pull RabbitMQ</h3>
<p style="text-align: justify;">
Melakukan <i>pull</i> atau unduh <b>docker image</b> ke <b>docker local</b> kalian.
</p>
<div class="baca_juga">
<div class="baca_juga_title">Perintah</div>
<pre> docker pull rabbitmq:3.12-management
</pre>
</div>
<h3>Verifikasi Image RabbitMQ</h3>
<p style="text-align: justify;">
Digunakan untuk melihat <b>docker image</b> apakah RabbitMQ berhasil di <b>pull</b>,
</p>
<div class="baca_juga">
<div class="baca_juga_title">Perintah</div>
<pre> docker images -a
</pre>
</div>
<div class="baca_juga">
<div class="baca_juga_title">
BACA JUGA</div>
<ul>
<li><a href="https://www.community-java.com/2023/12/rabbitmq-konsep-dasar-fungsi-dan-manfaat-dalam-sistem-antrean-pesan.html">Apa itu RabbitMQ</a></li>
<li><a href="https://www.community-java.com/2020/12/cara-install-postgres-dan-pgadmin4-di-docker-container.html">Cara Install PostgreSQL dan PgAdmin di Docker</a></li>
<li><a href="https://www.community-java.com/2023/12/belajar-docker-cara-install-mariadb-di-docker.html">Cara Install MariaDB di Docker</a></li>
</ul>
</div>
<h3>Membuat Container RabbitMQ</h3>
<p style="text-align: justify;">
Setelah berhasil melakukan pull image <i>RabbitMQ</i>, selanjutnya kita akan membuat sebuah container RabbitMQ dengan menggunakan perintah berikut :
</p>
<div class="baca_juga">
<div class="baca_juga_title">Perintah</div>
<pre> docker container create --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3.12-management
</pre>
</div>
<h3>Verifikasi Container RabbitMQ</h3>
<p style="text-align: justify;">
Lakukan pengecekan apakah container berhasil dibuat dengan perintah berikut :
</p>
<div class="baca_juga">
<div class="baca_juga_title">Perintah</div>
<pre> docker container ps -a
</pre>
</div>
<h3>Menjalankan Container RabbitMQ</h3>
<p style="text-align: justify;">
Setelah container RabbitMQ berhasil dibuat, tahap selanjutnya kita akan menjalankan RabbitMQ dengan perintah berikut :
</p>
<div class="baca_juga">
<div class="baca_juga_title">Perintah</div>
<pre> docker container start rabbitmq
</pre>
</div>
<p style="text-align: justify;">
Untuk mengakses RabbitMQ di <i>browser</i> silahkan ketikkan <b>http://localhost:15672/</b>. Jika sudah berhasil berjalan akan muncul tampilan seperti berikut :
</p>
<div class="separator" style="clear: both;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-qFHUJwOvXkbVAGRyI5mkoelVRDtcW2awnHh0rWlLnx_ZgJe9BEJqaJtQjEe_-9gg1dHFo0X4BBOVAnea5rWGi-powMDSd2re6yT7aiJOsS-j3oDpZPDyYBsWPtxjpRk2D_kzCk820Prz-1NZhxQexocwiVophM6ZWuFt9WSQ3JeA1hR9PXSJDEMqxxGs/s363/RabbitMQ%20Login.JPG" style="display: block; padding: 1em 0px; text-align: center;"><img alt="Belajar Docker - Cara Install RabbitMQ di Docker" border="0" data-original-height="176" data-original-width="363" height="155" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-qFHUJwOvXkbVAGRyI5mkoelVRDtcW2awnHh0rWlLnx_ZgJe9BEJqaJtQjEe_-9gg1dHFo0X4BBOVAnea5rWGi-powMDSd2re6yT7aiJOsS-j3oDpZPDyYBsWPtxjpRk2D_kzCk820Prz-1NZhxQexocwiVophM6ZWuFt9WSQ3JeA1hR9PXSJDEMqxxGs/w320-h155/RabbitMQ%20Login.JPG" width="320" /></a></div>
<p style="text-align: justify;">
Secara default, kalian dapat dapat masuk ke halaman RabbitMQ dengan username <b>guest</b> dan password <b>guest</b>.
</p>
<div class="separator" style="clear: both;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEis71E8LBNYLAeErycZfEp0WU46aKaNPivZbzwJV1y95bCj-ayS1IeSJXOfKiwlq_leVBGD5Mzj_9-5AQdicLjzlUmlfXboraR_SM7wf206JGnl7nRfOFcbRoFdQVD33cUazhAarVp_yDtFbtUu2C1S4AfKGvrQv0oVEWj939Wm2x8GdNxqOHoGi4BbDQ20/s1851/dashboard-rabbitmq.JPG" style="display: block; padding: 1em 0px; text-align: center;"><img alt="Halaman Dashboard RabbitMQ" border="0" data-original-height="929" data-original-width="1851" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEis71E8LBNYLAeErycZfEp0WU46aKaNPivZbzwJV1y95bCj-ayS1IeSJXOfKiwlq_leVBGD5Mzj_9-5AQdicLjzlUmlfXboraR_SM7wf206JGnl7nRfOFcbRoFdQVD33cUazhAarVp_yDtFbtUu2C1S4AfKGvrQv0oVEWj939Wm2x8GdNxqOHoGi4BbDQ20/s600/dashboard-rabbitmq.JPG" width="600" /></a></div>
<h3>Menambahkan dan Menghapus User di RabbitMQ</h3>
<p style="text-align: justify;">
Ketika kalian melakukan instalasi RabbitMQ di sebuah server, kalian dapat membuat user baru dan menghapus user default-nya dengan menggunakan <b>commandline</b>.
</p>
<h4>Masuk ke Container RabbitMQ</h4>
<div class="baca_juga">
<div class="baca_juga_title">Perintah</div>
<pre> docker exec -it rabbitmq /bin/bash
</pre>
</div>
<h4>Menambahkan User di RabbitMQ</h4>
<div class="baca_juga">
<div class="baca_juga_title">Perintah</div>
<pre> rabbitmqctl add_user akira P455word
</pre>
</div>
<p style="text-align: justify;">
<b>Penjelasan : </b>pada contoh perintah diatas saya membuat user <b>akira</b> dengan password <b>P455word</b>.
</p>
<h4>Menambahkan Permission pada User</h4>
<div class="baca_juga">
<div class="baca_juga_title">Perintah</div>
<pre> rabbitmqctl set_permissions -p / akira ".*" ".*" ".*"
</pre>
</div>
<h4>Menghapus User di RabbitMQ</h4>
<div class="baca_juga">
<div class="baca_juga_title">Perintah</div>
<pre> rabbitmqctl delete_user guest
</pre>
</div>
<p style="text-align: justify;">
Sekarang, kalian siap untuk memanfaatkan kekuatan RabbitMQ dalam mengelola antrian pesan, mengkoordinasikan aplikasi yang terdistribusi, dan meningkatkan arsitektur aplikasi kalian secara keseluruhan.
</p>
<p style="text-align: justify;">
Terima kasih telah mengikuti panduan ini. Semoga sukses dengan penggunaan RabbitMQ dalam proyek-proyek kalian
</p>cahendihttp://www.blogger.com/profile/08018498600195831981noreply@blogger.com0Tangerang, Tangerang City, Banten, Indonesia-6.1701796 106.6403236-34.480413436178843 71.4840736 22.140054236178845 141.7965736tag:blogger.com,1999:blog-200160053429810035.post-66821034229315590952023-12-14T13:36:00.002+07:002023-12-14T17:03:15.317+07:00RabbitMQ: Konsep Dasar, Fungsi, dan Manfaat dalam Sistem Antrean Pesan<p style="text-align: justify;">
RabbitMQ adalah perangkat lunak middleware atau perantara pesan (message broker) yang digunakan untuk mengirim dan menerima pesan antara aplikasi dan sistem yang berbeda. Ini memungkinkan sistem yang tidak saling terhubung secara langsung untuk berkomunikasi dan berbagi data, mengurangi ketergantungan pada waktu dan lokasi.
</p>
<div class="separator" style="clear: both;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKVt1EV4fq7EBn02AnHoONhl3jlgtT-F6evhq7M6U5o6Y2zkX36VuRhWesq3V8vOJ2QHPDb997euT3hMk_xgNlerq6QhC2wJu6kkJ0xdErFWagIhyphenhyphenmrqY2RwgY316TEgLbV2vXBk_xZNyMTzojZVfq0sKr3TuXMtqVEDLTba5aEf5DbT4eT50fi5A-Qd-F/s1200/rabbitmq-min.jpg" style="display: block; padding: 1em 0; text-align: center; "><img alt="artikel rabbit mq" border="0" width="600" data-original-height="675" data-original-width="1200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKVt1EV4fq7EBn02AnHoONhl3jlgtT-F6evhq7M6U5o6Y2zkX36VuRhWesq3V8vOJ2QHPDb997euT3hMk_xgNlerq6QhC2wJu6kkJ0xdErFWagIhyphenhyphenmrqY2RwgY316TEgLbV2vXBk_xZNyMTzojZVfq0sKr3TuXMtqVEDLTba5aEf5DbT4eT50fi5A-Qd-F/s600/rabbitmq-min.jpg"/></a></div>
<h3>Konsep Dasar RabbitMQ</h3>
<ol>
<li>Message Broker</li>
<ul>
<li>RabbitMQ bertindak sebagai perantara yang menerima, menyimpan, dan mengirim pesan dari satu aplikasi ke aplikasi lainnya</li>
<li>Ini memungkinkan aplikasi untuk berkomunikasi secara asinkron dan terdistribusi</li>
</ul>
<li>Antrian Pesan (Message Queues)</li>
<ul>
<li>RabbitMQ menggunakan antrian pesan untuk menyimpan pesan yang dihasilkan oleh pengirim sampai pesan tersebut diambil oleh penerima</li>
<li>Pesan yang dikirim ke antrian RabbitMQ disimpan secara aman sampai aplikasi penerima siap untuk memprosesnya</li>
</ul>
<li>Protokol Komunikasi</li>
<ul>
<li>RabbitMQ menggunakan protokol AMQP (Advanced Message Queuing Protocol) sebagai standar komunikasi utama</li>
<li>AMQP memungkinkan berbagai aplikasi untuk berkomunikasi dengan RabbitMQ secara efisien dan andal</li>
</ul>
<li>Pub/Sub dan Point-to-Point (P2P)</li>
<ul>
<li>RabbitMQ mendukung pola komunikasi pub/sub (publish/subscribe) di mana pengirim pesan (publisher) mengirim pesan ke saluran (exchange) dan satu atau lebih aplikasi penerima (subscriber) menerima pesan dari saluran tersebut</li>
<li>Juga mendukung pola point-to-point (P2P) di mana pesan dikirim langsung ke antrian dan diproses oleh satu aplikasi penerima</li>
</ul>
</ol>
<div class="baca_juga">
<div class="baca_juga_title">
BACA JUGA</div>
<ul>
<li><a href="https://www.community-java.com/2023/12/panduan-lengkap-cara-install-rabbitmq-dengan-docker-untuk-pemula.html">Panduan Lengkap Cara Install RabbitMQ di Docker</a></li>
<li><a href="https://www.community-java.com/2021/12/perbandingan-antara-microservices-dan-monolitik.html">Perbandingan Antara Microservices dan Monolitik</a></li>
<li><a href="https://www.community-java.com/2023/01/sistem-tersebar-pada-teknologi-informatika.html">Sistem Tersebar pada Teknologi Informatika</a></li>
</ul>
</div>
<h3>Manfaat RabbitMQ</h3>
<ul>
<li>Skalabilitas</li>
<p style="text-align: justify;">Memungkinkan sistem untuk mengatasi jumlah besar pesan dan aplikasi yang terhubung</p>
<li>Ketahanan Terhadap Kegagalan</li>
<p style="text-align: justify;">Dapat memulihkan diri dari kegagalan dengan mempertahankan integritas pesan yang belum diproses</p>
<li>Ketersediaan</li>
<p style="text-align: justify;">Menjamin ketersediaan layanan untuk berkomunikasi antar aplikasi</p>
<li>Asinkronitas</li>
<p style="text-align: justify;">Memungkinkan aplikasi untuk beroperasi secara independen dan tidak terkait secara langsung satu sama lain</p>
</ul>
<p style="text-align: justify;">
RabbitMQ memiliki banyak penggunaan dalam aplikasi yang memerlukan pertukaran pesan yang andal, seperti sistem mikroservis, pemrosesan pesan, manajemen antrian, dan integrasi sistem yang terdistribusi.
</p>
<p style="text-align: justify;">
Dengan konsep dasarnya yang sederhana dan fleksibilitasnya dalam pola komunikasi, RabbitMQ menjadi alat yang kuat untuk memfasilitasi komunikasi antara aplikasi dalam lingkungan yang terdistribusi.
</p>cahendihttp://www.blogger.com/profile/08018498600195831981noreply@blogger.com0Tangerang, Tangerang City, Banten, Indonesia-6.1701796 106.6403236-34.480413436178843 71.4840736 22.140054236178845 141.7965736tag:blogger.com,1999:blog-200160053429810035.post-8995152745896136042023-12-10T23:18:00.002+07:002023-12-14T17:04:21.821+07:00Belajar Docker - Cara Install MariaDB di Docker<p style="text-align: justify;">
Docker telah menjadi alat yang sangat berguna dalam pengembangan perangkat lunak modern. Dengan kemampuannya untuk membuat lingkungan yang terisolasi dan portabel, Docker memungkinkan instalasi mudah dari berbagai aplikasi, termasuk database seperti MariaDB. Jika kalian ingin memulai dengan MariaDB menggunakan Docker, ikuti langkah-langkah berikut ini.
</p>
<h3>Langkah 1: Persiapkan Lingkungan Docker</h3>
<p style="text-align: justify;">
Pastikan Docker telah diinstal di sistem kalian. Unduh dan instal Docker sesuai dengan sistem operasi yang kalian gunakan. Setelah Docker terinstal, pastikan Docker Engine sudah berjalan dengan menjalankan perintah berikut di terminal atau command prompt:
</p>
<div class="baca_juga">
<div class="baca_juga_title">Perintah</div>
<pre>
docker --version
</pre>
</div>
<h3>Langkah 2: Jalankan Container MariaDB</h3>
<p style="text-align: justify;">
Untuk memulai container MariaDB, gunakan perintah docker run dan tentukan nama container serta kata sandi yang diinginkan:
</p>
<div class="baca_juga">
<div class="baca_juga_title">Perintah</div>
<pre>
docker run -d --name nama_container_mariadb -e MYSQL_ROOT_PASSWORD=kata_sandi -p 3306:3306 -d mariadb
</pre>
</div>
<p style="text-align: justify;">
Perintah di atas akan menjalankan container MariaDB dengan nama yang telah kalian tentukan (<b>nama_container_mariadb</b>) dan akan mengatur kata sandi root untuk database.
</p>
<h3>Langkah 3: Verifikasi Instalasi</h3>
<p style="text-align: justify;">
Untuk memastikan bahwa instalasi berhasil, jalankan perintah berikut untuk melihat daftar container yang sedang berjalan:
</p>
<div class="baca_juga">
<div class="baca_juga_title">Perintah</div>
<pre>
docker ps
</pre>
</div>
<p style="text-align: justify;">
Kalian seharusnya melihat container MariaDB yang telah kalian buat dalam daftar tersebut.
</p>
<div class="baca_juga">
<div class="baca_juga_title">
BACA JUGA</div>
<ul>
<li><a href="https://www.community-java.com/2020/12/cara-install-postgres-dan-pgadmin4-di-docker-container.html">Cara Install PostgreSQL dan PgAdmin di Docker</a></li>
<li><a href="https://www.community-java.com/2022/01/belajar-mysql-pengenalan-mysql.html">Belajar Database - Pengenalan MySQL</a></li>
<li><a href="https://www.community-java.com/2023/08/cara-install-postgresql-15-di-ubuntu.html">Cara Install PostgreSQL 15 di Ubuntu</a></li>
<li><a href="https://www.community-java.com/2023/12/panduan-lengkap-cara-install-rabbitmq-dengan-docker-untuk-pemula.html">Panduan Lengkap Cara Install RabbitMQ di Docker</a></li>
</ul>
</div>
<h3>Langkah 4: Akses ke Container MariaDB</h3>
<p style="text-align: justify;">
Untuk masuk ke dalam container MariaDB, gunakan perintah berikut:
</p>
<div class="baca_juga">
<div class="baca_juga_title">Perintah</div>
<pre>
docker exec -it nama_container_mariadb bash
</pre>
</div>
<p style="text-align: justify;">
Dengan perintah ini, kalian akan masuk ke dalam shell di dalam container MariaDB.
</p>
<p style="text-align: justify;">
atau
</p>
<div class="baca_juga">
<div class="baca_juga_title">Perintah</div>
<pre>
docker exec -it nama_container_mariadb mariadb -u root -p
</pre>
</div>
<p style="text-align: justify;">
Dengan perintah ini, kalian akan masuk ke dalam database MariaDB.
</p>
<h3>Langkah 5: Menggunakan MariaDB</h3>
<p style="text-align: justify;">
Sekarang kalian dapat menggunakan perintah mysql untuk berinteraksi dengan server MariaDB di dalam container. Misalnya, untuk masuk ke shell MariaDB, jalankan:
</p>
<div class="baca_juga">
<div class="baca_juga_title">Perintah</div>
<pre>
mariadb -u root -p
</pre>
</div>
<p style="text-align: justify;">
Setelah masuk, kalian akan diminta memasukkan kata sandi yang telah kalian tentukan sebelumnya.
</p>
<h3>Langkah 6: Menghentikan dan Menghapus Container</h3>
<p style="text-align: justify;">
Jika kalian ingin menghentikan container MariaDB, gunakan perintah berikut:
</p>
<div class="baca_juga">
<div class="baca_juga_title">Perintah</div>
<pre>
docker stop nama_container_mariadb
</pre>
</div>
<p style="text-align: justify;">
Dan untuk menghapus container, gunakan perintah:
</p>
<div class="baca_juga">
<div class="baca_juga_title">Perintah</div>
<pre>
docker rm nama_container_mariadb
</pre>
</div>
<p style="text-align: justify;">
Dengan langkah-langkah di atas, kalian telah berhasil menginstal MariaDB menggunakan Docker. Kalian sekarang memiliki lingkungan database yang terisolasi dan siap digunakan untuk pengembangan atau pengujian aplikasi kalian.
</p>cahendihttp://www.blogger.com/profile/08018498600195831981noreply@blogger.com0Tangerang, Tangerang City, Banten, Indonesia-6.1701796 106.6403236-34.480413436178843 71.4840736 22.140054236178845 141.7965736tag:blogger.com,1999:blog-200160053429810035.post-52748078599346910712023-11-12T17:23:00.004+07:002023-11-12T17:43:42.813+07:00Belajar Spring Data JPA - Relasi One To Many Bidirectional<p style="text-align: justify;">
Relasi dalam pengembangan aplikasi adalah fondasi dari hubungan antar objek dalam database. Salah satu jenis relasi yang umum digunakan adalah relasi One-to-Many, yang menciptakan koneksi antara satu entitas dengan banyak entitas terkait. Dalam artikel ini, kita akan membahas relasi One-to-Many bidireksional dan konsep dasarnya.
</p>
<h4>Apa itu Relasi One-to-Many Bidirectional?</h4>
<p style="text-align: justify;">
Relasi One-to-Many <i>bidirectional</i> mengacu pada hubungan di antara dua entitas, di mana satu entitas dapat terhubung dengan banyak entitas terkait, dan sebaliknya. Dalam konteks ini, <b>"One"</b> mengacu pada entitas yang memiliki hubungan, dan <b>"Many"</b> mengacu pada entitas terkait. <b>Bidirectional</b> berarti bahwa kedua entitas mengetahui tentang keberadaan satu sama lain.
</p>
<p style="text-align: justify;">
Dalam kasus relasi <b>@OneToMany</b>, kita dapat mengimplementasikannya secara <i>bidirectional</i>, yang berarti setiap entitas terkait memiliki pengetahuan tentang entitas lainnya. Dalam konteks <b>Spring Data JPA</b>, kita dapat menggunakan anotasi <b>@OneToMany</b> untuk menentukan hubungan tersebut.
</p>
<h3>Persiapan</h3>
<p style="text-align: justify;">
Berikut ini merupakan tools yang saya gunakan saat membuat artikel ini :
</p>
<ul>
<li>Apache Maven 3.9.5</li>
<li>Spring Boot 3.1.5 <i>versi terbaru saat artikel ini dibuat</i></li>
<li>Java 21</li>
<li>JPostgreSQL 16</li>
</ul>
<br/>
<h4>Membuat Database</h4>
<div class="baca_juga">
<div class="baca_juga_title">Database</div>
<pre>
--Membuat Database db_retail
CREATE DATABASE db_retail;
--Membuat Tabel Penjualan
CREATE TABLE penjualan(
id bigserial not null,
kode_penjualan varchar(255) not null,
tanggal_penjualan date not null,
CONSTRAINT penjualan_pk PRIMARY KEY (id),
CONSTRAINT kode_penjualan_unique UNIQUE (kode_penjualan)
);
--Membuat Tabel Penjualan Detail
CREATE TABLE penjualan_detail(
id bigserial not null,
kode_produk varchar(10) not null,
nama_produk varchar(255) not null,
jumlah_produk int not null,
harga_produk double precision not null,
penjualan_id bigint not null,
CONSTRAINT penjualan_detail_pk PRIMARY KEY (id),
CONSTRAINT penjualan_id_fk FOREIGN KEY (penjualan_id)
REFERENCES penjualan (id)
ON DELETE CASCADE
ON UPDATE CASCADE
);
</pre>
</div>
<h3>Contoh Program One To Many Bidirectional</h3>
<div class="baca_juga">
<div class="baca_juga_title">pom.xml</div>
<pre>
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.1.5</version>
<relativePath/>
</parent>
<groupId>id.aban</groupId>
<artifactId>belajar-spring</artifactId>
<version>1.0.0</version>
<name>belajar-spring</name>
<description>belajar-spring</description>
<properties>
<java.version>21</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<argLine>-XX:+EnableDynamicAgentLoading</argLine>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>
</pre>
</div>
<div class="baca_juga">
<div class="baca_juga_title">properties</div>
<pre>
server.port=8080
server.servlet.context-path=/belajar-spring
spring.jpa.open-in-view=false
#Konfigurasi Postgres
spring.datasource.url=jdbc:postgresql://localhost:5432/db_retail
spring.datasource.username=postgres
spring.datasource.password=postgres
#Konfigurasi Hibernate
spring.jpa.hibernate.ddl-auto=none
</pre>
</div>
<div class="baca_juga">
<div class="baca_juga_title">ReponseData</div>
<pre>
package id.aban.belajarspring.response;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class ResponseData<T> {
private boolean status;
private String pesan;
private T data;
}
</pre>
</div>
<h4>Request Class</h4>
<div class="baca_juga">
<div class="baca_juga_title">PenjualanRequest</div>
<pre>
package id.aban.belajarspring.request;
import lombok.Getter;
import lombok.Setter;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
import lombok.Builder;
import java.sql.Date;
import java.util.List;
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class PenjualanRequest {
private String kodePenjualan;
private Date tanggalPenjualan;
private List<PenjualanDetailRequest> details;
}
</pre>
</div>
<div class="baca_juga">
<div class="baca_juga_title">PenjualanDetailRequest</div>
<pre>
package id.aban.belajarspring.request;
import lombok.Getter;
import lombok.Setter;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
import lombok.Builder;
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class PenjualanDetailRequest {
private String kodeProduk;
private String namaProduk;
private int jumlahProduk;
private double hargaProduk;
}
</pre>
</div>
<h4>Entity Class</h4>
<div class="baca_juga">
<div class="baca_juga_title">Penjualan</div>
<pre>
package id.aban.belajarspring.entities;
import com.fasterxml.jackson.annotation.JsonManagedReference;
import jakarta.persistence.*;
import lombok.Getter;
import lombok.Setter;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
import lombok.Builder;
import java.sql.Date;
import java.util.List;
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Entity
@Table(name = "penjualan")
public class Penjualan {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@Column(name = "kode_penjualan")
private String kodePenjualan;
@Column(name = "tanggal_penjualan")
private Date tanggalPenjualan;
@JsonManagedReference
@OneToMany(mappedBy = "penjualan",
cascade = CascadeType.ALL,
orphanRemoval = true,
fetch = FetchType.EAGER)
private List<PenjualanDetail> details;
}
</pre>
</div>
<div class="baca_juga">
<div class="baca_juga_title">PenjualanDetail</div>
<pre>
package id.aban.belajarspring.entities;
import com.fasterxml.jackson.annotation.JsonBackReference;
import jakarta.persistence.*;
import lombok.Getter;
import lombok.Setter;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
import lombok.Builder;
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Entity
@Table(name = "penjualan_detail")
public class PenjualanDetail {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@Column(name = "kode_produk")
private String kodeProduk;
@Column(name = "nama_produk")
private String namaProduk;
@Column(name = "jumlah_produk")
private int jumlahProduk;
@Column(name = "harga_produk")
private double hargaProduk;
@JsonBackReference
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "penjualan_id", referencedColumnName = "id")
}
</pre>
</div>
<h4>Repository</h4>
<div class="baca_juga">
<div class="baca_juga_title">PenjualanRepository</div>
<pre>
package id.aban.belajarspring.repositories;
import id.aban.belajarspring.entities.Penjualan;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface PenjualanRepository extends JpaRepository<Penjualan, Long> {
}
</pre>
</div>
<h4>Service</h4>
<div class="baca_juga">
<div class="baca_juga_title">Service</div>
<pre>
package id.aban.belajarspring.service;
import id.aban.belajarspring.entities.Penjualan;
import id.aban.belajarspring.request.PenjualanRequest;
import id.aban.belajarspring.response.ResponseData;
import java.util.List;
public interface PenjualanService {
public ResponseData<List<Penjualan>> findAll();
public ResponseData<Penjualan> findById(long id);
public ResponseData<Penjualan> create(PenjualanRequest obj);
public ResponseData<Penjualan> update(long id, PenjualanRequest obj);
public ResponseData delete(long id);
}
</pre>
</div>
<div class="baca_juga">
<div class="baca_juga_title">Service Impl</div>
<pre>
package id.aban.belajarspring.service;
import id.aban.belajarspring.entities.Penjualan;
import id.aban.belajarspring.entities.PenjualanDetail;
import id.aban.belajarspring.repositories.PenjualanRepository;
import id.aban.belajarspring.request.PenjualanRequest;
import id.aban.belajarspring.response.ResponseData;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.stream.Collectors;
@Service
public class PenjualanServiceImpl implements PenjualanService {
@Autowired
private PenjualanRepository repository;
@Override
public ResponseData<List<Penjualan>> findAll() {
ResponseData response = ResponseData.builder()
.status(false)
.pesan("Data Penjualan Tidak Ditemukan")
.build();
List<Penjualan> list = repository.findAll();
if(!list.isEmpty()){
response.setStatus(true);
response.setPesan("Data Berhasil Ditemukan");
response.setData(list);
}
return response;
}
@Override
public ResponseData<Penjualan> findById(long id) {
ResponseData response = ResponseData.builder()
.status(false)
.pesan("Data Penjualan Tidak Ditemukan")
.build();
Penjualan penjualan = repository.findById(id).orElse(new Penjualan());
if(penjualan.getId() > 0){
response.setStatus(true);
response.setPesan("Data Berhasil Ditemukan");
response.setData(penjualan);
}
return response;
}
@Transactional
@Override
public ResponseData<Penjualan> create(PenjualanRequest obj) {
ResponseData response = ResponseData.builder()
.status(false)
.pesan("Data Gagal Disimpan")
.build();
Penjualan penjualan = Penjualan.builder()
.kodePenjualan(obj.getKodePenjualan())
.tanggalPenjualan(obj.getTanggalPenjualan())
.build();
penjualan.setDetails(
obj.getDetails()
.stream()
.map(detail -> PenjualanDetail.builder()
.kodeProduk(detail.getKodeProduk())
.namaProduk(detail.getNamaProduk())
.jumlahProduk(detail.getJumlahProduk())
.hargaProduk(detail.getHargaProduk())
.penjualan(penjualan)
.build()).collect(Collectors.toList()
)
);
Penjualan p = repository.save(penjualan);
response.setStatus(true);
response.setPesan("Data Berhasil Disimpan");
response.setData(p);
return response;
}
@Transactional
@Override
public ResponseData<Penjualan> update(long id, PenjualanRequest obj) {
ResponseData response = ResponseData.builder()
.status(false)
.pesan("Data Penjualan Tidak Ditemukan")
.build();
Penjualan penjualan = repository.findById(id)
.orElse(Penjualan.builder().id(0).build());
if(penjualan.getId() > 0) {
penjualan.setKodePenjualan(obj.getKodePenjualan());
penjualan.setTanggalPenjualan(obj.getTanggalPenjualan());
penjualan.getDetails().clear();
penjualan.getDetails().addAll(
obj.getDetails()
.stream()
.map(detail -> PenjualanDetail.builder()
.kodeProduk(detail.getKodeProduk())
.namaProduk(detail.getNamaProduk())
.jumlahProduk(detail.getJumlahProduk())
.hargaProduk(detail.getHargaProduk())
.penjualan(penjualan)
.build()).collect(Collectors.toList()
)
);
Penjualan p = repository.save(penjualan);
response.setStatus(true);
response.setPesan("Data Berhasil Diubah");
response.setData(p);
}
return response;
}
@Override
public ResponseData delete(long id) {
ResponseData response = ResponseData.builder()
.status(false)
.pesan("Data Penjualan Tidak Ditemukan")
.build();
Penjualan penjualan = repository.findById(id).orElse(Penjualan.builder().build());
if(penjualan.getId() > 0) {
repository.deleteById(id);
response.setStatus(true);
response.setPesan("Data Berhasil Dihapus");
}
return response;
}
}
</pre>
</div>
<h4>Rest Controller</h4>
<div class="baca_juga">
<div class="baca_juga_title">Rest API</div>
<pre>
package id.aban.belajarspring.api;
import id.aban.belajarspring.entities.Penjualan;
import id.aban.belajarspring.request.PenjualanRequest;
import id.aban.belajarspring.response.ResponseData;
import id.aban.belajarspring.service.PenjualanService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("penjualan")
public class PenjualanApi {
@Autowired
private PenjualanService service;
@GetMapping("/list")
public ResponseEntity findAll(){
ResponseData<List<Penjualan>> response = service.findAll();
if(response.isStatus()){
return ResponseEntity.ok().body(response.getData());
}
return ResponseEntity.status(HttpStatus.NOT_FOUND).build();
}
@GetMapping("")
public ResponseEntity findById(@RequestParam(name = "id", required = true) long id){
ResponseData<Penjualan> response = service.findById(id);
if(response.isStatus()){
return ResponseEntity.ok().body(response.getData());
}
return ResponseEntity.status(HttpStatus.NOT_FOUND).build();
}
@PostMapping("/create")
public ResponseEntity create(@RequestBody PenjualanRequest request){
ResponseData<Penjualan> response = service.create(request);
if(response.isStatus()){
return ResponseEntity.ok(response.getData());
}
return ResponseEntity.status(HttpStatus.NOT_ACCEPTABLE).build();
}
@PutMapping("/update")
public ResponseEntity update(@RequestParam(name = "id", required = true) long id,
@RequestBody PenjualanRequest request){
ResponseData<Penjualan> response = service.update(id, request);
if(response.isStatus()){
return ResponseEntity.ok().body(response.getData());
}
return ResponseEntity.status(HttpStatus.NOT_FOUND).build();
}
@DeleteMapping("/delete")
public ResponseEntity delete(@RequestParam(name = "id", required = true) long id){
ResponseData response = service.delete(id);
if(response.isStatus()){
return ResponseEntity.status(HttpStatus.OK).build();
}
return ResponseEntity.status(HttpStatus.NOT_FOUND).build();
}
}
</pre>
</div>
<h4>Kelebihan</h4>
<ul>
<li>Navigasi Mudah</li>
<p style="text-align: justify;">
Dengan hubungan <i>bidireksional</i>, Anda dapat dengan mudah melakukan navigasi dari satu entitas ke entitas terkait. Misalnya, dari objek <b>Parent</b>, Anda dapat mengakses semua objek <b>Child</b>, dan sebaliknya.
</p>
<li>Manajemen Cascade</li>
<p style="text-align: justify;">
Penggunaan atribut <b>cascade</b> pada anotasi <b>@OneToMany</b> memungkinkan operasi (seperti <i>persist</i>, <i>merge</i>, <i>remove</i>) untuk di-cascade dari entitas <b>parent</b> ke entitas <b>child</b>. Ini mengurangi <i>boilerplate code</i> dan membuat manajemen entitas menjadi lebih mudah.
</p>
<li>Optimasi Query</li>
<p style="text-align: justify;">
Dengan <i>bidirectional</i>, kalian dapat mengoptimalkan query basis data dengan menggunakan <b>fetch</b> dan <b>join</b> untuk mengambil entitas terkait dalam satu query, menghindari pemanggilan ekstra ke database.
</p>
<li>Kejelasan Model</li>
<p style="text-align: justify;">
Dalam beberapa kasus, model yang <i>bidirectional</i> dapat memberikan representasi yang lebih jelas dari hubungan antar entitas dalam aplikasi kalian.
</p>
</ul>
<h4>Kekurangan</h4>
<ul>
<li>Kompleksitas</li>
<p style="text-align: justify;">
Penggunaan hubungan <i>bidirectional</i> dapat meningkatkan kompleksitas kode dan konfigurasi. Perlu memastikan bahwa kedua sisi hubungan dikelola dengan benar untuk menghindari masalah seperti ketidaksesuaian data.
</p>
<li>Potensi Kesalahan</li>
<p style="text-align: justify;">
Jika tidak dikelola dengan benar, dapat terjadi potensi kesalahan seperti inkonsistensi data. Misalnya, jika satu sisi relasi tidak diperbarui, maka sisi lainnya mungkin tidak merefleksikan perubahan.
</p>
<li>Pemakaian Memori</li>
<p style="text-align: justify;">
Bidirectional relationship dapat memakan lebih banyak memori karena masing-masing entitas harus menyimpan referensi ke entitas terkaitnya. Hal ini terutama penting jika koleksi entitas terkait cukup besar.
</p>
<li>Kemungkinan Deadlock</li>
<p style="text-align: justify;">
Pada beberapa kasus, penggunaan transaksi bersamaan dengan hubungan <i>bidirectional</i> dapat menyebabkan potensi deadlock jika tidak dikelola dengan hati-hati.
</p>
</ul>
<h4>Kesimpulan</h4>
<p style="text-align: justify;">
Pilihan antara menggunakan hubungan <b>@OneToMany</b> <i>bidirectional</i> atau tidak tergantung pada kebutuhan dan kompleksitas aplikasi Anda. Jika navigasi mudah dan manajemen kaskad diperlukan, <i>bidirectional</i> dapat menjadi pilihan yang baik, tetapi perlu dikelola dengan hati-hati untuk menghindari potensi kesalahan dan kompleksitas yang tidak perlu.</p>cahendihttp://www.blogger.com/profile/08018498600195831981noreply@blogger.com0Tangerang, Tangerang City, Banten, Indonesia-6.1701796 106.6403236-34.480413436178843 71.4840736 22.140054236178845 141.7965736tag:blogger.com,1999:blog-200160053429810035.post-20633069692592615022023-09-04T22:31:00.000+07:002023-09-04T22:31:01.857+07:00Mengenal Quarkus: Framework Java untuk Aplikasi Cloud-Native yang Cepat dan Efisien<p style="text-align: justify;">
Dunia pengembangan perangkat lunak terus berubah dan berkembang dengan cepat. Salah satu tren terbaru dalam pengembangan aplikasi Java adalah penggunaan kerangka kerja yang ringan dan cepat. Quarkus adalah salah satu kerangka kerja yang muncul dalam beberapa tahun terakhir dan mendapat perhatian yang signifikan dari komunitas pengembang Java. Dalam artikel ini, kita akan memahami apa itu Quarkus, mengapa itu penting, dan bagaimana cara menggunakannya untuk mengembangkan aplikasi Java modern.
</p>
<h3>Apa itu Quarkus</h3>
<p style="text-align: justify;">
<b>Quarkus</b> adalah framework Java yang dikembangkan oleh Red Hat, dirancang khusus untuk membangun aplikasi cloud-native. Ia menawarkan sejumlah fitur yang sangat menguntungkan dalam lingkungan cloud, seperti performa yang sangat tinggi, startup yang cepat, dan penggunaan memori yang rendah. Quarkus didasarkan pada teknologi-teknologi terkini dalam ekosistem Java, termasuk <i>GraalVM</i>, <i>Eclipse MicroProfile</i>, dan banyak lagi.
</p>
<p style="text-align: justify;">
Sebelum Quarkus, banyak aplikasi Java cenderung besar, lambat dalam memulai, dan memakan banyak sumber daya. Quarkus lahir sebagai upaya untuk mengatasi masalah ini dengan memberikan solusi pengembangan yang lebih efisien.</p>
<h3>Keunggulan Quarkus</h3>
<ol>
<li><b>Performa yang Cepat</b>: Quarkus memungkinkan aplikasi Anda untuk memulai dengan sangat cepat dan berjalan dengan performa yang optimal. Ini adalah hal yang sangat penting dalam lingkungan cloud di mana skalabilitas dan responsifitas sangat dihargai.</li>
<li><b>Konsumsi Memori Rendah</b>: Penggunaan memori yang efisien adalah salah satu kekuatan Quarkus. Ini sangat cocok untuk aplikasi yang berjalan dalam wadah (container) dengan sumber daya terbatas.</li>
<li><b>Kompilasi Ahead-of-Time (AOT)</b>: Quarkus memungkinkan Anda mengkompilasi aplikasi Anda ke dalam kode mesin langsung (native executable) menggunakan GraalVM. Hal ini dapat meningkatkan performa startup bahkan lebih lanjut.</li>
<li><b>Dukungan Ekosistem yang Kuat</b>: Quarkus mendukung berbagai teknologi populer dalam ekosistem Java, termasuk <i>Hibernate</i>, <i>Apache Kafka</i>, <i>RESTEasy</i>, dan banyak lagi.</li>
<li><b>Komersial dan Open Source</b>: Quarkus adalah proyek open source dengan dukungan dari <b>Red Hat</b>. Ini berarti Anda dapat memanfaatkan teknologi ini tanpa biaya lisensi.</li>
</ol>
<p style="text-align: justify;">
Terima kasih sudah menyimak, teman-teman! Semoga artikel ini memberi Anda pemahaman yang lebih baik tentang Quarkus dan memotivasi Anda untuk menggali lebih dalam. Selamat berpetualang dalam dunia Quarkus</p>cahendihttp://www.blogger.com/profile/08018498600195831981noreply@blogger.com0Tangerang, Tangerang City, Banten, Indonesia-6.1701796 106.6403236-34.480413436178843 71.4840736 22.140054236178845 141.7965736tag:blogger.com,1999:blog-200160053429810035.post-79581952825567450972023-08-19T19:35:00.000+07:002023-08-19T19:35:09.242+07:00Cara Mengkonfigurasi Firewall pada Ubuntu dengan UFW<h3>Apa itu Firewall dan UFW?</h3>
<p style="text-align: justify;">Firewall adalah suatu perangkat lunak atau perangkat keras yang bertindak sebagai penghalang antara jaringan Anda dan dunia luar. Ini membantu melindungi sistem Anda dari ancaman dan serangan yang dapat datang dari internet. Firewall mengatur aliran data dengan memeriksa paket-paket yang masuk dan keluar, dan memutuskan apakah harus mengizinkan atau memblokirnya berdasarkan aturan yang telah ditentukan.</p>
<p style="text-align: justify;">UFW (Uncomplicated Firewall) adalah alat yang digunakan untuk mengelola firewall pada sistem operasi Ubuntu. Meskipun mudah digunakan, UFW tetap kuat dalam mengatur lalu lintas jaringan. Dalam tutorial ini, kami akan membantu Anda mengkonfigurasi firewall menggunakan UFW untuk melindungi sistem Anda.</p>
<h3>Langkah 1: Buka Terminal</h3>
<p style="text-align: justify;">Pertama, mari membuka Terminal di Ubuntu. Terminal adalah tempat di mana Anda dapat memasukkan perintah-perintah untuk berinteraksi dengan sistem.</p>
<h3>Langkah 3: Instal UFW (Jika Belum Terpasang)</h3>
<p style="text-align: justify;">
Untuk memastikan bahwa UFW terpasang, jalankan perintah ini:
</p>
<div class="baca_juga">
<div class="baca_juga_title">Perintah</div>
<pre>
sudo apt-get update
sudo apt-get install ufw
</pre>
</div>
<p style="text-align: justify;">Konfirmasi instalasi dengan mengetik 'y' dan tekan Enter. UFW akan diunduh dan dipasang.</p>
<h3>Langkah 4: Cek Status UFW</h3>
<p style="text-align: justify;">Setelah instalasi selesai, mari periksa status UFW. Di Terminal, ketik:</p>
<div class="baca_juga">
<div class="baca_juga_title">Perintah</div>
<pre>sudo ufw status</pre>
</div>
<p style="text-align: justify;">Ini akan memberi Anda informasi tentang apakah UFW sudah aktif atau tidak.</p>
<h3>Langkah 5: Aktifkan UFW</h3>
<p style="text-align: justify;">
Jika UFW belum aktif, Anda perlu mengaktifkannya. Ketik:
</p>
<div class="baca_juga">
<div class="baca_juga_title">Perintah</div>
<pre>sudo ufw enable</pre>
</div>
<p style="text-align: justify;">Anda akan diminta konfirmasi. Ketik 'y' dan tekan Enter.</p>
<h3>Langkah 6: Izinkan Koneksi SSH (Opsional)</h3>
<p style="text-align: justify;">Jika Anda ingin mengakses sistem via SSH, izinkan koneksi SSH:</p>
<div class="baca_juga">
<div class="baca_juga_title">Perintah</div>
<pre>sudo ufw allow ssh</pre>
</div>
<h3>Langkah 7: Izinkan Koneksi untuk Aplikasi Spesifik (Opsional)</h3>
<p style="text-align: justify;">Anda juga bisa mengizinkan koneksi untuk aplikasi tertentu. Misalnya, untuk server web Apache, izinkan koneksi HTTP dan HTTPS:</p>
<div class="baca_juga">
<div class="baca_juga_title">Perintah</div>
<pre>
sudo ufw allow http
sudo ufw allow https
</pre>
</div>
<h3>Langkah 8: Terapkan Konfigurasi</h3>
<p style="text-align: justify;">Setelah mengatur kebijakan default dan izinkan koneksi yang diperlukan, terapkan konfigurasi:</p>
<div class="baca_juga">
<div class="baca_juga_title">Perintah</div>
<pre>sudo ufw enable</pre>
</div>
<h3>Langkah 9: Cek Konfigurasi</h3>
<p style="text-align: justify;"> Untuk memeriksa konfigurasi yang diatur, ketik:</p>
<div class="baca_juga">
<div class="baca_juga_title">Perintah</div>
<pre>sudo ufw status</pre>
</div>
<h3>Catatan</h3>
<p style="text-align: justify;">
Kalian dapat mengizinkan dan memblokir koneksi dengan menggunakan <b>'allow'</b> dan <b>'deny'</b>. Sebagai contoh :
</p>
<div class="baca_juga">
<div class="baca_juga_title">Perintah Izin</div>
<pre>sudo ufw allow 8080</pre>
</div>
<div class="baca_juga">
<div class="baca_juga_title">Perintah Blokir</div>
<pre>sudo ufw deny 8080</pre>
</div>
<p style="text-align: justify;">
Jika ingin menonaktifkan UFW, kalian dapat gunakan perintah berikut :
</p>
<div class="baca_juga">
<div class="baca_juga_title">Perintah Blokir</div>
<pre>sudo ufw disable</pre>
</div>
<p style="text-align: justify;">
Dengan mengikuti langkah-langkah di atas, Anda telah berhasil mengkonfigurasi firewall menggunakan UFW pada Ubuntu. Firewall adalah lapisan pertahanan yang penting untuk melindungi sistem Anda dari ancaman jaringan. Pastikan Anda memahami setiap konfigurasi sebelum menerapkannya. Tutorial ini harus memberi Anda pemahaman yang kokoh untuk memulai perlindungan sistem Anda. Jika ingin mendalami lebih lanjut, Anda dapat merujuk ke dokumentasi resmi UFW atau sumber daya lainnya
</p>cahendihttp://www.blogger.com/profile/08018498600195831981noreply@blogger.com0Tangerang, Tangerang City, Banten, Indonesia-6.1701796 106.6403236-34.480413436178843 71.4840736 22.140054236178845 141.7965736tag:blogger.com,1999:blog-200160053429810035.post-61501537804367986792023-08-19T16:17:00.002+07:002023-12-10T23:17:29.674+07:00Cara Install PostgreSQL 15 di Ubuntu<p style="text-align: justify;">
PostgreSQL, juga dikenal sebagai Postgres, adalah sistem manajemen basis data relasional yang kuat dan terpercaya. Dalam panduan ini, kita akan menjelaskan langkah demi langkah cara menginstal PostgreSQL 15 di sistem operasi Ubuntu. PostgreSQL 15 membawa berbagai peningkatan performa dan fitur baru yang sangat berguna.
</p>
<h3>Update Package Ubuntu</h3>
<p style="text-align: justify;">Sebelum memulai proses instalasi, langkah pertama yang perlu Anda lakukan adalah memperbarui paket sistem Anda agar mendapatkan versi paket terbaru. Buka terminal dan jalankan perintah berikut:</p>
<div class="baca_juga">
<div class="baca_juga_title">Perintah</div>
<b><pre>sudo apt-get update</pre></b>
</div>
<h3>Menambahkan Repositori PostgreSQL</h3>
<p style="text-align: justify;">
Selanjutnya adalah menambahkan repositori resmi PostgreSQL ke dalam sistem. Repositori ini akan memberikan Anda akses ke paket-paket PostgreSQL terbaru. Jalankan perintah berikut di terminal:
</p>
<div class="baca_juga">
<div class="baca_juga_title">Perintah</div>
<b><pre>sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" >> /etc/apt/sources.list.d/pgdg.list'
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
</pre></b>
</div>
<p style="text-align: justify;">
Setalah berhasil menambahkan repository PostgreSQL, selanjutnya lakukan update package ubuntu sekali lagi.
</p>
<div class="baca_juga">
<div class="baca_juga_title">Perintah</div>
<b><pre>sudo apt-get update</pre></b>
</div>
<h3>Instalasi PostgreSQL</h3>
<p style="text-align: justify;">
Setelah menambahkan repositori dan update repository, kalian sudah bisa untuk menginstal PostgreSQL 15. Jalankan perintah berikut di terminal:
</p>
<div class="baca_juga">
<div class="baca_juga_title">Perintah</div>
<b><pre>sudo apt-get -y install postgresql</pre></b>
</div>
<h3>Verifikasi</h3>
<p style="text-align: justify;">
Kalian dapat melakukan pengecekan apakah service PostgreSQL sudah berjalan atau belum dengan menggunakan perintah berikut :
</p>
<div class="baca_juga">
<div class="baca_juga_title">Perintah</div>
<b><pre>sudo systemctl status postgresql</pre></b>
</div>
<div class="separator" style="clear: both;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgIobUOP6moiaF0aBs26wvOydrLifkFwJ-nME-fNoxWCNL6EzK9fPnRY7aNNQmX9r3dPTqanUWWpYOh8EoU9im9T8wHjFmVY00xyM5lXcKn3tmMGj0zMULngdlbOZ4aB2PtI95QmFbZqySZOt6CgayhLJepsD1QOp3hcEjHU2Y_YRqKhU1lcefBUky513mp/s753/cek%20postgresql.JPG" style="display: block; padding: 1em 0px; text-align: center;">
<img alt="cara install postgres di ubuntu" border="0" data-original-height="133" data-original-width="753" height="113" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgIobUOP6moiaF0aBs26wvOydrLifkFwJ-nME-fNoxWCNL6EzK9fPnRY7aNNQmX9r3dPTqanUWWpYOh8EoU9im9T8wHjFmVY00xyM5lXcKn3tmMGj0zMULngdlbOZ4aB2PtI95QmFbZqySZOt6CgayhLJepsD1QOp3hcEjHU2Y_YRqKhU1lcefBUky513mp/w640-h113/cek%20postgresql.JPG" title="cara install postgres di ubuntu" width="640" />
</a>
</div>
<p style="text-align: justify;">
Berdasarkan gambar diatas, menunjukan bahwa service PostgreSQL sudah aktif. Kalian juga dapat mengecek versi PostgreSQL yang ter-install di Ubuntu dengan mengetikan perintah berikut :
</p>
<div class="baca_juga">
<div class="baca_juga_title">Perintah</div>
<b><pre>psql --version</pre></b>
</div>
<p style="text-align: justify;">
Akan muncul pesan seperti berikut:
</p>
<blockquote>psql (PostgreSQL) 15.4 (Ubuntu 15.4-1.pgdg20.04+1)</blockquote>
<h5>Catatan</h5>
<p style="text-align: justify;">
Pada saat tutorial ini dibuat, versi terbarunya <b>PostgreSQL 15.4</b>
</p>
<h3>Melakukan Akses PostgreSQL</h3>
<p style="text-align: justify;">
dapat mengakses PostgreSQL di Ubuntu melalui command line menggunakan perintah <b>psql</b>. Jalankan perintah berikut dengan hak akses superuser (biasanya "postgres"):
</p>
<div class="baca_juga">
<div class="baca_juga_title">Perintah</div>
<b><pre>sudo -u postgres psql</pre></b>
</div>
<h3>Konfigurasi PostgreSQL</h3>
<p style="text-align: justify;">
<b>postgresql.conf</b> adalah berkas konfigurasi utama PostgreSQL yang mengatur berbagai aspek perilaku dan performa database. Buka berkas konfigurasi PostgreSQL dengan perintah:
</p>
<div class="baca_juga">
<div class="baca_juga_title">Perintah</div>
<b><pre>sudo nano /etc/postgresql/15/main/postgresql.conf</pre></b>
</div>
<p style="text-align: justify;">
jika menggunakan versi yang berbeda, silahkan sesuaikan versinya.
</p>
<div class="baca_juga">
<div class="baca_juga_title">Perintah</div>
<b><pre>sudo nano /etc/postgresql/{versi}/main/postgresql.conf</pre></b>
</div>
<p style="text-align: justify;">
Cari baris yang mengandung listen_addresses dan ubah nilainya menjadi '*' untuk mengizinkan koneksi dari semua alamat IP:
</p>
<div class="baca_juga">
<div class="baca_juga_title">Perintah</div>
<b><pre>listen_addresses = '*'</pre></b>
</div>
<p style="text-align: justify;">
Parameter ini menentukan alamat IP atau alamat host yang diizinkan untuk terhubung ke server PostgreSQL. Anda dapat mengatur nilainya menjadi '<b>localhost</b>' untuk hanya mengizinkan koneksi dari komputer lokal atau '<b>*</b>' untuk mengizinkan koneksi dari semua alamat IP.
</p>
<div class="baca_juga">
<div class="baca_juga_title">
BACA JUGA</div>
<ul>
<li><a href="https://www.community-java.com/2020/12/cara-install-postgres-dan-pgadmin4-di-docker-container.html">Cara Install PostgreSQL dan PgAdmin di Docker</a></li>
<li><a href="https://www.community-java.com/2019/04/belajar-database-postgres-klausa-limit-dan-offset.html">Belajar Database - Penggunaan Limit dan Offset</a></li>
<li><a href="https://www.community-java.com/2021/11/cara-melakukan-backup-dan-restore-database-postgresql.html">Belajar Database - Cara Melakukan Backup dan Restore di PostgreSQL</a></li>
</ul>
</div>
<h3>Konfigurasi Akses PostgreSQL</h3>
<p style="text-align: justify;">
Saat kalian mencoba untuk melakukan akses PostgreSQL dari pengguna atau user lain, akan muncul pesan seperti berikut :
</p>
<blockquote>psql: error: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: FATAL: Peer authentication failed for user "postgres"</blockquote>
<p style="text-align: justify;">
Jika kalian menginginkan PostgreSQL dapat di akses oleh pengguna atau user lain, kalian dapat melakukan perubahan pada file <b>pg_hba.conf</b>.
</p>
<div class="baca_juga">
<div class="baca_juga_title">Perintah</div>
<b><pre>sudo nano /etc/postgresql/15/main/pg_hba.conf</pre></b>
</div>
<p style="text-align: justify;">
jika menggunakan versi yang berbeda, silahkan sesuaikan versinya.
</p>
<div class="baca_juga">
<div class="baca_juga_title">Perintah</div>
<b><pre>sudo nano /etc/postgresql/{versi}/main/pg_hba.conf</pre></b>
</div>
<p style="text-align: justify;">
Cari baris perintah seperti baris di bawah ini :
</p>
<div class="baca_juga">
<div class="baca_juga_title">Baris</div>
<b>
<pre>
# TYPE DATABASE USER ADDRESS METHOD
host all all peer
</pre>
</b>
</div>
<p style="text-align: justify;">
Ubah menjadi
</p>
<div class="baca_juga">
<div class="baca_juga_title">Baris</div>
<b>
<pre>
# TYPE DATABASE USER ADDRESS METHOD
host all all trust
</pre>
</b>
</div>
<p style="text-align: justify;">
Sekian penjelasan mengenai cara melakukan install PostgreSQL 15 di Ubuntu 22.0.4 LTS, semoga membantu.
</p>cahendihttp://www.blogger.com/profile/08018498600195831981noreply@blogger.com0Tangerang, Tangerang City, Banten, Indonesia-6.1701796 106.6403236-34.480413436178843 71.4840736 22.140054236178845 141.7965736tag:blogger.com,1999:blog-200160053429810035.post-41460438732139598032023-08-01T14:44:00.001+07:002023-08-01T14:44:16.284+07:00Cara Mengembalikan Commit sebelum Rebase di Git<p style="text-align: justify;">Dalam dunia pengembangan perangkat lunak menggunakan Git, penggunaan <i>rebase</i> menjadi umum untuk mengintegrasikan perubahan dari <i>branch</i> lain ke <i>main branch</i>. Namun, terkadang kita ingin mengembalikan repositori ke kondisi sebelum <i>rebase</i>. Artikel ini akan memberikan panduan praktis tentang cara mengembalikan <i>commit</i> sebelum <i>rebase</i> di Git menggunakan perintah <b>'git reflog'</b> dan <b>'git reset'</b>.</p>
<h3>Apa itu Rebase di Git?</h3>
<p style="text-align: justify;">
<b>Rebase</b> adalah salah satu operasi penting di Git yang digunakan untuk mengubah sejarah commit. Ini memungkinkan pengguna untuk memindahkan cabang saat menggabungkan perubahan ke cabang utama, menciptakan sejarah <i>commit</i> yang lebih bersih. Meskipun rebase memiliki manfaatnya, ada situasi di mana kita perlu mengembalikan repositori ke kondisi sebelum rebase.</p>
<h3>Kenapa Mengembalikan Commit sebelum Rebase?</h3>
<p style="text-align: justify;">
Situasi umum di mana pengembalian <i>commit</i> sebelum rebase diperlukan termasuk konflik saat <i>rebase</i>, kehilangan riwayat commit, atau kesalahan rebase yang tidak diinginkan. Mengembalikan <i>commit</i> sebelum <i>rebase</i> memungkinkan kita untuk kembali ke titik sebelum perubahan ini dilakukan dan menghindari masalah yang mungkin muncul.</p>
<h3>Kenapa Mengembalikan Commit sebelum Rebase?</h3>
<p style="text-align: justify;">
<b>git reflog</b> adalah perintah yang berguna untuk melihat riwayat referensi dan tindakan di repositori kita. Dengan melihat riwayat <i>reflog</i>, kita dapat menemukan commit sebelum <i>rebase</i> dan mengembalikan repositori ke kondisi sebelumnya dengan aman.</p>
<h3>Cara Mengembalikan Commit sebelum Rebase</h3>
<p style="text-align: justify;">
Pada bagian ini, kita akan menjelaskan langkah-langkah untuk mengembalikan <i>commit</i> sebelum <i>rebase</i> menggunakan perintah <b>'git reset --hard'</b>. Kami akan menguraikan langkah-langkahnya secara rinci dan memberikan contoh penggunaannya.
</p>
<h5>Tahap 1</h5>
<p style="text-align: justify;">
Jalankan perintah <b>git reflog</b> untuk melihat <i>log reflog</i> yang berisi riwayat pergerakan <b>HEAD</b> dan referensi lainnya di repositori kalian. <i>Reflog</i> berisi informasi tentang setiap tindakan yang terjadi di repositori, termasuk <i>commit</i>, <i>reset</i>, <i>rebase</i>, dll.
</p>
<div class="baca_juga">
<div class="baca_juga_title">Perintah</div>
<b><pre>git reflog</pre></b>
</div>
<h5>Tahap 2</h5>
<p style="text-align: justify;">
Gunakan perintah <b>git reset --hard <commit_SHA></b> untuk mengembalikan <b>HEAD</b> dan seluruh repositori kalian ke kondisi sebelum <i>rebase</i>. Gantilah <b><commit_SHA></b> dengan SHA dari commit sebelum <i>rebase</i> yang kalian catat pada langkah sebelumnya.</p>
<div class="baca_juga">
<div class="baca_juga_title">Perintah</div>
<b><pre>git reset --hard <commit_SHA></pre></b>
</div>
<p style="text-align: justify;">
Pastikan kalian berada pada <i>branch</i> yang benar sebelum menjalankan perintah ini.</p>
<p style="text-align: justify;">
Setelah kalian menjalankan perintah <b>git reset --hard</b>, kondisi repositori kalian akan kembali ke keadaan sebelum <i>rebase</i>, termasuk perubahan yang di-<i>commit</i> sebelumnya. Pastikan untuk melakukan tindakan ini dengan hati-hati, karena perintah <b>git reset --hard</b> akan menghapus perubahan yang belum di-<i>commit</i> dan tidak dapat diambil kembali.</p>
<p style="text-align: justify;">
Jika kalian tidak yakin dengan tindakan ini, disarankan untuk melakukan backup repositori sebelum mencobanya, sehingga kalian dapat dengan mudah mengembalikan repositori kalian jika ada masalah.</p>cahendihttp://www.blogger.com/profile/08018498600195831981noreply@blogger.com0RM62+V62, Jl. Taman Golf V, RT.001/RW.014, Poris Plawad Indah, Kec. Cipondoh, Kota Tangerang, Banten 15141, Indonesia-6.1878658 106.6505218-34.498099636178843 71.4942718 22.122368036178845 141.8067718tag:blogger.com,1999:blog-200160053429810035.post-76643794462297201302023-07-05T15:32:00.004+07:002023-07-05T15:32:55.592+07:00Belajar Java - Pengenalan AES (Advanced Encryption Standard) dan Implementasinya dalam Java<p style="text-align: justify;">
<b>AES</b> (<i>Advanced Encryption Standard</i>) adalah sebuah algoritma kriptografi yang digunakan untuk melakukan enkripsi dan dekripsi data. Algoritma ini telah diadopsi secara luas dan digunakan dalam berbagai aplikasi keamanan, termasuk pengamanan data pada jaringan komputer, komunikasi online, dan penyimpanan data yang sensitif.
</p>
<div class="separator" style="clear: both;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhiLxOLd4nvdXZs4rKXPfjk6x21GU-quaxuisl-ryDIeW5QuUEZfWPdcvYQWVD8FFOEKLJ58q2FmMQ8_CHZiagH4GAI9Q4bwgAs8d30crxuAg7cbTCz-uJ7i9OSaq99lPRGAJcIDtFaaERD0OmMtuVdClZb_xJSNl-FHec5kD1guyzi4ANWrW-Ln0Ay4SXk/s440/Advanced-Encryption-Standard-min.png" style="display: block; padding: 1em 0px; text-align: center;"><img alt="Belajar Java - Pengenalan AES (Advanced Encryption Standard) dan Implementasinya dalam Java" border="0" data-original-height="247" data-original-width="440" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhiLxOLd4nvdXZs4rKXPfjk6x21GU-quaxuisl-ryDIeW5QuUEZfWPdcvYQWVD8FFOEKLJ58q2FmMQ8_CHZiagH4GAI9Q4bwgAs8d30crxuAg7cbTCz-uJ7i9OSaq99lPRGAJcIDtFaaERD0OmMtuVdClZb_xJSNl-FHec5kD1guyzi4ANWrW-Ln0Ay4SXk/s600/Advanced-Encryption-Standard-min.png" title="Belajar Java - Pengenalan AES (Advanced Encryption Standard) dan Implementasinya dalam Java" width="600" /></a></div>
<h3>Pengertian AES</h3>
<p style="text-align: justify;">
AES adalah sebuah algoritma blok cipher simetris yang menggunakan ukuran blok tetap sebesar 128 bit dan kunci dengan panjang 128, 192, atau 256 bit. Algoritma ini bekerja pada blok-blok data dengan mengganti setiap blok dengan blok yang dihasilkan dari operasi enkripsi atau dekripsi.
</p>
<h3>Proses Enkripsi dan Dekripsi AES</h3>
<p style="text-align: justify;">Proses enkripsi dan dekripsi AES terdiri dari beberapa langkah utama:</p>
<ol>
<li><b>Inisialisasi Key</b></li>
<p style="text-align: justify;">Key enkripsi atau dekripsi AES harus disiapkan terlebih dahulu. Key ini memiliki panjang 128, 192, atau 256 bit tergantung pada kebutuhan keamanan.</p>
<li><b>SubBytes</b></li>
<p style="text-align: justify;">Setiap byte pada blok data diubah menggunakan tabel substitusi yang telah ditentukan.</p>
<li><b>ShiftRows</b></li>
<p style="text-align: justify;">Byte-byte dalam setiap baris blok data digeser ke kiri secara siklik.</p>
<li><b>MixColumns</b></li>
<p style="text-align: justify;">Kolom-kolom pada blok data diubah menggunakan operasi matematika khusus.</p>
<li><b>AddRoundKey</b></li>
<p style="text-align: justify;">Blok data di-XOR dengan kunci putaran yang sesuai.</p>
</ol>
<p style="text-align: justify;">Proses di atas diulangi sejumlah putaran tergantung pada panjang kunci yang digunakan. Setiap putaran melibatkan penggunaan kunci putaran yang berbeda.</p>
<h3>Contoh Penggunaan AES</h3>
<div class="baca_juga">
<div class="baca_juga_title">Contoh</div>
<pre>import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;
public class AESEncryptionUtil {
private static final String AES_ALGORITHM = "AES";
private static final String ENCRYPTION_KEY = "mySecretKey123456";
public static String encrypt(String data) throws Exception {
SecretKeySpec keySpec = new SecretKeySpec(ENCRYPTION_KEY.getBytes(), AES_ALGORITHM);
Cipher cipher = Cipher.getInstance(AES_ALGORITHM);
cipher.init(Cipher.ENCRYPT_MODE, keySpec);
byte[] encryptedBytes = cipher.doFinal(data.getBytes());
return Base64.getUrlEncoder().encodeToString(encryptedBytes);
}
public static String decrypt(String encryptedData) throws Exception {
SecretKeySpec keySpec = new SecretKeySpec(ENCRYPTION_KEY.getBytes(), AES_ALGORITHM);
Cipher cipher = Cipher.getInstance(AES_ALGORITHM);
cipher.init(Cipher.DECRYPT_MODE, keySpec);
byte[] decryptedBytes = cipher.doFinal(Base64.getUrlDecoder().decode(encryptedData));
return new String(decryptedBytes);
}
}
</pre>
</div>
<p style="text-align: justify;">
Pada contoh di atas, saya menggunakan AES dengan panjang kunci 128 bit. <b>Key</b> yang digunakan adalah <b>mySecretKey123456</b>. Dalam contoh ini, metode encrypt digunakan untuk melakukan <i>enkripsi</i> data, sedangkan metode <i>decrypt</i> digunakan untuk melakukan dekripsi data. Data yang dienkripsi akan dikodekan dalam bentuk <b>Base64</b> untuk kemudahan transportasi dan penyimpanan.
</p>
<div class="baca_juga">
<div class="baca_juga_title">AppMain</div>
<pre>public class AppMain {
public static void main(String[] args) {
try {
String data = "Community Java";
String encryptedData = AESEncryptionUtil.encrypt(originalData);
String decryptedData = AESEncryptionUtil.decrypt(encryptedData);
System.out.println("Data : " + data);
System.out.println("Data Yang Sudah Di Encrypt : " + encryptedData);
System.out.println("Data Yang Sudah Di Decrypt : " + decryptedData);
} catch (Exception e) {
e.printStackTrace();
}
}
}
</pre>
</div>
<p style="text-align: justify;">
Dalam contoh ini, kita mengenkripsi teks "Community Java" dan kemudian mendekripsinya kembali. Hasil enkripsi dan dekripsi akan ditampilkan di output.
</p>
<p style="text-align: justify;">
Sekian penjelasan tentang AES dan contoh penggunaannya dalam pemrograman java. AES merupakan salah satu algoritma kriptografi yang kuat dan banyak digunakan dalam keamanan data. Dengan pemahaman yang baik tentang AES, kalian dapat mengamankan data sensitif dengan lebih efektif.
</p>cahendihttp://www.blogger.com/profile/08018498600195831981noreply@blogger.com0Tangerang, Tangerang City, Banten, Indonesia-6.1701796 106.6403236-34.480413436178843 71.4840736 22.140054236178845 141.7965736tag:blogger.com,1999:blog-200160053429810035.post-2687786101372138342023-01-16T20:42:00.004+07:002023-01-16T20:43:31.696+07:00PostgreSQL - Cara Membuat Function Yang Mengembalikan Record di PostgreSQL<p style="text-align: justify;">
Untuk membuat sebuah procedure di PostgreSQL yang mengembalikan record, Anda dapat menggunakan perintah berikut:
</p>
<div class="baca_juga">
<div class="baca_juga_title">Perintah</div>
<pre>CREATE OR REPLACE FUNCTION nama_function(parameter1 type1, parameter2 type2)
RETURNS TABLE (kolom1 type1, kolom2 type2, ...) AS $$
BEGIN
RETURN QUERY
SELECT kolom1, kolom2, ... FROM nama_tabel WHERE kondisi;
END; $$
LANGUAGE plpgsql;
</pre>
</div>
<h5>Bagaimana Cara Membuat Function Yang Mengembalikan Return Record</h5>
<p style="text-align: justify;"><b>Tahap Pertama</b> kalian perlu membuat sebuah database terlebih dahulu, sebagai contoh disini saya akan membuat database dengan nama <b>retail</b>.</p>
<div class="baca_juga">
<div class="baca_juga_title">Membuat DB</div>
<pre>createdb -U postgres retail
</pre>
</div>
<p style="text-align: justify;"><b>Tahap Kedua</b>, membuat sebuah <b>tabel produk</b>.</p>
<div class="baca_juga">
<div class="baca_juga_title">Membuat Tabel</div>
<pre>CREATE TABLE produk
(
id bigserial NOT NULL,
kode_produk character varying(255) NOT NULL,
nama_produk character varying(255) NOT NULL,
CONSTRAINT produk_pkey PRIMARY KEY (id)
)
</pre>
</div>
<p style="text-align: justify;"><b>Tahap Ketiga</b>, melakukan insert data pada tabel produk yang telah kita buat.</p>
<div class="baca_juga">
<div class="baca_juga_title">Insert Data</div>
<pre>INSERT INTO produk(kode_produk, nama_produk) VALUES ('AT-101', 'Mouse Wireless');
INSERT INTO produk(kode_produk, nama_produk) VALUES ('AT-102', 'USB 64Gb');
INSERT INTO produk(kode_produk, nama_produk) VALUES ('AT-103', 'Monitor LED 27 Inch');
INSERT INTO produk(kode_produk, nama_produk) VALUES ('ATX-101', 'Keyboard RGB');
INSERT INTO produk(kode_produk, nama_produk) VALUES ('AB-101', 'Modem 5G');
</pre>
</div>
<div class="baca_juga">
<div class="baca_juga_title">BACA JUGA</div>
<ul>
<li><a href="https://www.community-java.com/2020/12/cara-install-postgres-dan-pgadmin4-di-docker-container.html">Cara Install PostgreSQL dan PgAdmin di Docker</a></li>
<li><a href="https://www.community-java.com/2017/02/contoh-penggunaan-join.html">Contoh Penggunaan Join di PostgreSQL</a></li>
<li><a href="https://www.community-java.com/2021/11/cara-melakukan-backup-dan-restore-database-postgresql.html">Cara Melakukan Backup dan Restore Database PostgreSQL</a></li>
<li><a href="https://www.community-java.com/2022/03/cara-export-postgresql-ke-file-csv.html">Cara Export PostgreSQL ke File CSV Menggunakan Perintah COPY</a></li>
</ul>
</div>
<div class="baca_juga">
<div class="baca_juga_title">Function Produk</div>
<pre>CREATE OR REPLACE FUNCTION get_produk()
RETURNS TABLE (kode varchar(255), nama varchar(255)) AS $$
BEGIN
RETURN QUERY
SELECT kode_produk, nama_produk
FROM produk;
END; $$
LANGUAGE plpgsql;
</pre>
</div>
<p style="text-align: justify;">
Kalian dapat menjalankan function dengan menggunakan perintah:
</p>
<div class="baca_juga">
<div class="baca_juga_title">Call Function</div>
<pre>SELECT * FROM get_produk();
</pre>
</div>
<div class="separator" style="clear: both;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiD79t1lIuAu9SNtkgTxLUSUXymF-mQ75Jl8_H1OZrUrLPYDVtvBx8--3x8JNFYyJF3DlXkMODtGpVWxat69z59WJHJx--d6diIhBsazu7r6XZ9E7SkzgNqx_bijvPblrH9Vu-PI87Thlmfyzof2Et-46X5rfS8-gNc9I35haUMUW4-MiF4M5RxY49RZg/s368/membuat-function-di-postgres.JPG" style="display: block; padding: 1em 0px; text-align: center;"><img alt="PostgreSQL - Cara Membuat Function Yang Mengembalikan Record di PostgreSQL" border="0" data-original-height="215" data-original-width="368" height="234" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiD79t1lIuAu9SNtkgTxLUSUXymF-mQ75Jl8_H1OZrUrLPYDVtvBx8--3x8JNFYyJF3DlXkMODtGpVWxat69z59WJHJx--d6diIhBsazu7r6XZ9E7SkzgNqx_bijvPblrH9Vu-PI87Thlmfyzof2Et-46X5rfS8-gNc9I35haUMUW4-MiF4M5RxY49RZg/w400-h234/membuat-function-di-postgres.JPG" title="PostgreSQL - Cara Membuat Function Yang Mengembalikan Record di PostgreSQL" width="400" /></a></div>
<p style="text-align: justify;">
Dalam contoh di atas, <b>function get_produk</b> tidak memiliki parameter masukan dan mengembalikan record dari <b>tabel produk</b> dengan kolom <b>kode</b> dan <b>nama</b>. Kalian dapat menyesuaikan query <b>SELECT</b> sesuai dengan kebutuhan kalian dan juga menambahkan kondisi <b>WHERE</b> sesuai dengan kebutuhan kalian.</p>cahendihttp://www.blogger.com/profile/08018498600195831981noreply@blogger.com0Tangerang, Tangerang City, Banten, Indonesia-6.1701796 106.6403236-34.480413436178843 71.4840736 22.140054236178845 141.7965736tag:blogger.com,1999:blog-200160053429810035.post-71541269850981519122023-01-16T09:07:00.002+07:002023-01-16T09:07:16.310+07:00Sistem Tersebar Pada Teknologi Informatika<p style="text-align: justify;">Sistem tersebar adalah sistem yang terdiri dari beberapa komponen yang berjalan pada mesin yang berbeda dan saling terhubung melalui jaringan. Dalam teknologi informatika, sistem tersebar digunakan untuk meningkatkan kinerja, skalabilitas, dan keamanan dari aplikasi dan sistem.</p>
<p style="text-align: justify;">Sistem tersebar dibedakan menjadi dua jenis, yaitu sistem tersebar terpusat dan sistem tersebar tidak terpusat. Sistem tersebar terpusat memiliki sebuah server sentral yang mengontrol seluruh komponen sistem, sementara sistem tersebar tidak terpusat tidak memiliki server sentral dan setiap komponen dapat berperan sebagai server maupun klien.</p>
<p style="text-align: justify;">Salah satu contoh aplikasi sistem tersebar dalam teknologi informatika adalah sistem cloud computing. Cloud computing merupakan sistem tersebar yang memungkinkan penyimpanan data dan aplikasi di internet, yang dapat diakses oleh pengguna dari berbagai lokasi dan perangkat. Ini memungkinkan pengguna untuk mengakses data dan aplikasi tanpa harus menyimpan data pada perangkat mereka sendiri, sehingga meningkatkan skalabilitas dan fleksibilitas sistem.</p>
<p style="text-align: justify;">Sistem tersebar juga digunakan dalam sistem jaringan, seperti sistem jaringan komputer dan jaringan komunikasi. Dalam sistem jaringan komputer, sistem tersebar digunakan untuk meningkatkan kinerja dan skalabilitas sistem dengan mengatur akses ke data dan aplikasi melalui jaringan. Dalam jaringan komunikasi, sistem tersebar digunakan untuk mengatur komunikasi antar perangkat melalui jaringan, seperti dalam sistem telepon genggam dan jaringan internet.</p>
<p style="text-align: justify;">Sistem tersebar juga digunakan dalam sistem manajemen basis data, seperti sistem basis data distribusi. Sistem basis data distribusi memungkinkan data dibagi di beberapa server yang terpisah dan saling terhubung melalui jaringan. Ini meningkatkan skalabilitas dan keamanan sistem dengan mengurangi risiko kegagalan sistem dan membuat data lebih mudah diakses.</p>
<p style="text-align: justify;">Sistem tersebar digunakan dalam berbagai bidang teknologi, termasuk:</p>
<ul>
<li>Cloud computing</li>
<p style="text-align: justify;">Layanan cloud computing menyediakan akses ke sumber daya komputasi, seperti penyimpanan data dan aplikasi, melalui internet. Ini mengandalkan sistem tersebar untuk menyediakan akses ke sumber daya ini dari berbagai lokasi geografis.</p>
<li>Internet of Things (IoT)</li>
<p style="text-align: justify;">IoT adalah jaringan dari perangkat yang terhubung ke internet dan dapat berkomunikasi satu sama lain. Sistem tersebar digunakan dalam IoT untuk mengumpulkan dan mengirim data dari perangkat yang tersebar di seluruh dunia.</p>
<li>Big Data</li>
<p style="text-align: justify;">Analisis big data mengandalkan sistem tersebar untuk mengumpulkan dan menganalisis data dari berbagai sumber. Sistem tersebar digunakan untuk menangani volume, kecepatan, dan variasi data yang besar.</p>
<li>Keamanan</li>
<p style="text-align: justify;">Sistem tersebar digunakan dalam teknologi keamanan untuk menyebarluaskan data dan aplikasi keamanan di seluruh jaringan. Ini memungkinkan sistem untuk mengenali dan menangani ancaman dari berbagai lokasi sekaligus.</p>
<li>Sistem Pemesanan</li>
<p style="text-align: justify;">Sistem tersebar digunakan dalam sistem pemesanan untuk menyebarluaskan data pemesanan dan inventarisasi di seluruh jaringan. Ini memungkinkan sistem untuk memantau data pemesanan dan inventarisasi dari berbagai lokasi sekaligus.</p>
<ul>
<p style="text-align: justify;">Sistem tersebar sangat penting dalam teknologi saat ini karena memberikan fleksibilitas dan skalabilitas yang dibutuhkan untuk menangani jumlah data yang besar, kompleksitas jaringan, dan ancaman keamanan yang semakin meningkat. Namun, sistem tersebar juga memiliki beberapa tantangan, seperti masalah keselamatan dan pengelolaan data yang kompleks.</p></ul></ul>cahendihttp://www.blogger.com/profile/08018498600195831981noreply@blogger.com0Tangerang, Tangerang City, Banten, Indonesia-6.1701796 106.6403236-34.480413436178843 71.4840736 22.140054236178845 141.7965736tag:blogger.com,1999:blog-200160053429810035.post-89919324497733727992022-04-05T21:37:00.004+07:002022-04-08T04:36:40.541+07:00Belajar Java - Contoh Penerapan Array Multidemensi<p style="text-align: justify;">
Pada artikel saya sebelumnya, saya sempat membahas mengenai penerapan <b>ArrayList</b>. Saya teringat waktu <b>SMA</b> belajar mengenai perkalian matrik dan ketika saya kuliah di semester 2(dua) untuk matakuliah <b>algoritma dan pemrograman 2</b> belajar mengenai <b>Array Multi Dimensi</b>. Dimana pada saat <b>UAS</b> atau Ujian Akhir Semester soalnya berupa perkalian matrik menggunakan <b>Array Multi Dimensi</b>.
</p>
<p style="text-align: justify;">
<b>Array Multi Dimensi</b> atau <b>Array 2 Dimensi</b> merupakan Array yang memiliki 2 buah indeks array yang berupa <b>baris</b> dan <b>kolom</b>. Berikut ini beberapa contoh kode program Array Multi Dimensi pada pemrograman Java.
</p>
<div class="baca_juga">
<div class="baca_juga_title">Sintaks</div>
<pre>
tipe_data[][] nama_array;
</pre>
</div>
<div class="baca_juga">
<div class="baca_juga_title">Contoh</div>
<pre>
public class ContohArrayMultiDimensi {
public static void main(String[] args) {
String[][] dataMahasiswa = {
{"41101328", "Cahendi", "Teknik Informatika"},
{"32101245", "Aban", "Sistem Informasi"}
};
// Akan mengambil data baris ke-1 dan kolom ke-1
System.out.println("NIM \t: "+dataMahasiswa[0][0]);
// Akan mengambil data baris ke-1 dan kolom ke-2
System.out.println("Nama \t: "+dataMahasiswa[0][1]);
}
}
</pre>
</div>
<div class="baca_juga">
<div class="baca_juga_title">Output</div>
<pre>
NIM : 41101328
Nama : Cahendi
</pre>
</div>
<div class="baca_juga">
<div class="baca_juga_title">BACA JUGA</div>
<ul>
<li><a href="https://www.community-java.com/2017/04/belajar-arraylist-dan-penerapannya-di.html">Belajar Java - ArrayList dan Penerapannya di Pemrograman Java</a></li>
<li><a href="http://www.community-java.com/2017/02/contoh-program-perulangan-dalam-java.html">Belajar Java - Contoh Perulangan Dalam Pemrograman Java</a></li>
<li><a href="https://www.community-java.com/2021/11/cara-membuat-laporan-pdf-dan-excel-di-java.html">Cara Membuat Laporan PDF dan Excel di Java</a></li>
<li><a href="https://www.community-java.com/2019/02/cara-membuat-report-di-java-dengan-jasperreport.html">Cara Membuat Report di Java dengan JasperReport</a></li>
</ul>
</div>
<h3>Contoh Program Perkalian Matrik di Pemrograman Java</h3>
<p style="text-align: justify;">
Untuk contoh perkalian matrik kali ini saya menggunakan matrik ordo <b>3 x 3</b>. Perhatikan gambar dibawah ini, saya akan melakukan perkalian 2(dua) buah matrik yaitu <b>Matrik A</b> dan <b>Matrik B</b>. <b>Matrik C</b> merupakan hasil dari perkalian Matrik A dengan Matrik B.
</p>
<div class="separator" style="clear: both;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6U-5Ifs6n3WGVeDx6Lkns17pTqOZ3qXKPcqCQ6ne_7kS92afFfP8U7waKDLwt0026vqoZtnMjaff14ofGAf8KOWDpd-3DQ2tFY1W2lqAEIAjdz95DC9bdQA7g7PENWjq1skEuwL8FNY9i4hc-tlGwqJl9wW7klywPnJC_d1wRCK8TuofDI7nhp-804g/s971/Contoh%20Perkalian%20Matrik-min.png" style="display: block; padding: 1em 0; text-align: center; "><img alt="Belajar Java - Contoh Penerapan Array Multidemensi" border="0" width="600" data-original-height="595" data-original-width="971" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6U-5Ifs6n3WGVeDx6Lkns17pTqOZ3qXKPcqCQ6ne_7kS92afFfP8U7waKDLwt0026vqoZtnMjaff14ofGAf8KOWDpd-3DQ2tFY1W2lqAEIAjdz95DC9bdQA7g7PENWjq1skEuwL8FNY9i4hc-tlGwqJl9wW7klywPnJC_d1wRCK8TuofDI7nhp-804g/s600/Contoh%20Perkalian%20Matrik-min.png"/></a></div>
<div class="baca_juga">
<div class="baca_juga_title">CODE</div>
<pre>
public class ContohPerkalianMatrik {
public static void main(String[] args) {
int[][] matrikA = {
{1, 4, 7},
{2, 5, 8},
{3, 6, 9}
};
int[][] matrikB = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
int hasil = 0;
for (int k = 0; k < 3; k++) {
hasil += matrikA[i][k] * matrikB[k][j];
}
System.out.print(hasil+"\t");
hasil = 0;
}
System.out.println("");
}
}
}
</pre>
</div>
<p style="text-align: justify;">
Sekian tutorial tentang penerapan Array Multi Dimensi pada Pemrograman Java, semoga bermanfaat.
</p>
<div style="text-align: center;">
<a class="copyrighted-badge" title="Copyrighted.com Registered & Protected" target="_blank" href="https://www.copyrighted.com/website/gqoVdNGH0GWLeNeg">
<img alt="Copyrighted.com Registered & Protected" border="0" width="125" height="25" srcset="https://static.copyrighted.com/badges/125x25/04_2_2x.png 2x" src="https://static.copyrighted.com/badges/125x25/04_2.png" /></a>
</div>
<script src="https://static.copyrighted.com/badges/helper.js"></script>cahendihttp://www.blogger.com/profile/08018498600195831981noreply@blogger.com0Tangerang, Tangerang City, Banten, Indonesia-6.1701796 106.6403236-34.480413436178843 71.4840736 22.140054236178845 141.7965736tag:blogger.com,1999:blog-200160053429810035.post-82229164356481347092022-04-04T14:32:00.103+07:002022-11-09T15:36:20.386+07:00Belajar Kotlin - Perulangan di Pemrogram Kotlin<p style="text-align: justify;">
Pada tutorial kotlin kali ini saya akan membahas mengenai perulangan di pemrograman kotlin, perulangan merupakan suatu proses yang berulang-ulang sampai batas yang ditentukan atau selama kondisi tersebut masih terpenuhi. Seperti pada bahasa pemrograman java, pada pemrograman kotlin juga ada 3 jenis perulangan yaitu : dengan menggunakan <b>for</b>, <b>while</b> dan <b>do while</b>.
</p>
<h3>Contoh Perulangan For</h3>
<p style="text-align: justify;">
Perulangan for merupakan perulangan yang paling sederhana.
</p>
<div class="baca_juga">
<div class="baca_juga_title">Sintaks</div>
<pre>
for (item in ekspresi) {
// kode dalam perulangan
}
</pre>
</div>
<p style="text-align: justify;">
Untuk <b>contoh perulangan For</b> pada <b>contoh 1</b> akan melakukan perulangan sebanyak 10x yang akan menampilkan angka 1 sampai dengan 10.
</p>
<div class="baca_juga">
<div class="baca_juga_title">Contoh 1</div>
<pre>
fun main() {
for (i in 1..10) {
println(i)
}
}
</pre>
</div>
<p style="text-align: justify;">
Pada contoh 4 perulangan while, program akan menampilkan bilangan ganjil yang ada diantara angka 1 sampai dengan angka 10.
</p>
<div class="baca_juga">
<div class="baca_juga_title">Contoh 2</div>
<pre>
fun main() {
for (i in 1..10) {
if(i % 2 != 0){
println(i)
}
}
}
</pre>
</div>
<div class="baca_juga">
<div class="baca_juga_title">BACA JUGA</div>
<ul>
<li><a href="https://www.community-java.com/2022/03/belajar-kotlin-pengenalan-kotlin.html">Belajar Kotlin - Pengenalan Kotlin</a></li>
<li><a href="https://www.community-java.com/2022/03/belajar-kotlin-tipe-data-dan-varibel.html">Belajar Kotlin - Tipe Data dan Variabel pada Pemrograman Kotlin</a></li>
<li><a href="https://www.community-java.com/2022/04/belajar-kotlin-penggunaan-operator.html">Belajar Kotlin - Contoh Penggunaan Operator</a></li>
<li><a href=">https://www.community-java.com/2022/04/belajar-kotlin-penulisan-komentar-di.html">Belajar Kotlin - Pengenalan Kotlin</a></li>
</ul>
</div>
<h3>Contoh Perulangan While</h3>
<p style="text-align: justify;">
Perulangan while dapat digunakan untuk mengulangi suatu proses berdasarkan suatu kondisi.
</p>
<div class="baca_juga">
<div class="baca_juga_title">Sintaks</div>
<pre>
while (kondisi) {
kode dalam perulangan
}
</pre>
</div>
<p style="text-align: justify;">
Pada contoh 3 perulangan while, program akan melakukan perulangan selama <b>i</b> kurang dari sama dengan <b>10</b>.
</p>
<div class="baca_juga">
<div class="baca_juga_title">Contoh 3</div>
<pre>
fun main() {
var i = 1
while (i <= 10) {
println(i)
i++
}
}
</pre>
</div>
<p style="text-align: justify;">
Pada contoh 4 perulangan while, program akan menampilkan bilangan genap yang ada diantara angka 1 sampai dengan angka 10.
</p>
<div class="baca_juga">
<div class="baca_juga_title">Contoh 4</div>
<pre>
fun main() {
var i = 1
while (i <= 10) {
if(i % 2 == 0){
println(i)
}
i++
}
}
</pre>
</div>
<h3>Contoh Perulangan Do While</h3>
<p style="text-align: justify;">
Seperti halnya perulangan While, perulangan Do While juga digunakan untuk mengulangi suatu proses berdasarkan suatu kondisi.
</p>
<div class="baca_juga">
<div class="baca_juga_title">Sintaks</div>
<pre>
do {
kode dalam perulangan
} while (kondisi)
</pre>
</div>
<p style="text-align: justify;">
Pada contoh 5 perulangan while, program akan melakukan perulangan selama <b>i</b> kurang dari sama dengan <b>10</b>.
</p>
<div class="baca_juga">
<div class="baca_juga_title">Contoh 5</div>
<pre>
fun main() {
var i = 1
do {
println(i)
i++
} while (i <= 10)
}
</pre>
</div>
<p style="text-align: justify;">
Pada contoh 6 perulangan while, program akan menampilkan bilangan ganjil yang ada diantara angka 1 sampai dengan angka 10.
</p>
<div class="baca_juga">
<div class="baca_juga_title">Contoh 6</div>
<pre>
fun main() {
var i = 1
do {
if(i % 2 != 0){
println(i)
}
i++
} while (i <= 10)
}
</pre>
</div>
<p style="text-align: justify;">
Sekian tutorial tentang perulangan For, While dan Do While di pemrograman Kotlin, semoga bermanfaat.
</p>
<div style="text-align: center;">
<a class="copyrighted-badge" title="Copyrighted.com Registered & Protected" target="_blank" href="https://www.copyrighted.com/website/gqoVdNGH0GWLeNeg">
<img alt="Copyrighted.com Registered & Protected" border="0" width="125" height="25" srcset="https://static.copyrighted.com/badges/125x25/04_2_2x.png 2x" src="https://static.copyrighted.com/badges/125x25/04_2.png" /></a>
</div>
<script src="https://static.copyrighted.com/badges/helper.js"></script>cahendihttp://www.blogger.com/profile/08018498600195831981noreply@blogger.com0Tangerang, Tangerang City, Banten, Indonesia-6.1701796 106.6403236-34.480413436178843 71.4840736 22.140054236178845 141.7965736tag:blogger.com,1999:blog-200160053429810035.post-24415211207608437722022-04-03T21:13:00.161+07:002022-04-08T04:36:55.540+07:00Belajar Kotlin - Percabangan IF ELSE di Pemrograman Kotlin<p style="text-align: justify;">
Pada tutorial kotlin kali ini saya akan membahas mengenai percabangan <b>IF</b> dan <b>IF ELSE</b> di pemrograman kotlin, IF ELSE digunakan untuk melakukan pengecekan suatu kondisi. Dan jika kondisi tersebut terpenuhi atau bernilai <b>TRUE</b> maka statement yang berada di blok IF tersebut akan dieksekusi.
</p>
<p style="text-align: justify;">
Di bahasa pemrograman kotlin terdapat 2(dua) buah percabangan, yaitu <b>IF</b> dan <b>WHEN</b>. Untuk percabangan <b>WHEN</b> akan saya bahas diartikel saya berikutnya.
</p>
<h3>Contoh Percabangan IF</h3>
<p style="text-align: justify;">
Untuk contoh percabangan IF pada contoh 1, hanya terdapat 1(satu) kondisi, yaitu jika totalBelanja-nya lebih dari 50.000 (<i>Lima Puluh Ribu Rupiah</i>) maka akan mendapatkan potongan sebesar 5.000 (<b>Lima Ribu Rupiah</b>).
</p>
<div class="baca_juga">
<div class="baca_juga_title">Sintaks</div>
<pre>
if(kondisi){
// Blok ini akan dieksekusi jika kondisi diatas bernilai TRUE
}
</pre>
</div>
<div class="baca_juga">
<div class="baca_juga_title">Contoh 1</div>
<pre>
fun main() {
var totalBelanja = 60_000
if(totalBelanja > 50_000){
println("Selamat Anda Mendapatkan Diskon Rp. 5.000,-")
}
println("Terima Kasih")
}
</pre>
</div>
<div class="baca_juga">
<div class="baca_juga_title">BACA JUGA</div>
<ul>
<li><a href="https://www.community-java.com/2022/03/belajar-kotlin-pengenalan-kotlin.html">Belajar Kotlin - Pengenalan Kotlin</a></li>
<li><a href="https://www.community-java.com/2022/03/belajar-kotlin-tipe-data-dan-varibel.html">Belajar Kotlin - Tipe Data dan Variabel pada Pemrograman Kotlin</a></li>
<li><a href="https://www.community-java.com/2022/04/belajar-kotlin-penggunaan-operator.html">Belajar Kotlin - Contoh Penggunaan Operator</a></li>
<li><a href=">https://www.community-java.com/2022/04/belajar-kotlin-penulisan-komentar-di.html">Belajar Kotlin - Pengenalan Kotlin</a></li>
</ul>
</div>
<h3>Contoh Percabangan IF ELSE</h3>
<p style="text-align: justify;">
Percabangan IF ELSE digunakan apabila terdapat 2(dua) buah kondisi.
</p>
<div class="baca_juga">
<div class="baca_juga_title">Sintaks</div>
<pre>
if(kondisi){
// Blok ini akan dieksekusi jika kondisi diatas bernilai TRUE
} else {
// Blok ini akan dieksekusi jika kondisi diatas bernilai FALSE
}
</pre>
</div>
<div class="baca_juga">
<div class="baca_juga_title">Contoh 2</div>
<pre>
fun main() {
var nilaiTest = 90
if(nilaiTest > 70){
println("Selamat Anda Lulus")
} else {
println("Maaf, Anda Gagal")
}
}
</pre>
</div>
<h3>Contoh Percabangan IF ELSE Bersarang</h3>
<p style="text-align: justify;">
Percabangan IF ELSE digunakan apabila terdapat lebih dari 2(dua) buah kondisi. Perhatikan 2(dua) buah contoh dibawah ini :
</p>
<div class="baca_juga">
<div class="baca_juga_title">Contoh 3</div>
<pre>
fun main() {
var bilangan = 0
if(bilangan > 0) {
println("Bilangan Positif")
} else if(bilangan < 0) {
println("Bilangan Negatif")
} else {
println("Bilangan 0")
}
}
</pre>
</div>
<h5>Penjelasan</h5>
<p style="text-align: justify;">
Contoh program diatas merupakan contoh kode program kotlin untuk melakukan pengecekan, apakah bilangan tersebut merupakan bilangan positif, bilangan negatif atau bilangan 0.
</p>
<div class="baca_juga">
<div class="baca_juga_title">Contoh 4</div>
<pre>
fun main() {
var nilaiTest = 66
if(nilaiTest > 85) {
println("Nilai Anda : A")
} else if(nilaiTest > 75) {
println("Nilai Anda : B")
} else if(nilaiTest > 60) {
println("Nilai Anda : C")
} else if(nilaiTest > 50) {
println("Nilai Anda : D")
} else {
println("Nilai Anda : E")
}
}
</pre>
</div>
<h5>Penjelasan</h5>
<p style="text-align: justify;">
Contoh program diatas merupakan contoh kode program kotlin untuk melakukan pengecekan, apakah nilai test mendapatkan grade A, B, C, D atau E.
</p>
<p style="text-align: justify;">
Sekian tutorial tentang percabangan IF dan IF ELSE di pemrograman Kotlin, semoga bermanfaat.
</p>
<div style="text-align: center;">
<a class="copyrighted-badge" title="Copyrighted.com Registered & Protected" target="_blank" href="https://www.copyrighted.com/website/gqoVdNGH0GWLeNeg">
<img alt="Copyrighted.com Registered & Protected" border="0" width="125" height="25" srcset="https://static.copyrighted.com/badges/125x25/04_2_2x.png 2x" src="https://static.copyrighted.com/badges/125x25/04_2.png" /></a>
</div>
<script src="https://static.copyrighted.com/badges/helper.js"></script>cahendihttp://www.blogger.com/profile/08018498600195831981noreply@blogger.com0Tangerang, Tangerang City, Banten, Indonesia-6.1701796 106.6403236-34.480413436178843 71.4840736 22.140054236178845 141.7965736tag:blogger.com,1999:blog-200160053429810035.post-45150188222442338612022-04-02T18:36:00.005+07:002022-04-08T04:37:18.287+07:00Belajar Java Swing - Cara Membuat Rest API Client Menggunakan Retrofit<p style="text-align: justify;">
Pada tutorial saya sebelumnya, saya telah membuat <b>Rest API Server</b> menggunakan <b>Spring Boot</b>. Untuk tutorial-nya bisa kalian lihat <a href="https://www.community-java.com/2022/03/belajar-cara-membuat-crud-rest-api-spring-boot.html" target="_blank">disini</a>, pada tutorial tersebut untuk melakukan <i>testing</i>-nya saya masih menggunakan <i>software</i> <b>Postman</b>. Sedangkan pada tutorial sekarang saya akan memberikan contoh bagaimana cara membuat <b>Rest API Client</b> menggunakan <b>Retrofit</b>. Retrofit merupakan library Rest Client yang sering digunakan dalam mengembangkan aplikasi Android dan Java dari <a href="https://square.github.io/retrofit/" target="_blank">squareup</a>.
</p>
<h2>Persiapan Membuat Rest API Client</h2>
<p style="text-align: justify;">
<b>Rest API Server</b> : Silahkan kalian ikuti tutorial cara membuat Rest API Server menggunakan Spring Boot agar mempermudah kalian dalam mengikuti tutorial saat ini.
</p>
<h3>Membuat Sebuah Project</h3>
<p style="text-align: justify;">
Setelah kalian membuat Rest API Server, tahapan berikutnya adalah membuat sebuah <b>Project Maven</b>. Untuk editor yang saya gunakan saat membuat tutorial ini, saya menggunakan <b>Netbeans 12.5</b> dengan menggunakan <b>GrallVM Java 11</b> (bisa diganti dengan menggunakan <b>JDK 11</b> atau <b>OpenJDK 11</b>).
</p>
<div class="baca_juga">
<div class="baca_juga_title">BACA JUGA</div>
<ul>
<li><a href="https://www.community-java.com/2021/11/belajar-java-swing-cara-membuat-jframe-menggunakan-java-maven.html">Cara Membuat JFrame menggunakan Java Maven</a></li>
<li><a href="https://www.community-java.com/2022/03/belajar-cara-membuat-crud-rest-api-spring-boot.html">Belajar Cara Membuat CRUD Rest API Spring Boot</a></li>
<li><a href="https://www.community-java.com/2021/11/cara-membuat-laporan-pdf-dan-excel-di-java.html">Cara Membuat Laporan PDF dan Excel di Java</a></li>
<li><a href="https://www.community-java.com/2019/02/cara-membuat-report-di-java-dengan-jasperreport.html">Cara Membuat Report di Java dengan JasperReport</a></li>
</ul>
</div>
<h3>Menambahkan Dependencies</h3>
<p style="text-align: justify;">
Tambahkan 4(Empat) buah dependency <b>retrofit</b>, <b>converter-gson</b>, <b>gson</b> dan <b>projectlombok</b> ke file <b>pom.xml</b>
</p>
<div class="baca_juga">
<div class="baca_juga_title">pom.xml</div>
<pre>
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.community</groupId>
<artifactId>BelajarRetrofit</artifactId>
<version>1.0.0</version>
<packaging>jar</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>com.squareup.retrofit2</groupId>
<artifactId>retrofit</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>com.squareup.retrofit2</groupId>
<artifactId>converter-gson</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.22</version>
</dependency>
</dependencies>
</project>
</pre>
</div>
<h3>Membuat Class Produk</h3>
<div class="baca_juga">
<div class="baca_juga_title">CODE</div>
<pre>
package com.community.request;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@ToString
public class Produk {
private long id;
private String kodeProduk;
private String namaProduk;
}
</pre>
</div>
<h3>Membuat Class ResponseData</h3>
<p style="text-align: justify;">
ResponseData merupakan Generic Class Generic yang akan kita gunakan untuk mengambil response API.
</p>
<div class="baca_juga">
<div class="baca_juga_title">CODE</div>
<pre>
package com.community.request;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class ResponseData<T> {
private int status;
private String pesan;
private T data;
}
</pre>
</div>
<h3>Membuat Interface ProdukRestClient</h3>
<p style="text-align: justify;">
<b>Interface ProdukRestClient</b> Untuk mendefinikasi Rest Client apa saja yang akan panggil, untuk kali ini kita akan membuat contoh <b>CRUD</b> (<i>Create</i>, <i>Read</i>, <i>Update</i>, <i>Delete</i>).
</p>
<div class="baca_juga">
<div class="baca_juga_title">CODE</div>
<pre>
package com.community.api;
import com.community.request.Produk;
import com.community.request.ResponseData;
import java.util.List;
import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.DELETE;
import retrofit2.http.GET;
import retrofit2.http.POST;
import retrofit2.http.PUT;
import retrofit2.http.Path;
public interface ProdukRestClient {
@GET("master-produk/list")
public Call<ResponseData<List<Produk>>> getListProduk();
@GET("master-produk/{id}")
public Call<ResponseData<Produk>> getProdukByID(@Path("id") long id);
@POST("master-produk/create")
public Call<ResponseData<Produk>> createProduk(@Body Produk produk);
@PUT("master-produk/update/{id}")
public Call<ResponseData<Produk>> updateProduk(@Path("id") long id, @Body Produk produk);
@DELETE("master-produk/delete/{id}")
public Call<ResponseData<Produk>> deleteProduk(@Path("id") long id);
}
</pre>
</div>
<h3>Membuat Class ApiService</h3>
<div class="baca_juga">
<div class="baca_juga_title">CODE</div>
<pre>
package com.community.api;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
public class ApiService {
private static final String BASE_URL = "http://localhost/belajar-spring/";
private static Retrofit retrofit;
public static ProdukRestClient endPoint(){
Gson gson = new GsonBuilder()
.setLenient()
.create();
retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create(gson))
.build();
return retrofit.create(ProdukRestClient.class);
}
}
</pre>
</div>
<div class="baca_juga">
<div class="baca_juga_title">Catatan</div>
<p style="text-align: justify;">
Pada contoh tutorial cara membuat Rest API Server menggunakan Spring Boot, saya menggunakan <b>port:80</b> dan <b>context-path=/belajar-spring</b>. Silahkan sesuaikan dengan <b>port</b> dan <b>context-path</b> yang kalian gunakan. Jika kalian menggunakan <b>port</b> dan <b>context-path</b> yang sama, kalian dapat mengabaikan ini.</p>
</div>
<div class="baca_juga">
<div class="baca_juga_title">BACA JUGA</div>
<ul>
<li><a href="https://www.community-java.com/2018/06/cara-membuat-form-login-modern-java-swing.html">Cara Membuat Form Login Modern Java Swing</a></li>
<li><a href="https://www.community-java.com/2017/07/belajar-java-cara-membuat-jtree-di-java.html">Belajar Java - Cara Membuat JTree di Java Swing</a></li>
<li><a href="https://www.community-java.com/2017/04/contoh-penggunaan-arraylist-pada-jtable.html">Contoh Penggunaan ArrayList pada JTable</a></li>
<li><a href="https://www.community-java.com/2017/03/cara-membuat-jinternalframe-di-java-swing.html">Cara Membuat JInternalFrame di Java Swing</a></li>
</ul>
</div>
<h3>Membuat Class ProdukModel</h3>
<p style="text-align: justify;">
<b>Class ProdukModel</b> digunakan untuk pengganti <b>DefaultTableModel</b> yang biasanya saya gunakan dalam membuat <b>JTable</b>.
</p>
<div class="baca_juga">
<div class="baca_juga_title">CODE</div>
<pre>
package com.community.view.model;
import com.community.api.ApiService;
import com.community.request.Produk;
import com.community.request.ResponseData;
import java.util.List;
import javax.swing.JOptionPane;
import static javax.swing.JOptionPane.ERROR;
import javax.swing.table.AbstractTableModel;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
public class ProdukModel extends AbstractTableModel {
private List<Produk> listProduk;
private final String header[] = new String[]{
"Kode Produk", "Nama Produk"
};
public ProdukModel() {
getListProduk();
}
private void getListProduk() {
Call<ResponseData<List<Produk>>> call = ApiService.endPoint().getListProduk();
call.enqueue(new Callback<ResponseData<List<Produk>>>() {
@Override
public void onResponse(Call<ResponseData<List<Produk>>> call, Response<ResponseData<List<Produk>>> response) {
if (response.isSuccessful()) {
listProduk = response.body().getData();
}
}
@Override
public void onFailure(Call<ResponseData<List<Produk>>> call, Throwable thrwbl) {
JOptionPane.showMessageDialog(null, "Gagal Mengambil Data Produk", "Error", ERROR);
}
});
}
public Produk getDataProduk(int row) {
return listProduk.get(row);
}
public void addRow(Produk produk) {
listProduk.add(produk);
}
public void removeRow(Produk produk) {
listProduk.remove(produk);
}
public void reloadData() {
if (!listProduk.isEmpty()) {
listProduk.clear();
}
}
@Override
public int getRowCount() {
if (!listProduk.isEmpty()) {
return listProduk.size();
} else {
return 0;
}
}
@Override
public int getColumnCount() {
return header.length;
}
@Override
public String getColumnName(int column) {
return header[column];
}
@Override
public Object getValueAt(int row, int column) {
switch (column) {
case 0:
return listProduk.get(row).getKodeProduk();
case 1:
return listProduk.get(row).getNamaProduk();
default:
return null;
}
}
@Override
public Class<?> getColumnClass(int columnIndex) {
switch (columnIndex) {
case 0:
return String.class;
case 1:
return String.class;
default:
return null;
}
}
}
</pre>
</div>
<div class="baca_juga">
<div class="baca_juga_title">Catatan</div>
<p style="text-align: justify;">
Method <b>private void getListProduk()</b> berfungsi untuk memanggil data produk dengan menggunakan <b>call.enqueue(...)</b> atau disebut juga sebagai <b>asynchronous</b>. Jika berhasil terhubung dengan Rest API Server akan masuk ke method <b>public void onResponse</b> dan jika sukses akan melakukan eksekusi baris <b>listProduk = response.body().getData();</b>
</p>
</div>
<h3>Membuat Class ViewProduk</h3>
<p style="text-align: justify;">
Digunakan untuk membuat tampilan yang akan menampung data <b>Produk</b> kedalam <b>JTable</b>.
</p>
<div class="separator" style="clear: both;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9o4APmLA7HfOKbSm-TjyRTEkk7lBWfZ9wOQGxh48m999M5GX_M2cUVK-epG9frRdcIi2TSq0WbN3y1KvojJokPhtcX_UeAFdtcftSDbpO6S3BR-f2s_8McogEx6FERF_XpjEbEEF3w_uoyC6pzsi0v2iV5RrwLOnukf8F2k7R-GLIhOHB6iYrzh3tOg/s686/rest-client-retrofit-min.png" style="display: block; padding: 1em 0; text-align: center; "><img alt="Cara Membuat Rest API Client Menggunakan Retrofit" border="0" width="600" data-original-height="496" data-original-width="686" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9o4APmLA7HfOKbSm-TjyRTEkk7lBWfZ9wOQGxh48m999M5GX_M2cUVK-epG9frRdcIi2TSq0WbN3y1KvojJokPhtcX_UeAFdtcftSDbpO6S3BR-f2s_8McogEx6FERF_XpjEbEEF3w_uoyC6pzsi0v2iV5RrwLOnukf8F2k7R-GLIhOHB6iYrzh3tOg/s600/rest-client-retrofit-min.png"/></a></div>
<div class="baca_juga">
<div class="baca_juga_title">CODE</div>
<pre>
package com.community.view;
import com.community.controller.ViewProdukController;
import com.community.view.model.ProdukModel;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
public class ViewProduk extends JFrame implements ActionListener {
private final ViewProdukController controller;
private JTable tabel;
private ProdukModel model;
private JButton tambah, edit, hapus, batal;
public ViewProduk() {
controller = new ViewProdukController(this);
initGUI();
}
private void initGUI() {
setTitle("Rest Client Retrofit");
setDefaultCloseOperation(EXIT_ON_CLOSE);
setResizable(false);
setSize(700, 500);
setLocationRelativeTo(null);
JPanel panelBtn = new JPanel(new FlowLayout(FlowLayout.LEFT, 10, 10));
tambah = new JButton("Tambah");
tambah.setPreferredSize(new Dimension(120, 30));
tambah.addActionListener(this);
panelBtn.add(tambah);
edit = new JButton("Edit");
edit.setPreferredSize(new Dimension(120, 30));
edit.addActionListener(this);
panelBtn.add(edit);
hapus = new JButton("Hapus");
hapus.setPreferredSize(new Dimension(120, 30));
hapus.addActionListener(this);
panelBtn.add(hapus);
batal = new JButton("Batal");
batal.setPreferredSize(new Dimension(120, 30));
batal.addActionListener(this);
panelBtn.add(batal);
getContentPane().add(panelBtn, BorderLayout.NORTH);
model = new ProdukModel();
tabel = new JTable(model);
getContentPane().add(new JScrollPane(tabel));
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == tambah) {
controller.tambahData();
} else if (e.getSource() == edit) {
int row = tabel.getSelectedRow();
controller.updateData(row);
} else if (e.getSource() == hapus) {
int row = tabel.getSelectedRow();
controller.deleteData(row);
}
}
public ProdukModel getModel() {
return model;
}
}
</pre>
</div>
<h3>Membuat Class ViewProdukController</h3>
<p style="text-align: justify;">
Membuat Controller untuk melakukan respon atau aksi pada <b>ViewProduk</b> seperti tambah, edit dan hapus data produk.
</p>
<div class="baca_juga">
<div class="baca_juga_title">CODE</div>
<pre>
package com.community.controller;
import com.community.api.ApiService;
import com.community.request.Produk;
import com.community.request.ResponseData;
import com.community.view.DialogProduk;
import com.community.view.ViewProduk;
import javax.swing.JOptionPane;
import static javax.swing.JOptionPane.INFORMATION_MESSAGE;
import static javax.swing.JOptionPane.ERROR;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
public class ViewProdukController {
private final ViewProduk view;
public ViewProdukController(ViewProduk view) {
this.view = view;
}
public void tambahData() {
DialogProduk dialog = new DialogProduk(view, Produk.builder().build());
dialog.setVisible(true);
}
public void updateData(int row) {
Produk produk = view.getModel().getDataProduk(row);
DialogProduk dialog = new DialogProduk(view, produk);
dialog.setVisible(true);
}
public void deleteData(int row) {
Produk produk = view.getModel().getDataProduk(row);
Call<ResponseData<Produk>> call = ApiService.endPoint().deleteProduk(produk.getId());
call.enqueue(new Callback<ResponseData<Produk>>() {
@Override
public void onResponse(Call<ResponseData<Produk>> call, Response<ResponseData<Produk>> response) {
if (response.isSuccessful()) {
view.getModel().removeRow(produk);
view.getModel().fireTableDataChanged();
JOptionPane.showMessageDialog(null, "Data Produk Berhasil di Hapus", "Sukses", INFORMATION_MESSAGE);
} else {
JOptionPane.showMessageDialog(null, "Data Produk Gagal di Hapus", "Error", ERROR);
}
}
@Override
public void onFailure(Call<ResponseData<Produk>> call, Throwable thrwbl) {
JOptionPane.showMessageDialog(null, "Tidak Dapat Terhubung Ke Server", "Error", ERROR);
}
});
}
}
</pre>
</div>
<h3>Membuat Class DialogProduk</h3>
<p style="text-align: justify;">
Membuat tampilan dialog yang berfungsi untuk menambahkan atau mengedit data produk.
</p>
<div class="separator" style="clear: both;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWWuLB1geREv0H04YZla0PqQFeMKRhxWTeZOFGUNyWCd5Ge6rsfoebk8eib5A2Oy0DgXGs-TB-V5B3BjB64shxTcJL0Noc95_wrQPDngLT1CdD4BoVVdAJlI2ZodckoGVGWFool6MRZHVVLli3jgdjUPqNduNiPBhJnn3pOTMFvuDdLE_iMQ73NUqn3g/s292/dialog-rest-api-client-retrofit-min.png" style="display: block; padding: 1em 0; text-align: center; "><img alt="Cara Membuat Rest API Client Menggunakan Retrofit" border="0" height="600" data-original-height="292" data-original-width="288" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWWuLB1geREv0H04YZla0PqQFeMKRhxWTeZOFGUNyWCd5Ge6rsfoebk8eib5A2Oy0DgXGs-TB-V5B3BjB64shxTcJL0Noc95_wrQPDngLT1CdD4BoVVdAJlI2ZodckoGVGWFool6MRZHVVLli3jgdjUPqNduNiPBhJnn3pOTMFvuDdLE_iMQ73NUqn3g/s600/dialog-rest-api-client-retrofit-min.png"/></a></div>
<div class="baca_juga">
<div class="baca_juga_title">CODE</div>
<pre>
package com.community.view;
import com.community.controller.DialogProdukController;
import com.community.request.Produk;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class DialogProduk extends JDialog implements ActionListener{
private final ViewProduk view;
private final Produk produk;
private final DialogProdukController controller;
private JTextField fieldKodeProduk, fieldNamaProduk;
private JButton simpan, batal;
public DialogProduk(ViewProduk view, Produk produk){
this.view = view;
this.produk = produk;
controller = new DialogProdukController(this);
initGUI();
controller.getData();
}
private void initGUI() {
setTitle("Form Produk");
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
setSize(300, 300);
setResizable(false);
setModal(true);
setLocationRelativeTo(null);
JPanel panelForm = new JPanel(new FlowLayout(FlowLayout.LEFT, 10, 10));
JLabel labelKodeProduk = new JLabel("Kode Produk");
labelKodeProduk.setPreferredSize(new Dimension(120, 30));
panelForm.add(labelKodeProduk);
fieldKodeProduk = new JTextField();
fieldKodeProduk.setPreferredSize(new Dimension(250, 30));
panelForm.add(fieldKodeProduk);
JLabel labelNamaProduk = new JLabel("Nama Produk");
labelNamaProduk.setPreferredSize(new Dimension(120, 30));
panelForm.add(labelNamaProduk);
fieldNamaProduk = new JTextField();
fieldNamaProduk.setPreferredSize(new Dimension(250, 30));
panelForm.add(fieldNamaProduk);
getContentPane().add(panelForm);
JPanel panelBtn = new JPanel(new FlowLayout(FlowLayout.LEFT, 10, 10));
simpan = new JButton("Simpan");
simpan.setPreferredSize(new Dimension(120, 30));
simpan.addActionListener(this);
panelBtn.add(simpan);
batal = new JButton("Batal");
batal.setPreferredSize(new Dimension(120, 30));
batal.addActionListener(this);
panelBtn.add(batal);
getContentPane().add(panelBtn, BorderLayout.SOUTH);
}
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource()==simpan){
controller.tambahData();
} else if(e.getSource()==batal){
this.dispose();
}
}
public ViewProduk getView() {
return view;
}
public Produk getProduk() {
return produk;
}
public JTextField getFieldKodeProduk() {
return fieldKodeProduk;
}
public JTextField getFieldNamaProduk() {
return fieldNamaProduk;
}
}
</pre>
</div>
<h3>Membuat Class DialogProdukController</h3>
<p style="text-align: justify;">
Membuat Controller untuk melakukan respon atau aksi simpan data produk pada <b>DialogProduk</b>.
</p>
<div class="baca_juga">
<div class="baca_juga_title">CODE</div>
<pre>
package com.community.controller;
import com.community.api.ApiService;
import com.community.request.Produk;
import com.community.request.ResponseData;
import com.community.view.DialogProduk;
import static java.awt.image.ImageObserver.ERROR;
import javax.swing.JOptionPane;
import static javax.swing.JOptionPane.INFORMATION_MESSAGE;
import static javax.swing.JOptionPane.WARNING_MESSAGE;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
public class DialogProdukController {
private final DialogProduk dialog;
public DialogProdukController(DialogProduk dialog) {
this.dialog = dialog;
}
public void getData(){
dialog.getFieldKodeProduk().setText(dialog.getProduk().getKodeProduk());
dialog.getFieldNamaProduk().setText(dialog.getProduk().getNamaProduk());
}
public void tambahData() {
if (validasi()) {
if (dialog.getProduk().getId() > 0) {
updateData(dialog.getProduk().getId());
} else {
simpanData();
}
dialog.dispose();
}
}
private boolean validasi() {
boolean result = true;
if (dialog.getFieldKodeProduk().getText().trim().equals("")
|| dialog.getFieldNamaProduk().getText().trim().equals("")) {
result = false;
}
if (!result) {
JOptionPane.showMessageDialog(null, "Kode dan Nama Produk Tidak Boleh Kosong", "Perhatian", WARNING_MESSAGE);
}
return result;
}
private void simpanData() {
Call<ResponseData<Produk>> call = ApiService.endPoint()
.createProduk(Produk.builder()
.kodeProduk(dialog.getFieldKodeProduk().getText())
.namaProduk(dialog.getFieldNamaProduk().getText())
.build());
call.enqueue(new Callback<ResponseData<Produk>>() {
@Override
public void onResponse(Call<ResponseData<Produk>> call, Response<ResponseData<Produk>> response) {
if (response.isSuccessful()) {
dialog.getView().getModel().addRow(response.body().getData());
dialog.getView().getModel().fireTableDataChanged();
JOptionPane.showMessageDialog(null, "Data Produk Berhasil di Simpan", "Sukses", INFORMATION_MESSAGE);
} else {
JOptionPane.showMessageDialog(null, "Data Produk Gagal di Simpan", "Error", ERROR);
}
}
@Override
public void onFailure(Call<ResponseData<Produk>> call, Throwable thrwbl) {
JOptionPane.showMessageDialog(null, "Tidak Dapat Terhubung Ke Server", "Error", ERROR);
}
});
}
public void updateData(long idProduk) {
Call<ResponseData<Produk>> call = ApiService.endPoint()
.updateProduk(idProduk, Produk.builder()
.kodeProduk(dialog.getFieldKodeProduk().getText())
.namaProduk(dialog.getFieldNamaProduk().getText())
.build());
call.enqueue(new Callback<ResponseData<Produk>>() {
@Override
public void onResponse(Call<ResponseData<Produk>> call, Response<ResponseData<Produk>> response) {
if (response.isSuccessful()) {
dialog.getView().getModel().removeRow(dialog.getProduk());
dialog.getView().getModel().addRow(response.body().getData());
dialog.getView().getModel().fireTableDataChanged();
JOptionPane.showMessageDialog(null, "Data Produk Berhasil di Update", "Sukses", INFORMATION_MESSAGE);
} else {
JOptionPane.showMessageDialog(null, "Data Produk Gagal di Update", "Error", ERROR);
}
}
@Override
public void onFailure(Call<ResponseData<Produk>> call, Throwable thrwbl) {
JOptionPane.showMessageDialog(null, "Tidak Dapat Terhubung Ke Server", "Error", ERROR);
}
});
}
}
</pre>
</div>
<h3>Membuat Class AppMain</h3>
<p style="text-align: justify;">
<b>AppMain</b> merupakan <b>Main Class</b> atau Class utama yang akan dieksekusi pertama kali saat aplikasi dijalankan, dan pada <b>AppMain</b> saya menggunakan <b>NimbusLookAndFeel</b>.
</p>
<div class="baca_juga">
<div class="baca_juga_title">CODE</div>
<pre>
package com.community.app;
import com.community.view.ViewProduk;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.plaf.nimbus.NimbusLookAndFeel;
public class AppMain {
public static void main(String[] args) throws UnsupportedLookAndFeelException {
UIManager.setLookAndFeel(new NimbusLookAndFeel());
ViewProduk view = new ViewProduk();
view.setVisible(true);
}
}
</pre>
</div>
<p style="text-align: justify;">
Untuk Source Code Cara Membuat Rest API Client Menggunakan Retrofit, kalian dapat lihat <a href="https://bitbucket.org/cahendi/belajarretrofit/src/master/" target="_blank">disini</a>
</p>
<p style="text-align: justify;">
Sekian tutorial bagaimana cara membuat Rest Client API menggunakan Retrofit. Semoga bermanfaat.
</p>
<div style="text-align: center;">
<a class="copyrighted-badge" title="Copyrighted.com Registered & Protected" target="_blank" href="https://www.copyrighted.com/website/gqoVdNGH0GWLeNeg">
<img alt="Copyrighted.com Registered & Protected" border="0" width="125" height="25" srcset="https://static.copyrighted.com/badges/125x25/04_2_2x.png 2x" src="https://static.copyrighted.com/badges/125x25/04_2.png" /></a>
</div>
<script src="https://static.copyrighted.com/badges/helper.js"></script>cahendihttp://www.blogger.com/profile/08018498600195831981noreply@blogger.com0Tangerang, Tangerang City, Banten, Indonesia-6.1701796 106.6403236-34.480413436178843 71.4840736 22.140054236178845 141.7965736tag:blogger.com,1999:blog-200160053429810035.post-32656694760394740752022-04-01T23:30:00.003+07:002022-04-08T04:37:34.282+07:00Belajar Kotlin - Penulisan Komentar di Kotlin<p style="text-align: justify;">
Pada menulis sebuah kode program, biasanya setiap programmer akan menuliskan deskripsi untuk menjelaskan baris kode program yang ditulis seperti menjelaskan tentang fungsi dari sebuah method yang telah buatnya. Ini juga merupakan bagian dari dokumentasi program, agar kode program kita juga dipahami oleh orang lain.
</p>
<p style="text-align: justify;">
Penulisan komentar pada bahasa pemrograman memiliki aturan yang berbeda-beda, antara bahasa pemrograman satu dengan yang lainnya. Sekarang kita akan bahas penulisan komentar pada bahasa pemrograman Kotlin. Berikut ini beberapa cara penulisan komentar pada pemrograman Kotlin :
</p>
<h2>Penulisan Komentar 1 Baris</h2>
<p style="text-align: justify;">
Untuk memberikan 1(satu) baris komentar, kalian dapat menggunakan <b>//</b>
</p>
<h3>Contoh Penulisan Komentar 1 Baris</h3>
<div class="baca_juga">
<div class="baca_juga_title">Contoh</div>
<pre>
fun main() {
// Ini Contoh Penulisan 1 Baris Komentar
var nama:String = "Akira"
println("Nama : ${nama}")
}
</pre>
</div>
<div class="baca_juga">
<div class="baca_juga_title">BACA JUGA</div>
<ul>
<li><a href="https://www.community-java.com/2022/03/belajar-kotlin-pengenalan-kotlin.html">Belajar Kotlin - Pengenalan Kotlin</a></li>
<li><a href="https://www.community-java.com/2022/03/belajar-kotlin-tipe-data-dan-varibel.html">Belajar Kotlin - Tipe Data dan Variabel pada Pemrograman Kotlin</a></li>
<li><a href="https://www.community-java.com/2022/04/belajar-kotlin-penggunaan-operator.html">Belajar Kotlin - Contoh Penggunaan Operator</a></li>
<li><a href="https://www.community-java.com/2022/04/belajar-kotlin-percabangan-if-else-di-pemrograman-kotlin.html">Belajar Kotlin - Contoh Percabangan IF ELSE</a></li>
</ul>
</div>
<h2>Penulisan Komentar Lebih Dari 1 Baris</h2>
<p style="text-align: justify;">
Untuk memberikan lebih dari 1(satu) baris komentar, kalian dapat menggunakan <b>/*</b> dan diakhiri dengan <b>*/</b>
</p>
<h3>Contoh Penulisan Komentar 1 Baris</h3>
<div class="baca_juga">
<div class="baca_juga_title">Contoh</div>
<pre>
fun main() {
/*
Ini Contoh Penulisan Lebih Dari 1 Baris Komentar
Yang Akan Menampilkan Nama : Akira
*/
var nama:String = "Akira"
println("Nama : ${nama}")
}
</pre>
</div>
<p style="text-align: justify;">
Sekian tutorial cara penulisan komentar di pemrograman Kotlin, semoga bermanfaat.
</p>
<div style="text-align: center;">
<a class="copyrighted-badge" title="Copyrighted.com Registered & Protected" target="_blank" href="https://www.copyrighted.com/website/gqoVdNGH0GWLeNeg">
<img alt="Copyrighted.com Registered & Protected" border="0" width="125" height="25" srcset="https://static.copyrighted.com/badges/125x25/04_2_2x.png 2x" src="https://static.copyrighted.com/badges/125x25/04_2.png" /></a>
</div>
<script src="https://static.copyrighted.com/badges/helper.js"></script>cahendihttp://www.blogger.com/profile/08018498600195831981noreply@blogger.com0Tangerang, Tangerang City, Banten, Indonesia-6.1701796 106.6403236-34.480413436178843 71.4840736 22.140054236178845 141.7965736tag:blogger.com,1999:blog-200160053429810035.post-66237815056447838172022-04-01T10:57:00.004+07:002022-04-08T04:37:48.576+07:00Belajar Kotlin - Penggunaan Operator<p style="text-align: justify;">
Sama seperti Java atau baha pemrograman lainnya, di Kotlin juga terdapat beberapa jenis operator seperti operator aritmatika, operator pembandingan, operator logika dan operator <i>increment</i> dan <i>decrement</i>. Disini saya akan menjelaskan tentang operator yang ada di Kotlin serta contoh penggunaan operator.
</p>
<h3>Operator Aritmatika</h3>
<p style="text-align: justify;">
Operator aritmatika adalah operator yang biasa digunakan untuk melakukan operasi matematika.
</p>
<div class="separator" style="clear: both;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUqaHRrvLxjXIHeqPh5U_R3c1yZNrpSn0J1i8VGzUGCh6-nm2ooAmnV4iUGW1px4Gmibj1KTdSb--GK2EyzBjZ9Y_ctTwVIb38mZcm0JGuvI_1o4wF568udX8IBjOWo451kL7mRd2k1WjPzfX2-UZ5LvlhgAa33Cxz4vg76gpTw7YnsF9OTI3kbVjq8w/s1030/Operator%20Aritmatika-min.PNG" style="display: block; padding: 1em 0px; text-align: center;">
<img alt="Tabel Penggunaan Operator Aritmatika" border="0" data-original-height="301" data-original-width="1030" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUqaHRrvLxjXIHeqPh5U_R3c1yZNrpSn0J1i8VGzUGCh6-nm2ooAmnV4iUGW1px4Gmibj1KTdSb--GK2EyzBjZ9Y_ctTwVIb38mZcm0JGuvI_1o4wF568udX8IBjOWo451kL7mRd2k1WjPzfX2-UZ5LvlhgAa33Cxz4vg76gpTw7YnsF9OTI3kbVjq8w/s600/Operator%20Aritmatika-min.PNG" width="600" /></a></div>
<h4>Contoh Operator Aritmatika</h4>
<div class="baca_juga">
<div class="baca_juga_title">Contoh</div>
<pre>
<b>fun</b> main() {
<b>var</b> bilangan1:Int = 12
<b>var</b> bilangan2:Int = 4
println("Penjumlahan : "+(bilangan1 + bilangan2))
println("Pengurangan : "+(bilangan1 - bilangan2))
println("Perkalian : "+(bilangan1 * bilangan2))
println("Pembagian : "+(bilangan1 / bilangan2))
println("Sisa Hasil Bagi : "+(bilangan1 % bilangan2))
}
</pre>
</div>
<div class="baca_juga">
<div class="baca_juga_title">Output</div>
<pre>
Penjumlahan : 16
Pengurangan : 8
Perkalian : 48
Pembagian : 3
Sisa Hasil Bagi : 0
</pre>
</div>
<div class="baca_juga">
<div class="baca_juga_title">BACA JUGA</div>
<ul>
<li><a href="https://www.community-java.com/2022/03/belajar-kotlin-pengenalan-kotlin.html">Belajar Kotlin - Pengenalan Kotlin</a></li>
<li><a href="https://www.community-java.com/2022/03/belajar-kotlin-tipe-data-dan-varibel.html">Belajar Kotlin - Tipe Data dan Variabel pada Pemrograman Kotlin</a></li>
<li><a href="https://www.community-java.com/2022/04/belajar-kotlin-penulisan-komentar-di.html">Belajar Kotlin - Cara Penulisan Komentar</a></li>
<li><a href="https://www.community-java.com/2022/04/belajar-kotlin-percabangan-if-else-di-pemrograman-kotlin.html">Belajar Kotlin - Contoh Percabangan IF ELSE</a></li>
</ul>
</div>
<h3>Operator Perbandingan</h3>
<p style="text-align: justify;">
Operator perbandingan adalah operator yang digunakan untuk membandingkan 2 buah data dan akan menghasilkan nilai true atau false.
</p>
<div class="separator" style="clear: both;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWf9B2p3J4SMgrzgSYY1pZbpguYVAtI1kBRtDAnz5CxPszHwJv2OD5KOSElM6zWhAom55QkkTU-pBRJ-bF5QANBDyM4YPg9aAIzrNlIW7P5S1WrzliLGf3bGNjl75TZubORg-Ko1RuWjx4cAep_Ar2IlqNncYhw4F_tw5JeElcJLEzHHPr6UvQRSvD5Q/s710/Operator%20Perbandingan-min.PNG" style="display: block; padding: 1em 0px; text-align: center;">
<img alt="Tabel Penggunaan Operator Perbandingan" border="0" data-original-height="349" data-original-width="710" height="197" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWf9B2p3J4SMgrzgSYY1pZbpguYVAtI1kBRtDAnz5CxPszHwJv2OD5KOSElM6zWhAom55QkkTU-pBRJ-bF5QANBDyM4YPg9aAIzrNlIW7P5S1WrzliLGf3bGNjl75TZubORg-Ko1RuWjx4cAep_Ar2IlqNncYhw4F_tw5JeElcJLEzHHPr6UvQRSvD5Q/w400-h197/Operator%20Perbandingan-min.PNG" width="400" /></a></div>
<h4>Contoh Operator Perbandingan</h4>
<div class="baca_juga">
<div class="baca_juga_title">Contoh</div>
<pre>
<b>fun</b> main() {
<b>var</b> bilangan1:Int = 12
<b>var</b> bilangan2:Int = 4
println("${bilangan1} > ${bilangan2} hasilnya "+(bilangan1 > bilangan2))
println("${bilangan1} < ${bilangan2} hasilnya "+(bilangan1 < bilangan2))
println("${bilangan1} >= ${bilangan2} hasilnya "+(bilangan1 >= bilangan2))
println("${bilangan1} <= ${bilangan2} hasilnya "+(bilangan1 <= bilangan2))
println("${bilangan1} == ${bilangan2} hasilnya "+(bilangan1 == bilangan2))
println("${bilangan1} != ${bilangan2} hasilnya "+(bilangan1 != bilangan2))
}
</pre>
</div>
<div class="baca_juga">
<div class="baca_juga_title">Output</div>
<pre>
12 <b>></b> 4 hasilnya true
12 <b><</b> 4 hasilnya false
12 <b>>=</b> 4 hasilnya true
12 <b><=</b> 4 hasilnya false
12 <b>==</b> 4 hasilnya false
12 <b>!=</b> 4 hasilnya true
</pre>
</div>
<h3>Operator Logika</h3>
<p style="text-align: justify;">
Operator logika adalah operator yang menentukan logic dari antar valiabel atau value, operator logika sama seperti operator perbandingan, mengembalikan nilai dalam bentuk Boolean.
</p>
<div class="separator" style="clear: both;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihx9sYPHXu-zBvDIuRDmGc62RbJNNiafB654W94JzPzApy2S0oHyovYZZfI4mWPb2SpWj6en7GWPWbraI-7cfDAHNIR7c8Akv2ZHie0dMMzMdXOUfJvW18HAe2axO-_4V-DbFoGce8lCF9MqlaedratutJCc8d5fmThGQJhWQVyrCGpXk4nt60vv8D0A/s714/Operator%20Logika-min.PNG" style="display: block; padding: 1em 0; text-align: center; ">
<img alt="Tabel Penggunaan Operator Logika" border="0" width="400" data-original-height="215" data-original-width="714" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihx9sYPHXu-zBvDIuRDmGc62RbJNNiafB654W94JzPzApy2S0oHyovYZZfI4mWPb2SpWj6en7GWPWbraI-7cfDAHNIR7c8Akv2ZHie0dMMzMdXOUfJvW18HAe2axO-_4V-DbFoGce8lCF9MqlaedratutJCc8d5fmThGQJhWQVyrCGpXk4nt60vv8D0A/s400/Operator%20Logika-min.PNG"/></a></div>
<h4>Contoh Operator Logika</h4>
<div class="baca_juga">
<div class="baca_juga_title">Contoh</div>
<pre>
<b>fun</b> main() {
<b>var</b> bilangan1:Int = 12
<b>var</b> bilangan2:Int = 4
println("(${bilangan1} > ${bilangan2}) && (${bilangan1} == ${bilangan2}) hasilnya "+( (bilangan1 > bilangan2) && (bilangan1 == bilangan2) ))
println("(${bilangan1} > ${bilangan2}) || (${bilangan1} == ${bilangan2}) hasilnya "+( (bilangan1 > bilangan2) || (bilangan1 == bilangan2) ))
println("!(${bilangan1} > ${bilangan2}) hasilnya "+(!(bilangan1 > bilangan2)))
}
</pre>
</div>
<div class="baca_juga">
<div class="baca_juga_title">Output</div>
<pre>
(12 > 4) <b>&&</b> (12 == 4) hasilnya false
(12 > 4) <b>||</b> (12 == 4) hasilnya true
<b>!</b>(12 > 4) hasilnya false
</pre>
</div>
<h3>Operator Increment dan Decrement</h3>
<p style="text-align: justify;">
Sebenarnya operator berikut adalah termasuk dalam operator aritmatika, tetapi saya masukkan dalam kategori sendiri karena penjelasannya yang sedikit berbeda. Operator Increment dan Decrement adalah operator yang bertugas untuk menambah nilai pada suatu variabel, biasanya digunakan didalam proses pengulangan atau looping.
</p>
<h4>Contoh Operator Increment dan Decrement</h4>
<div class="baca_juga">
<div class="baca_juga_title">Increment</div>
<pre>
<b>fun</b> main() {
<b>var</b> bilangan1:Int = 12
<b>var</b> bilangan2:Int = 4
<b>var</b> bilangan3:Int = bilangan1++
println("Bilangan 3 = "+bilangan3)
<b>var</b> bilangan4:Int = ++bilangan2
println("Bilangan 4 = "+bilangan4)
}
</pre>
</div>
<div class="baca_juga">
<div class="baca_juga_title">Output</div>
<pre>
Bilangan 3 = 12
Bilangan 4 = 5
</pre>
</div>
<div class="baca_juga">
<div class="baca_juga_title">Decrement</div>
<pre>
<b>fun</b> main() {
<b>var</b> bilangan1:Int = 12
<b>var</b> bilangan2:Int = 4
<b>var</b> bilangan3:Int = bilangan1--
println("Bilangan 3 = "+bilangan3)
<b>var</b> bilangan4:Int = --bilangan2
println("Bilangan 4 = "+bilangan4)
}
</pre>
</div>
<div class="baca_juga">
<div class="baca_juga_title">Output</div>
<pre>
Bilangan 3 = 12
Bilangan 4 = 3
</pre>
</div>
<p style="text-align: justify;">
Sekian tutorial Kotlin tentang cara dan contoh penggunaan operator kali ini, semoga bermanfaat.
</p>
<div style="text-align: center;">
<a class="copyrighted-badge" title="Copyrighted.com Registered & Protected" target="_blank" href="https://www.copyrighted.com/website/gqoVdNGH0GWLeNeg">
<img alt="Copyrighted.com Registered & Protected" border="0" width="125" height="25" srcset="https://static.copyrighted.com/badges/125x25/04_2_2x.png 2x" src="https://static.copyrighted.com/badges/125x25/04_2.png" /></a>
</div>
<script src="https://static.copyrighted.com/badges/helper.js"></script>cahendihttp://www.blogger.com/profile/08018498600195831981noreply@blogger.com0Tangerang, Tangerang City, Banten, Indonesia-6.1701796 106.6403236-34.480413436178843 71.4840736 22.140054236178845 141.7965736tag:blogger.com,1999:blog-200160053429810035.post-67728135689286803372022-03-31T00:59:00.020+07:002022-04-08T04:38:04.210+07:00Belajar Kotlin - Tipe Data dan Varibel<div class="separator" style="clear: both;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPi9Lu3v9TmjJIp7lH5-5cvgi5eU82-QHOknQgswFOEg0G8KtGBiZSdnn9nEskQdut_MeDnDA8JRiy3MyWlskRV5Wo4Y5rlgEQRO6OfR6BUs8hPkhxhdZHEZZWjFlpMLbUGOHrfu2GmgRG-EESFj212G5o7D0IbJWp4cCfPdb8OMhezVYyoqpYHUR9Iw/s1197/kotlin-min.PNG" style="display: block; padding: 1em 0; text-align: center; "><img alt="Belajar Kotlin - Tipe Data dan Varibel pada pemrograman Kotlin" border="0" width="600" data-original-height="359" data-original-width="1197" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPi9Lu3v9TmjJIp7lH5-5cvgi5eU82-QHOknQgswFOEg0G8KtGBiZSdnn9nEskQdut_MeDnDA8JRiy3MyWlskRV5Wo4Y5rlgEQRO6OfR6BUs8hPkhxhdZHEZZWjFlpMLbUGOHrfu2GmgRG-EESFj212G5o7D0IbJWp4cCfPdb8OMhezVYyoqpYHUR9Iw/s600/kotlin-min.PNG"/></a></div>
<p style="text-align: justify;">
Pada kesempatan kali saya akan membahas tentang tipe data dan variabel pada pemrograman <b>Kotlin</b>, seperti :
</p>
<ul>
<li>Pengertian Tipe Data dan Variabel</li>
<li>Cara Membuat Tipe Data dan Variabel</li>
<li>Contoh variabel <i>mutable</i> dan <i>imutable</i></li>
<li>Cara Melakukan Konversi Tipe Data</li>
</ul>
<br/>
<h2>Apa Itu Tipe Data dan Variabel</h2>
<p style="text-align: justify;">
Berikut ini saya jelaskan pengertian serta contoh penggunaan tipe data dan variabel.
</p>
<h2>Tipe Data</h2>
<p style="text-align: justify;">
Tipe data merupakan jenis nilai yang akan disimpan pada suatu variabel, apakah tipe number, String, Char atau Boolean.
</p>
<h3>Tipe Data Number</h3>
<p style="text-align: justify;">
Tipe data number merupakan tipe data yang bernilai angka, baik itu bilang positif atau negatif, bahkan bilangan bulat dan bilangan pecahan.
</p>
<div class="baca_juga">
<div class="baca_juga_title">CODE</div>
<pre>
<b>fun</b> main() {
<b>var</b> umur:Byte = 30
println(umur)
<b>var</b> tahunProduksi:Short = 1990
println(tahunProduksi)
<b>var</b> jumlah:Int = 35000
println(jumlah)
<b>var</b> hargaBarang:Long = 25_000_000
println(hargaBarang)
<b>var</b> diskon:Double = 3.5
println(diskon)
}
</pre>
</div>
<div class="baca_juga">
<div class="baca_juga_title">BACA JUGA</div>
<ul>
<li><a href="https://www.community-java.com/2022/03/belajar-kotlin-pengenalan-kotlin.html">Belajar Kotlin - Pengenalan Kotlin</a></li>
<li><a href="https://www.community-java.com/2022/04/belajar-kotlin-penggunaan-operator.html">Belajar Kotlin - Contoh Penggunaan Operator</a></li>
<li><a href="https://www.community-java.com/2022/04/belajar-kotlin-penulisan-komentar-di.html">Belajar Kotlin - Cara Penulisan Komentar</a></li>
<li><a href="https://www.community-java.com/2022/04/belajar-kotlin-percabangan-if-else-di-pemrograman-kotlin.html">Belajar Kotlin - Contoh Percabangan IF ELSE</a></li>
</ul>
</div>
<h3>Tipe Data Char</h3>
<p style="text-align: justify;">
Tipe data Char merupakan tipe data yang bernilai karakter. Pada saat melakukan initialisasi menggunakan 1(satu) tanda petik '.
</p>
<h5>Contoh Tipe Data Char</h5>
<div class="baca_juga">
<div class="baca_juga_title">CODE</div>
<pre>
<b>fun</b> main() {
<b>var</b> nilai = 'A'
println("Nilai : "+nilai)
}
atau
<b>fun</b> main() {
<b>var</b> nilai:Char = 'A'
println("Nilai : "+nilai)
}
</pre>
</div>
<h3>Tipe Data String</h3>
<p style="text-align: justify;">
Tipe data String merupakan tipe data yang bernilai teks. Pada saat melakukan initialisasi menggunakan 2(dua) tanda petik ".
</p>
<h5>Contoh Tipe Data String</h5>
<div class="baca_juga">
<div class="baca_juga_title">CODE</div>
<pre>
<b>fun</b> main() {
<b>var</b> nama = "Akira"
println("Nama : "+nama)
}
atau
<b>fun</b> main() {
<b>var</b> nama:String = "Akira"
println("Nama : "+nama)
}
</pre>
</div>
<h3>Tipe Data Boolean</h3>
<p style="text-align: justify;">
Tipe data boolean hanya mempunyai 2(dua) buah nilai, yaitu <b>TRUE</b> atau <b>FALSE</b>.
</p>
<h5>Contoh Tipe Data Boolean</h5>
<div class="baca_juga">
<div class="baca_juga_title">CODE</div>
<pre>
<b>fun</b> main() {
<b>var</b> status = true
println("Status : "+status)
}
atau
<b>fun</b> main() {
<b>var</b> status:Boolean = true
println("Status : "+status)
}
</pre>
</div>
<h2>Variabel</h2>
<p style="text-align: justify;">
Variabel merupakan tempat menyimpan suatu nilai atau <i>value</i>. Pada pemrograman <b>Kotlin</b>, pembuatan variabel di Kotlin sangat mudah tidak serumit dalam pemrograman <b>Java</b>.
</p>
<h3>Aturan Pembuatan Variabel di Kotlin</h3>
<ul>
<li>Sperti Java, di Kotlin juga penulisannya menggunakan <i>CamelCase</i></li>
<li>Tipe data diawali dengan huruf kapital, seperti : String, Double, Long, Int, Short, Byte, Boolean</li>
<li>Variabel yang tidak diinitialisasi diawal harus disebutkan tipe datanya</li>
<li>Nama variabel tidak boleh diawali simbol ataupun angka</li>
<li>Selain <i>underscore</i> atau garis bawah tidak digunakan untuk nama variabel</li>
</ul>
<h3>Variabel Mutable</h3>
<p style="text-align: justify;">
Variabel yang dapat diubah begitu nilainya diinitialisasi, seperti pembuatan variabel pada umunya. <i>Variabel Mutable</i> dinyatakan dengan menggunakan <i>keyword</i> <b>var</b>.
</p>
<h3>Variabel Imutable</h3>
<p style="text-align: justify;">
Variabel yang tidak dapat diubah begitu nilainya diinitialisasi. <i>Variabel Imutable</i> dinyatakan dengan menggunakan <i>keyword</i> <b>val</b>.
</p>
<h5>Contoh Variabel Mutable dan Variabel Imutable</h5>
<div class="baca_juga">
<div class="baca_juga_title">CODE</div>
<pre>
<b>fun</b> main() {
<b>val</b> nama:String = "Akira"
<b>var</b> alamat:String = "Cirebon"
println("Nama \t: "+nama)
println("Alamat \t: "+alamat)
}
</pre>
</div>
<div class="baca_juga">
<div class="baca_juga_title">Penjelasan</div>
<p style="text-align: justify;">
Untuk variabel nama, saya menggunakan variabel imutable sehingga ketika sudah dilakukan initialisasi maka tidak boleh diubah lagi. Silahkan lakukan uji coba dengan merubah kode program seperti berikut :
</p>
<pre>
<b>fun</b> main() {
<b>val</b> nama:String = "Akira"
<b>var</b> alamat:String = "Cirebon"
nama = "Natsuki"
println("Nama \t: "+nama)
println("Alamat \t: "+alamat)
}
</pre>
<p style="text-align: justify;">
Akan terjadi error saat kalian menjalankan kode program diatas, karena variabel nama merupakan variabel imutable. Silahkan ubah <b>val nama:String = "Akira"</b> menjadi <b>var nama:String = "Akira"</b>. Kemudian jalankan kode program diatas.
</p>
</div>
<h2>Null Safety</h2>
<p style="text-align: justify;">
Pada Kotlin kita tidak bisa diberikan nilai <b>null</b> saat melakukan initialisasi, tidak seperti Java. Hal ini guna meminimalisir terjadinya <b>NullPointerException</b> yang sering dilakukan programmer Java. Agar variabel dapat diberikan nilai <b>null</b> saat initialisasi, kalian hanya perlu menambahkan <b>?</b> (tanda tanya).
</p>
<h5>Contoh Penggunaan Null Safety</h5>
<div class="baca_juga">
<div class="baca_juga_title">CODE</div>
<pre>
<b>fun</b> main() {
<b>var</b> nama:String? = null
println("Nama \t: "+nama)
}
</pre>
</div>
<p style="text-align: justify;">
Sekian tutorial tentang tipe data dan variabel pada pemrograman kotlin. Semoga bermanfaat.
</p>
<div style="text-align: center;">
<a class="copyrighted-badge" title="Copyrighted.com Registered & Protected" target="_blank" href="https://www.copyrighted.com/website/gqoVdNGH0GWLeNeg">
<img alt="Copyrighted.com Registered & Protected" border="0" width="125" height="25" srcset="https://static.copyrighted.com/badges/125x25/04_2_2x.png 2x" src="https://static.copyrighted.com/badges/125x25/04_2.png" /></a>
</div>
<script src="https://static.copyrighted.com/badges/helper.js"></script>cahendihttp://www.blogger.com/profile/08018498600195831981noreply@blogger.com0tag:blogger.com,1999:blog-200160053429810035.post-42593898301404196722022-03-30T16:39:00.006+07:002022-04-08T04:38:18.719+07:00Belajar Kotlin - Pengenalan Kotlin<div class="separator" style="clear: both;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjQdrZEzdpBFm1l01NYOL2WDiWIhlS4BIeo7MWYnoGFsiZrx_cd2FYA99Wt3ngD-46fBrO2eCDP9V76_KPoBCUJN5YdyaQSmIxz-tFKhb5lwhz17SdJyhHqp7iVwlZn6asAhw-79EtLdqSwwzu09_XkxBWg1af3xjuIYp0PrfoCm_E1S6S8WpiUxQ43w/s1197/kotlin-min.PNG" style="display: block; padding: 1em 0; text-align: center; "><img title="Belajar Pemrograman Kotlin - Pengenalan Kotlin" alt="Belajar Pemrograman Kotlin - Pengenalan Kotlin" border="0" width="600" data-original-height="359" data-original-width="1197" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjQdrZEzdpBFm1l01NYOL2WDiWIhlS4BIeo7MWYnoGFsiZrx_cd2FYA99Wt3ngD-46fBrO2eCDP9V76_KPoBCUJN5YdyaQSmIxz-tFKhb5lwhz17SdJyhHqp7iVwlZn6asAhw-79EtLdqSwwzu09_XkxBWg1af3xjuIYp0PrfoCm_E1S6S8WpiUxQ43w/s600/kotlin-min.PNG"/></a></div>
<p style="text-align: justify;">
Pada tahun 2011 perusahaan <b>JetBrains</b> memperkenalkan Bahasa Pemrograman Kotlin. Kotlin secara resmi diumumkan oleh <b>Google</b> menjadi salah satu bahasa resmi dalam membangun aplikasi android dan pada tahun 2019 <b>Google</b> merekomendasikan bahasa pemrograman Kotlin untuk pengembangan aplikasi <b>Android</b>.
</p>
<p style="text-align: justify;">
Kotlin merupakan bahasa pemrograman yang berorientasi objek dan fungsional. Kalian dapat menggunakan Kotlin dengan orientasi objek, fungsional, atau menggabungkan keduanya. Kotlin juga bahasa pemrograman ekspresif dan ringkas yang dapat mengurangi error kode secara umum dan juga mudah diintegrasikan dengan aplikasi yang sudah ada.
</p>
<h2>Kenapa Belajar Kotlin</h2>
<p style="text-align: justify;">
Berikut ini beberapa alasan kenapa kita harus belajar Kotlin.
</p>
<ul>
<li><b>Kotlin</b> merupakan bahasa pemrograman yang dapat berjalan di <b>JVM</b> (<i>Java Virtual Machine</i>) artinya <b>Kotlin</b> kompatibel dengan <b>Java</b> sehingga akan memudahkan <i>developer</i></li>
<li><b>Kode Yang Lebih Aman : </b>Kotlin memiliki berbagai fitur bahasa untuk membantu Anda menghindari kesalahan pemrograman yang umum seperti <b>NullPointerException</b></li>
<li><b>Kotlin</b> menjadi bahasa pemrograman utama untuk pengembangan aplikasi Android</li>
<li><b>Spring</b> sudah mendukung Kotlin</li>
</ul>
<br/>
<h2>Software Development Kit</h2>
<p style="text-align: justify;">
Untuk membuat aplikasi dengan bahasa pemrograman <b>Kotlin</b>, kalian perlu menginstal <b>JDK</b> atau <i>Java Development Kit</i> versi 8 keatas.
</p>
<h2>Perbandingan Java dengan Kotlin</h2>
<p style="text-align: justify;">
Untuk perbandingan kali ini yang akan saya lakukan membandingkan penulisan kode program antara <b>Java</b> dan <b>Kotlin</b>.
</p>
<div class="baca_juga">
<div class="baca_juga_title">BACA JUGA</div>
<ul>
<li><a href="https://www.community-java.com/2022/04/belajar-kotlin-percabangan-if-else-di-pemrograman-kotlin.html">Belajar Kotlin - Contoh Percabangan IF ELSE</a></li>
<li><a href="https://www.community-java.com/2022/03/belajar-kotlin-tipe-data-dan-varibel.html">Belajar Kotlin - Tipe Data dan Variabel pada Pemrograman Kotlin</a></li>
<li><a href="https://www.community-java.com/2022/04/belajar-kotlin-penggunaan-operator.html">Belajar Kotlin - Contoh Penggunaan Operator</a></li>
<li><a href="https://www.community-java.com/2022/04/belajar-kotlin-penulisan-komentar-di.html">Belajar Kotlin - Cara Penulisan Komentar</a></li>
</ul>
</div>
<h3>Contoh Penulisan Kode Java</h3>
<div class="baca_juga">
<div class="baca_juga_title">CODE</div>
<pre>
public class ContohJava {
public static void main(String[] args) {
System.out.println("Hello, saya Akira");
}
}
</pre>
</div>
<h3>Contoh Penulisan Kode Kotlin</h3>
<div class="baca_juga">
<div class="baca_juga_title">CODE</div>
<pre>
<b>fun</b> main() {
println("Hello, saya Akira")
}
</pre>
</div>
<div class="baca_juga">
<div class="baca_juga_title">Penjelasan</div>
<b>fun</b> merupakan keyword pada bahasa pemrograman kotlin yang menandakan bahwa itu merupakan <b>function</b><br/><br/>
<b>fun main()</b> berarti <b>function</b> tersebut memiliki nama <b>main</b>, dan <b>main</b> merupakan <b>function</b> utama yang akan dipanggil saat kalian menjalankan program.<br/><br/>
Dalam membuat <b>function</b> harus diakhiri dengan <b>()</b>
</div>
<p style="text-align: justify;">
Berdasarkan contoh kode diatas, kita dapat membandingkan antara penulisan kode dengan <b>Java</b> dan <b>Kotlin</b>. Kedua contoh diatas akan menampilkan teks <b>Hello, saya Akira</b> dan penulisan menggunakan <b>Kotlin</b> lebih sederhana.
</p>
<p style="text-align: justify;">
Sekian materi tentang pengenalan bahasa pemrograman <b>Kotlin</b>. Semoga bermanfaat.
</p>
<div style="text-align: center;">
<a class="copyrighted-badge" title="Copyrighted.com Registered & Protected" target="_blank" href="https://www.copyrighted.com/website/gqoVdNGH0GWLeNeg">
<img alt="Copyrighted.com Registered & Protected" border="0" width="125" height="25" srcset="https://static.copyrighted.com/badges/125x25/04_2_2x.png 2x" src="https://static.copyrighted.com/badges/125x25/04_2.png" /></a>
</div>
<script src="https://static.copyrighted.com/badges/helper.js"></script>cahendihttp://www.blogger.com/profile/08018498600195831981noreply@blogger.com0Jl. Hartono Raya No.5, RT.001/RW.006, Cikokol, Kec. Tangerang, Kota Tangerang, Banten 15117, Indonesia-6.2020177 106.6418874-34.512251536178844 71.4856374 22.108216136178847 141.7981374tag:blogger.com,1999:blog-200160053429810035.post-38646632497159849822022-03-13T22:04:00.057+07:002022-04-02T22:31:11.336+07:00Belajar Cara Membuat CRUD Rest API Spring Boot<p style="text-align: justify;">Pada kesempatan kali ini, saya ingin berbagi tutorial cara membuat CRUD Spring Boot - Spring boot merupakan salah satu framework Java yang mempermudah programmer dalam membuat sebuah aplikasi. Untuk membuat project spring boot, kalian dapat kunjungi situs https://start.spring.io/ untuk melakukan initializr project Spring Boot. Pada saat tutorial ini dibuat versi stabil spring boot yang terbaru adalah 2.6.4, dan berikut ini spring initializr yang gunakan :</p>
<h2>Project Spring Boot</h2>
<ul style="text-align: left;">
<li>Project : Maven Project<br /></li>
<li>Language : Java<br /></li>
<li>Spring Boot : 2.6.4<br /></li>
</ul>
<h3>Project Metadata</h3>
<ul style="text-align: left;">
<li>Group : com.community<br /></li>
<li>Artifact : belajar-spring<br /></li>
<li>Name : belajar-spring<br /></li>
<li>Description : Belajar Spring Boot<br /></li>
<li>Package name : com.community.belajar-spring<br /></li>
<li>Packaging : jar<br /></li>
<li>Java : 11<br /></li>
</ul>
<h3>Dependencies</h3>
<ul style="text-align: left;">
<li>Spring Web<br /></li>
<li>Spring Data JPA<br /></li>
<li>PostgreSQL Driver<br /></li>
<li>Lombok<br /></li>
</ul>
<div class="baca_juga">
<div class="baca_juga_title">BACA JUGA</div>
<ul>
<li><a href="https://www.community-java.com/2021/11/cara-membuat-laporan-pdf-dan-excel-di-java.html">Cara Membuat Laporan PDF dan Excel di Java</a></li>
<li><a href="https://www.community-java.com/2022/04/cara-membuat-rest-api-client-menggunakan-retrofit.html">Cara Membuat Rest API Client Menggunakan Retrofit</a></li>
<li><a href="https://www.community-java.com/2019/02/cara-membuat-report-di-java-dengan-jasperreport.html">Cara Membuat Report di Java dengan JasperReport</a></li>
<li><a href="https://www.community-java.com/2022/03/cara-export-postgresql-ke-file-csv.html">Cara Export PostgreSQL ke File CSV Menggunakan Perintah COPY</a></li>
</ul>
</div>
<div class="separator" style="clear: both;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEiwPLV7QQMwuKJ2x_sv1ckuN3Y7bcg4ZayRQ_x72ds9FiRLVnuByUbh-HnzMkvDEyXeVoz7zjB6iXnFYgPV4JDE7rS6APo59jI3M3AA-3n2n2bsGf9HPST0Hc29BblEBYkCWXca85bmG6yxDhRN1-e_FLTd-K-tEriCUk3VMc2SaLFW36ETcujbiGYSYA=s1499" style="display: block; padding: 1em 0px; text-align: center;">
<img alt="Cara Membuat Rest API Menggunakan Spring Boot" border="0" data-original-height="928" data-original-width="1499" height="397" src="https://blogger.googleusercontent.com/img/a/AVvXsEiwPLV7QQMwuKJ2x_sv1ckuN3Y7bcg4ZayRQ_x72ds9FiRLVnuByUbh-HnzMkvDEyXeVoz7zjB6iXnFYgPV4JDE7rS6APo59jI3M3AA-3n2n2bsGf9HPST0Hc29BblEBYkCWXca85bmG6yxDhRN1-e_FLTd-K-tEriCUk3VMc2SaLFW36ETcujbiGYSYA=w640-h397" title="Cara Membuat Rest API Menggunakan Spring Boot" width="640" /></a></div>
<div style="text-align: center;">
Gambar 1 : Initializr Spring Boot Project
</div><br />
<div class="baca_juga">
<div class="baca_juga_title">Buat DB</div>
<pre>CREATEDB -U postgres -p 7117 db_penjualan;
</pre>
</div>
<div class="baca_juga">
<div class="baca_juga_title">Membuat Tabel</div>
<pre>CREATE TABLE master_produk
(
id bigserial NOT NULL,
kode_produk character varying(255),
nama_produk character varying(255),
CONSTRAINT id_produk_pk PRIMARY KEY (id)
);
</pre>
</div>
<div class="baca_juga">
<div class="baca_juga_title">Insert Data</div>
<pre>INSERT INTO master_produk(id, kode_produk, nama_produk)
VALUES (1, 'A101', 'PC Unit');
INSERT INTO master_produk(id, kode_produk, nama_produk)
VALUES (2, 'A102', 'Mouse Wireless');
INSERT INTO master_produk(id, kode_produk, nama_produk)
VALUES (3, 'A103', 'Keyboard Gaming');
INSERT INTO master_produk(id, kode_produk, nama_produk)
VALUES (4, 'A104', 'Layar LED 40 Inchi');
INSERT INTO master_produk(id, kode_produk, nama_produk)
VALUES (5, 'A105', 'Flash Disk 8Gb');
</pre>
</div>
<h2>Konfigurasi</h2>
<h3>application.properties</h3>
<div class="baca_juga">
<div class="baca_juga_title">CODE</div>
<pre>server.port=80
server.servlet.context-path=/belajar-spring
spring.datasource.url=jdbc:postgresql://localhost:7117/db_penjualan
spring.datasource.username=postgres
spring.datasource.password=postgres
spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect
spring.jpa.hibernate.ddl-auto=none
</pre>
</div>
<h3>pom.xml</h3>
<div class="baca_juga">
<div class="baca_juga_title">CODE</div>
<pre><?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.4</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.community</groupId>
<artifactId>belajar-spring</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>belajar-spring</name>
<description>Belajar Spring Boot</description>
<properties>
<java.version>11</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>
</pre>
</div>
<h3>BelajarSpringApplication</h3>
<div style="text-align: justify;">
Ubah <b>Class BelajarSpringApplication</b> menjadi seperti berikut :
</div><br />
<div class="baca_juga">
<div class="baca_juga_title">CODE</div>
<pre>package com.community.belajarspring;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.PropertySource;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
@SpringBootApplication
@EntityScan(basePackages="com.community.belajarspring.entities")
@ComponentScan(basePackages={"com.community.belajarspring"})
@EnableJpaRepositories(basePackages="com.community.belajarspring.repositories")
@PropertySource("classpath:application.properties")
public class BelajarSpringApplication {
public static void main(String[] args) {
SpringApplication.run(BelajarSpringApplication.class, args);
}
}
</pre>
</div>
<h2>Membuat Entity Class</h2>
<div style="text-align: justify;">
Buatlah sebuah package dengan nama <b>entities</b> kemudian buat sebuat <b>Class MasterProduk</b>.
</div><br />
<h3>Membuat Class MasterProduk</h3>
<div class="baca_juga">
<div class="baca_juga_title">CODE</div>
<pre>package com.community.belajarspring.entities;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
@Entity
@Table(name = "master_produk")
public class MasterProduk {
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@Column(name = "kode_produk")
private String kodeProduk;
@Column(name = "nama_produk")
private String namaProduk;
}
</pre>
</div>
<h2>Membuat Response</h2>
<div style="text-align: justify;">
Buatlah sebuah package dengan nama <b>response</b> kemudian buat sebuah <b>Class ResponseData</b>.
</div><br />
<h3>Membuat Class ResponseData</h3>
<div class="baca_juga">
<div class="baca_juga_title">CODE</div>
<pre>package com.community.belajarspring.response;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class ResponseData<T> {
private int status;
private String pesan;
private T data;
}
</pre>
</div>
<h2>Membuat Repository</h2>
<div style="text-align: justify;">
Buatlah sebuah package dengan nama <b>repositories</b> kemudian buat sebuah <b>Interface MasterProdukRepository</b>.
</div><br />
<h3>Membuat Interface MasterProdukRepository</h3>
<div class="baca_juga">
<div class="baca_juga_title">CODE</div>
<pre>package com.community.belajarspring.repositories;
import com.community.belajarspring.entities.MasterProduk;
import org.springframework.data.repository.CrudRepository;
public interface MasterProdukRepository extends CrudRepository<MasterProduk, Long>{
}
</pre>
</div>
<h2>Membuat Service</h2>
<div style="text-align: justify;">
Buatlah sebuah package dengan nama <b>services</b> kemudian buat sebuah <b>Interface MasterProdukService</b> dan sebuah <b>Class MasterProdukServiceImpl</b>.
</div><br />
<h3>Membuat Interface MasterProdukService</h3>
<div class="baca_juga">
<div class="baca_juga_title">CODE</div>
<pre>package com.community.belajarspring.services;
import com.community.belajarspring.entities.MasterProduk;
import java.util.List;
public interface MasterProdukService {
public List<MasterProduk> getListProduk();
public MasterProduk getProdukByID(long id);
public MasterProduk createMasterProduk(MasterProduk masterProduk);
public MasterProduk updateMasterProduk(long id, MasterProduk masterProduk);
public boolean deleteMasterProduk(long id);
}
</pre>
</div>
<h3>Membuat Class MasterProdukServiceImpl</h3>
<div class="baca_juga">
<div class="baca_juga_title">CODE</div>
<pre>package com.community.belajarspring.services;
import com.community.belajarspring.entities.MasterProduk;
import com.community.belajarspring.repositories.MasterProdukRepository;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class MasterProdukServiceImpl implements MasterProdukService {
@Autowired
private MasterProdukRepository repository;
@Override
public List<MasterProduk> getListProduk() {
return (List<MasterProduk>) repository.findAll();
}
@Override
public MasterProduk getProdukByID(long id) {
return repository.findById(id).orElse(null);
}
@Override
public MasterProduk createMasterProduk(MasterProduk masterProduk) {
return repository.save(masterProduk);
}
@Override
public MasterProduk updateMasterProduk(long id, MasterProduk masterProduk) {
MasterProduk produk = repository.findById(id).orElse(null);
if (produk != null) {
produk.setKodeProduk(masterProduk.getKodeProduk());
produk.setNamaProduk(masterProduk.getNamaProduk());
return repository.save(produk);
} else {
return null;
}
}
@Override
public boolean deleteMasterProduk(long id) {
MasterProduk produk = repository.findById(id).orElse(null);
if (produk != null) {
repository.deleteById(id);
return true;
} else {
return false;
}
}
}
</pre>
</div>
<h2>Membuat Rest Controller</h2>
<div style="text-align: justify;">
Buatlah sebuah package dengan nama <b>rest</b> kemudian buat sebuah <b>Class MasterProdukAPI</b>.
</div><br />
<h3>Membuat Class MasterProdukAPI</h3>
<div class="baca_juga">
<div class="baca_juga_title">CODE</div>
<pre>package com.community.belajarspring.rest;
import com.community.belajarspring.entities.MasterProduk;
import com.community.belajarspring.response.ResponseData;
import com.community.belajarspring.services.MasterProdukService;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("master-produk")
public class MasterProdukAPI {
@Autowired
private MasterProdukService service;
@GetMapping("/list")
public ResponseData<List<MasterProduk>> getListMasterProduk() {
List<MasterProduk> list = service.getListProduk();
if (!list.isEmpty()) {
return new ResponseData(200, "OK", list);
} else {
return new ResponseData(404, "Data Tidak Ditemukan", null);
}
}
@GetMapping("/{id}")
public ResponseData<MasterProduk> getMasterProduk(@PathVariable("id") long id) {
MasterProduk masterProduk = service.getProdukByID(id);
if (masterProduk != null) {
return new ResponseData(200, "OK", masterProduk);
} else {
return new ResponseData(404, "Data Tidak Ditemukan", null);
}
}
@PostMapping(value = "/create",
produces = MediaType.APPLICATION_JSON_VALUE,
consumes = MediaType.APPLICATION_JSON_VALUE)
public ResponseData saveMasterProduk(@RequestBody MasterProduk masterProduk) {
MasterProduk produk = service.createMasterProduk(masterProduk);
if (produk != null) {
return new ResponseData(200, "Data Berhasil Disimpan", produk);
} else {
return new ResponseData(404, "Data Tidak Ditemukan", null);
}
}
@PutMapping(value = "/update/{id}",
produces = MediaType.APPLICATION_JSON_VALUE,
consumes = MediaType.APPLICATION_JSON_VALUE)
public ResponseData updateMasterProduk(@PathVariable("id") long id, @RequestBody MasterProduk masterProduk) {
MasterProduk produk = service.updateMasterProduk(id, masterProduk);
if (produk != null) {
return new ResponseData(200, "Perubahan Data Berhasil Disimpan", produk);
} else {
return new ResponseData(404, "Data Tidak Ditemukan", null);
}
}
@DeleteMapping("/delete/{id}")
public ResponseData deleteMasterProduk(@PathVariable("id") long id) {
boolean result = service.deleteMasterProduk(id);
if (result) {
return new ResponseData(200, "Data Berhasil Dihapus", null);
} else {
return new ResponseData(404, "Data Tidak Ditemukan", null);
}
}
}
</pre>
</div>
<h2>Testing</h2>
<p style="text-align: justify;">
Pada tahap ini, kita akan melakukan uji coba pada <i>rest api</i> yang telah kita buat tadi dengan menggunakan aplikasi <b>Postman</b>. Jangan lupa untuk menjalankan aplikasi tadi dengan mengetikan perintah <b>mvn spring-boot:run</b> atau <b>mvn clean spring-boot-run</b>.
</p>
<div class="separator" style="clear: both;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgVna0SPDAY_bd-aoh1kOhE5wR1BHDg7N6ZGzFaVUPuFjmrGa5BWXkk5jRzqO70j84UwOFsz8OYHbcn3rqFenVR2IyePDhLb5VQg3ada05mMRCYLgV70hxCu9F_Kqt87QMi92aiutT_0QBDfTQ3bInW2BNWwrgihkMvUi57wfh_7mWCxazUdvKJtrklXA=s1902" style="display: block; padding: 1em 0px; text-align: center;"><img alt="Belajar Cara Membuat CRUD Rest API Spring Boot" border="0" data-original-height="648" data-original-width="1902" src="https://blogger.googleusercontent.com/img/a/AVvXsEgVna0SPDAY_bd-aoh1kOhE5wR1BHDg7N6ZGzFaVUPuFjmrGa5BWXkk5jRzqO70j84UwOFsz8OYHbcn3rqFenVR2IyePDhLb5VQg3ada05mMRCYLgV70hxCu9F_Kqt87QMi92aiutT_0QBDfTQ3bInW2BNWwrgihkMvUi57wfh_7mWCxazUdvKJtrklXA=s600" title="Belajar Cara Membuat CRUD Rest API Spring Boot" width="600" /></a></div>
<div style="text-align: center;">
Gambar 2 : Menjalankan Spring Boot
</div><br />
<div class="separator" style="clear: both;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjeW0YHLnRydAHDSl8IqGS5bMHKj4rlBptsRe9Z51sCKRmsZ7RtoigK2sXcMaHpPj2XC-raSrnFxEiIDJ4qVo66uTAQoCRkBuVQcXzQI7FvWVMtoFLLNrmunVl6ajhQwgRCzsk36sEc_-PriC0tPqflGgTlVtRu8MI6oUrVpGYFcupsAVclp7PCd1m1zg=s1479" style="display: block; padding: 1em 0px; text-align: center;">
<img alt="Belajar Cara Membuat CRUD Rest API Spring Boot" border="0" data-original-height="812" data-original-width="1479" src="https://blogger.googleusercontent.com/img/a/AVvXsEjeW0YHLnRydAHDSl8IqGS5bMHKj4rlBptsRe9Z51sCKRmsZ7RtoigK2sXcMaHpPj2XC-raSrnFxEiIDJ4qVo66uTAQoCRkBuVQcXzQI7FvWVMtoFLLNrmunVl6ajhQwgRCzsk36sEc_-PriC0tPqflGgTlVtRu8MI6oUrVpGYFcupsAVclp7PCd1m1zg=s600" title="Belajar Cara Membuat CRUD Rest API Spring Boot" width="600" /></a></div>
<div style="text-align: center;">
Gambar 3 : Mengambil Semua Data Master Produk
</div><br />
<div class="separator" style="clear: both;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhp6jvxWmaHkF7kg1sEhpZ5sBrHndg1H42sBITs9X9_GauuT0kksprPOaSRXehTuSE9_j7GrX-fjxp3yVR3jWJwvPSiIEO4ZlhPvUVC-H_YMKaQGWfgaqihZF9bq1gAUoLutWVHYOUQh7_SNDYCdMxrvYKGbH0vRODcwqs_mWsKNxS9rytpIE6Q6LaKTQ=s1474" style="display: block; padding: 1em 0px; text-align: center;">
<img alt="Belajar Cara Membuat CRUD Rest API Spring Boot" border="0" data-original-height="422" data-original-width="1474" src="https://blogger.googleusercontent.com/img/a/AVvXsEhp6jvxWmaHkF7kg1sEhpZ5sBrHndg1H42sBITs9X9_GauuT0kksprPOaSRXehTuSE9_j7GrX-fjxp3yVR3jWJwvPSiIEO4ZlhPvUVC-H_YMKaQGWfgaqihZF9bq1gAUoLutWVHYOUQh7_SNDYCdMxrvYKGbH0vRODcwqs_mWsKNxS9rytpIE6Q6LaKTQ=s600" title="Belajar Cara Membuat CRUD Rest API Spring Boot" width="600" /></a></div>
<div style="text-align: center;">
Gambar 4 : Mengambil Data Master Produk Berdasarkan ID
</div><br />
<div class="separator" style="clear: both;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhiysVWgyiGPme_LHL9EDMGPPB2iQ70nPA9eWBO0hSbeE21YRDkQuvYL45mEpccX0FGc3cjNc63xUJNxck2l5fFF3W6KswUeOs1zfqvcrfeoCHct5DHPNcwOBp89quT5pMCuvadHJ_wGyBNQ0eOd42q6WM3aDHq6IPtXgnr8hvQSOph4nheaYDdBm0DZw=s1476" style="display: block; padding: 1em 0px; text-align: center;"><img alt="Belajar Cara Membuat CRUD Rest API Spring Boot" border="0" data-original-height="534" data-original-width="1476" src="https://blogger.googleusercontent.com/img/a/AVvXsEhiysVWgyiGPme_LHL9EDMGPPB2iQ70nPA9eWBO0hSbeE21YRDkQuvYL45mEpccX0FGc3cjNc63xUJNxck2l5fFF3W6KswUeOs1zfqvcrfeoCHct5DHPNcwOBp89quT5pMCuvadHJ_wGyBNQ0eOd42q6WM3aDHq6IPtXgnr8hvQSOph4nheaYDdBm0DZw=s600" title="Belajar Cara Membuat CRUD Rest API Spring Boot" width="600" /></a></div>
<div style="text-align: center;">
Gambar 5 : Menambahkan Data Master Produk
</div><br />
<div class="separator" style="clear: both;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgnEKq4jQGt8i6Z5UkaqPkwhw-X3etu8V8dF9PLZAfFkkQik8GY5XKLhDtObfHZ3YX8aZY7dNNPDngYufOJBdXUmA19f2ChleH4iioix7QmQvTQt7PnEkhw9qGV1sFPXH9hQ_e2D85OWwIidQ-HRWuNbjk0z_nIfjDCr1f6ZPmI2QBWzdQSfOao7ieTsw=s1475" style="display: block; padding: 1em 0px; text-align: center;"><img alt="Belajar Cara Membuat CRUD Rest API Spring Boot" border="0" data-original-height="528" data-original-width="1475" src="https://blogger.googleusercontent.com/img/a/AVvXsEgnEKq4jQGt8i6Z5UkaqPkwhw-X3etu8V8dF9PLZAfFkkQik8GY5XKLhDtObfHZ3YX8aZY7dNNPDngYufOJBdXUmA19f2ChleH4iioix7QmQvTQt7PnEkhw9qGV1sFPXH9hQ_e2D85OWwIidQ-HRWuNbjk0z_nIfjDCr1f6ZPmI2QBWzdQSfOao7ieTsw=s600" title="Belajar Cara Membuat CRUD Rest API Spring Boot" width="600" /></a></div>
<div style="text-align: center;">
Gambar 6 : Merubah Data Master Produk Berdasarkan ID
</div><br />
<div class="separator" style="clear: both;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEiSfoTkeUrPleKrgSuZWEFowPbwQF9u3qxA7URHuf7-swhtF9SY9lMD9JERiQ1yr09p1AglKVoo2isfpr4_49H7U_ihjnhwpSt_dkOmk2bI-EqapF6BXv7kKxWyeJ6XbKccTm54FIGyOGwZbrYeu6JfaPaerWdwf6qBuyFwS4HDBeaIDvCYGJ3wI0-6hQ=s1477" style="display: block; padding: 1em 0px; text-align: center;"><img alt="Belajar Cara Membuat CRUD Rest API Spring Boot" border="0" data-original-height="378" data-original-width="1477" src="https://blogger.googleusercontent.com/img/a/AVvXsEiSfoTkeUrPleKrgSuZWEFowPbwQF9u3qxA7URHuf7-swhtF9SY9lMD9JERiQ1yr09p1AglKVoo2isfpr4_49H7U_ihjnhwpSt_dkOmk2bI-EqapF6BXv7kKxWyeJ6XbKccTm54FIGyOGwZbrYeu6JfaPaerWdwf6qBuyFwS4HDBeaIDvCYGJ3wI0-6hQ=s600" title="Belajar Cara Membuat CRUD Rest API Spring Boot" width="600" /></a></div>
<div style="text-align: center;">
Gambar 7 : Menghapus Data Master Produk Berdasarkan ID
</div><br />
<p style="text-align: justify;">
Untuk Source Code Cara Membuat Rest API Server Menggunakan Spring Boot, kalian dapat lihat <a href="https://bitbucket.org/cahendi/belajar-spring/src/master/" target="_blank">disini</a>
</p>
<p style="text-align: justify;">Sekian tutorial cara membuat rest api menggunakan spring boot, semoga bermanfaat.</p><br />
<div style="text-align: center;">
<a class="copyrighted-badge" title="Copyrighted.com Registered & Protected" target="_blank" href="https://www.copyrighted.com/website/gqoVdNGH0GWLeNeg">
<img alt="Copyrighted.com Registered & Protected" border="0" width="125" height="25" srcset="https://static.copyrighted.com/badges/125x25/04_2_2x.png 2x" src="https://static.copyrighted.com/badges/125x25/04_2.png" /></a>
</div>
<script src="https://static.copyrighted.com/badges/helper.js"></script>cahendihttp://www.blogger.com/profile/08018498600195831981noreply@blogger.com0Tangerang, Tangerang City, Banten, Indonesia-6.1701796 106.6403236-39.201274744079058 71.484073599999988 26.860915544079059 141.79657360000002tag:blogger.com,1999:blog-200160053429810035.post-69507419882569298722022-03-13T14:00:00.003+07:002022-03-24T23:28:29.890+07:00Belajar PostgreSQL - Contoh Pengguna Cursor di Postgres<div style="text-align: justify;">
Pada tutorial kali saya akan membahas <i>PL/pgSQL</i> mengenai <i>Cursor</i> dan bagaimana cara penggunaannya. Dengan menggunakan <i>Cursor</i> memungkinkan kalian merangkum <i>Query</i> dan memprosesnya dalam satu waktu.
</div><br/>
<div style="text-align: justify;">
Biasanya, saya menggunakan <i>Cursor</i> saat saya ingin membagi hasil <i>Query</i> yang besar menjadi beberapa bagian dan memproses setiap bagian satu per satu. Jika kalian memprosesnya sekaligus, Anda mungkin mengalami <i>memory overflow error</i>.
</div><br/>
<div style="text-align: justify;">
Selain itu, kalian juga dapat membuat <i>Function</i> yang mengembalikan referensi ke <i>Cursor</i> dan ini merupakan cara yang efektif untuk mengembalikan hasil <i>Query</i> yang besar dari suatu <i>Function</i>.
</div>
<div class="baca_juga">
<div class="baca_juga_title">BACA JUGA</div>
<ul>
<li><a href="https://www.community-java.com/2020/12/cara-install-postgres-dan-pgadmin4-di-docker-container.html">Cara Install PostgreSQL dan PgAdmin di Docker</a></li>
<li><a href="https://www.community-java.com/2017/02/contoh-penggunaan-join.html">Contoh Penggunaan Join di PostgreSQL</a></li>
<li><a href="https://www.community-java.com/2021/11/cara-melakukan-backup-dan-restore-database-postgresql.html">Cara Melakukan Backup dan Restore Database PostgreSQL</a></li>
<li><a href="https://www.community-java.com/2022/03/cara-export-postgresql-ke-file-csv.html">Cara Export PostgreSQL ke File CSV Menggunakan Perintah COPY</a></li>
</ul>
</div>
<h3>Persiapan</h3>
<div style="text-align: justify;">
Pada contoh penggunaan <i>cursor</i> kali ini saya menggunakan <b>PostgreSQL 14</b> dengan <i>port</i> <b>7117</b>.
</div>
<div class="baca_juga">
<div class="baca_juga_title">Buat DB</div>
<pre>
CREATEDB -U postgres -p 7117 db_penjualan;
</pre>
</div>
<div class="baca_juga">
<div class="baca_juga_title">Membuat Tabel</div>
<pre>
CREATE TABLE master_produk
(
id bigserial NOT NULL,
kode_produk character varying(255),
nama_produk character varying(255),
CONSTRAINT id_produk_pk PRIMARY KEY (id)
);
</pre>
</div>
<div class="baca_juga">
<div class="baca_juga_title">Insert Data</div>
<pre>
INSERT INTO master_produk(id, kode_produk, nama_produk)
VALUES (1, 'A101', 'PC Unit');
INSERT INTO master_produk(id, kode_produk, nama_produk)
VALUES (2, 'A102', 'Mouse Wireless');
INSERT INTO master_produk(id, kode_produk, nama_produk)
VALUES (3, 'A103', 'Keyboard Gaming');
INSERT INTO master_produk(id, kode_produk, nama_produk)
VALUES (4, 'A104', 'Layar LED 40 Inchi');
INSERT INTO master_produk(id, kode_produk, nama_produk)
VALUES (5, 'A105', 'Flash Disk 8Gb');
</pre>
</div>
<div class="baca_juga">
<div class="baca_juga_title">BACA JUGA</div>
<ul>
<li><a href="https://www.community-java.com/2019/04/belajar-database-postgres-klausa-limit-dan-offset.html">Belajar Database Postgres - Contoh Penggunaan Limit dan Offset</a></li>
<li><a href="https://www.community-java.com/2019/03/belajar-database-postgresql-contoh.html">Belajar Database Postgres - Contoh Penggunaan IF ELSE</a></li>
<li><a href="https://www.community-java.com/2017/02/contoh-penggunaan-order-by.html">Belajar Database Postgres - Contoh Penggunaan ORDER BY</a></li>
<li><a href="https://www.community-java.com/2019/04/cara-cross-database-query-menggunakan-postgres-fdw.html">Cara Cross Database Query Menggunakan Postgres FDW Extension</a></li>
</ul>
</div>
<div class="baca_juga">
<div class="baca_juga_title">Function CURSOR</div>
<pre>CREATE OR REPLACE FUNCTION data_produk(refcursor)
RETURNS refcursor AS $$
BEGIN
OPEN $1 FOR SELECT * FROM master_produk ORDER BY kode_produk;
RETURN $1;
END;
$$
LANGUAGE plpgsql
</pre>
</div>
<div class="baca_juga">
<div class="baca_juga_title">Contoh 1</div>
<pre>
SELECT data_produk('cursor');
FETCH ALL IN "cursor";
</pre>
</div>
<div class="separator" style="clear: both;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhGUFBPUW0BTAI1PgWTm5n2LVsTd08hwtW3ScmVqjndsc4qCIK8Hmj6S6jZXPo7ov_7GVfyV7P--laBbDA8leEMqXlL_p1aOkR9nm2QRwQZnh_6jtue7WqhOJEmm4y-_CGJEkx26vZZH_IiT3Y_5yKJY3y8fAVP_I7hmgzXxXPq-Z-c7d-7UmINYnpQCg=s468" style="display: block; padding: 1em 0; text-align: center; ">
<img alt="Belajar PostgreSQL - Contoh Pengguna Cursor di Postgres" border="0" width="400" data-original-height="240" data-original-width="468" src="https://blogger.googleusercontent.com/img/a/AVvXsEhGUFBPUW0BTAI1PgWTm5n2LVsTd08hwtW3ScmVqjndsc4qCIK8Hmj6S6jZXPo7ov_7GVfyV7P--laBbDA8leEMqXlL_p1aOkR9nm2QRwQZnh_6jtue7WqhOJEmm4y-_CGJEkx26vZZH_IiT3Y_5yKJY3y8fAVP_I7hmgzXxXPq-Z-c7d-7UmINYnpQCg=s400"/></a></div>
<div style="text-align: center;">Gambar 1</div><br/>
<h5>Penjelasan</h5>
<div style="text-align: justify;">
Pada <b>Contoh 1</b>, kita melakukan pemanggilan cursor untuk menampilkan semua data produk dengan cara menjalankan 2(dua) perintah tersebut secara bersamaan.
</div>
<div class="baca_juga">
<div class="baca_juga_title">Contoh 2</div>
<pre>
BEGIN;
SELECT data_produk('cursor');
FETCH 3 IN "cursor";
COMMIT;
</pre>
</div>
<div class="separator" style="clear: both;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEiFt-xC3XujWk8XAz9BviILftgtAYGZeyvkV76Z6zuBBfuYotTmHx3s97ZlgyrmlYIvrEZ5ZbC53dHkevx8ApVgedfUK5ADWtn1H3hlW0H_qkgygOg8s6ozLRIzkWJvXc8e58IeM-usBhiS5GyZ-zaZJ4S_rSvQh0V4bBLQWQ9UnAnMnnrLVMH6-KwoHA=s465" style="display: block; padding: 1em 0; text-align: center; "><img alt="Belajar PostgreSQL - Contoh Pengguna Cursor di Postgres" border="0" width="400" data-original-height="189" data-original-width="465" src="https://blogger.googleusercontent.com/img/a/AVvXsEiFt-xC3XujWk8XAz9BviILftgtAYGZeyvkV76Z6zuBBfuYotTmHx3s97ZlgyrmlYIvrEZ5ZbC53dHkevx8ApVgedfUK5ADWtn1H3hlW0H_qkgygOg8s6ozLRIzkWJvXc8e58IeM-usBhiS5GyZ-zaZJ4S_rSvQh0V4bBLQWQ9UnAnMnnrLVMH6-KwoHA=s400"/></a></div>
<div style="text-align: center;">Gambar 2</div><br/>
<div class="separator" style="clear: both;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgjXg42Z9kXOqbksJ-Z7zR09heut0E-FDfqbgVUOSHFZggNNLuGLSCCpLUGpPnGDO6k7N74Sn-DkCktmWFxf3lAegzq5wAMLxamSAqHe9KM3QBFjd8Dcr5bj9813kKJH-9bfX6LPzxeeJL5BkK8DLARtbj-yIXNCd6tJjbntK9KGRLMeJhQTfquBwn22A=s481" style="display: block; padding: 1em 0; text-align: center; ">
<img alt="Belajar PostgreSQL - Contoh Pengguna Cursor di Postgres" border="0" width="400" data-original-height="176" data-original-width="481" src="https://blogger.googleusercontent.com/img/a/AVvXsEgjXg42Z9kXOqbksJ-Z7zR09heut0E-FDfqbgVUOSHFZggNNLuGLSCCpLUGpPnGDO6k7N74Sn-DkCktmWFxf3lAegzq5wAMLxamSAqHe9KM3QBFjd8Dcr5bj9813kKJH-9bfX6LPzxeeJL5BkK8DLARtbj-yIXNCd6tJjbntK9KGRLMeJhQTfquBwn22A=s400"/></a></div>
<div style="text-align: center;">Gambar 3</div><br/>
<h5>Penjelasan</h5>
<div style="text-align: justify;">
Pada <b>Contoh 2</b>, kita melakukan pemanggilan cursor untuk menampilkan data produk per 3(tiga) data atau baris. Cara memanggilnya seperti berikut :
</div>
<ul>
<li>Eksekusi Baris Pertama <b>BEGIN;</b></li>
<li>Eksekusi Baris Ke-dua <b>SELECT data_produk('cursor');</b></li>
<li>Eksekusi Baris Ke-tiga <b>FETCH 3 IN "cursor";</b>, maka akan menampilkan 3(tiga) data atau baris</li>
<li>Eksekusi Baris Ke-tiga <b>FETCH 3 IN "cursor";</b>, maka akan menampilkan 2(dua) data atau baris (dikarenakan jumlah data yang ada berjumlah 5(lima))</li>
<li>Eksekusi Baris Ke-empat <b>COMMIT;</b> untuk mengakhiri sesi <i>Cursor</i></li>
</ul>
<br/>
<div style="text-align: justify;">
Sekian tutorial contoh penggunaan Cursor di PostgreSQL, semoga bermanfaat.
</div><br />
<div style="text-align: center;">
<a class="copyrighted-badge" title="Copyrighted.com Registered & Protected" target="_blank" href="https://www.copyrighted.com/website/gqoVdNGH0GWLeNeg">
<img alt="Copyrighted.com Registered & Protected" border="0" width="125" height="25" srcset="https://static.copyrighted.com/badges/125x25/04_2_2x.png 2x" src="https://static.copyrighted.com/badges/125x25/04_2.png" /></a>
</div>
<script src="https://static.copyrighted.com/badges/helper.js"></script>cahendihttp://www.blogger.com/profile/08018498600195831981noreply@blogger.com0Tangerang, Tangerang City, Banten, Indonesia-6.1701796 106.6403236-34.480413436178843 71.4840736 22.140054236178845 141.7965736tag:blogger.com,1999:blog-200160053429810035.post-90796316909464547502022-03-11T14:03:00.005+07:002022-03-24T23:29:51.751+07:00Cara Export PostgreSQL ke File CSV Menggunakan Perintah COPY<div style="text-align: justify;">Pada tutorial kali ini saya akan menjelaskan bagaimana cara melakukan <i>export postgres</i> ke dalam sebuah file <i>CSV</i> dengan menggunakan perintah <b>COPY</b>.</div><br/>
<h3>Persiapan</h3>
<div style="text-align: justify;">
Pada tahap ini kita akan membuat sebuah <i>database</i> dan 2(duah) buah tabel. Untuk database yang saya gunakan adalah <b>Postgres 14</b> dengan port <b>7117</b>.
</div>
<div class="baca_juga">
<div class="baca_juga_title">BACA JUGA</div>
<ul>
<li><a href="https://www.community-java.com/2020/12/cara-install-postgres-dan-pgadmin4-di-docker-container.html">Cara Install PostgreSQL dan PgAdmin di Docker</a></li>
<li><a href="https://www.community-java.com/2017/02/contoh-penggunaan-join.html">Contoh Penggunaan Join di PostgreSQL</a></li>
<li><a href="https://www.community-java.com/2021/11/cara-melakukan-backup-dan-restore-database-postgresql.html">Cara Melakukan Backup dan Restore Database PostgreSQL</a></li>
<li><a href="https://www.community-java.com/2022/03/contoh-penggunaan-cursor-di-postgresql.html">Contoh Pengguna Cursor di PostgreSQL</a></li>
</ul>
</div>
<h4>Membuat Database</h4>
<div style="text-align: justify;">
Saya akan membuat sebuah <i>database</i> dengan nama <b>db_penjualan</b>.
</div>
<div class="baca_juga">
<div class="baca_juga_title">Buat DB</div>
<pre>
CREATEDB -U postgres -p 7117 db_penjualan;
</pre>
</div>
<h4>Membuat Tabel</h4>
<div style="text-align: justify;">
</div>
<div class="baca_juga">
<div class="baca_juga_title">Transaksi</div>
<pre>
CREATE TABLE tbl_transaksi
(
id bigint NOT NULL,
kode_transaksi character varying(10) NOT NULL,
tanggal_trasaksi date NOT NULL,
nomor_pelanggan character varying(20),
CONSTRAINT id_transaksi_pk PRIMARY KEY (id),
CONSTRAINT kode_transaksi UNIQUE (kode_transaksi)
);
</pre>
</div>
<div class="baca_juga">
<div class="baca_juga_title">Transaksi Detail</div>
<pre>
CREATE TABLE tbl_transaksi_detail
(
id bigserial NOT NULL,
id_transaksi bigserial NOT NULL,
kode_barang character varying(10) NOT NULL,
jumlah int NOT NULL,
harga_barang double precision,
CONSTRAINT id_transaksi_detail_pk PRIMARY KEY (id),
CONSTRAINT id_transaksi_fkey FOREIGN KEY (id_transaksi)
REFERENCES tbl_transaksi (id) MATCH SIMPLE
ON UPDATE CASCADE
ON DELETE CASCADE
);
</pre>
</div>
<div class="baca_juga">
<div class="baca_juga_title">Tambah Data</div>
<pre>
INSERT INTO tbl_transaksi(id, kode_transaksi, tanggal_trasaksi, nomor_pelanggan)
VALUES (1, 'TRX-001', '2021-03-11', 'P-101');
INSERT INTO tbl_transaksi_detail(id, id_transaksi, kode_barang, jumlah, harga_barang)
VALUES (1, 1, 'A-101', 2, 10000);
INSERT INTO tbl_transaksi_detail(id, id_transaksi, kode_barang, jumlah, harga_barang)
VALUES (2, 1, 'A-102', 4, 15000);
INSERT INTO tbl_transaksi(id, kode_transaksi, tanggal_trasaksi, nomor_pelanggan)
VALUES (2, 'TRX-002', '2021-03-11', 'P-102');
INSERT INTO tbl_transaksi_detail(id, id_transaksi, kode_barang, jumlah, harga_barang)
VALUES (3, 2, 'AK-102', 5, 25000);
INSERT INTO tbl_transaksi_detail(id, id_transaksi, kode_barang, jumlah, harga_barang)
VALUES (4, 2, 'A-101', 3, 10000);
INSERT INTO tbl_transaksi_detail(id, id_transaksi, kode_barang, jumlah, harga_barang)
VALUES (5, 2, 'AT-103', 10, 7500);
INSERT INTO tbl_transaksi(id, kode_transaksi, tanggal_trasaksi, nomor_pelanggan)
VALUES (3, 'TRX-003', '2021-03-11', 'P-103');
INSERT INTO tbl_transaksi_detail(id, id_transaksi, kode_barang, jumlah, harga_barang)
VALUES (6, 3, 'AM-104', 5, 5400);
INSERT INTO tbl_transaksi_detail(id, id_transaksi, kode_barang, jumlah, harga_barang)
VALUES (7, 3, 'A-102', 2, 15000);
INSERT INTO tbl_transaksi_detail(id, id_transaksi, kode_barang, jumlah, harga_barang)
VALUES (8, 3, 'AK-102', 5, 25000);
INSERT INTO tbl_transaksi(id, kode_transaksi, tanggal_trasaksi, nomor_pelanggan)
VALUES (4, 'TRX-004', '2021-03-11', 'P-104');
INSERT INTO tbl_transaksi_detail(id, id_transaksi, kode_barang, jumlah, harga_barang)
VALUES (9, 4, 'A-102', 3, 15000);
INSERT INTO tbl_transaksi_detail(id, id_transaksi, kode_barang, jumlah, harga_barang)
VALUES (10, 4, 'A-101', 7, 10000);
INSERT INTO tbl_transaksi_detail(id, id_transaksi, kode_barang, jumlah, harga_barang)
VALUES (11, 4, 'AM-104', 6, 5400);
INSERT INTO tbl_transaksi_detail(id, id_transaksi, kode_barang, jumlah, harga_barang)
VALUES (12, 4, 'AK-102', 3, 25000);
</pre>
</div>
<div class="baca_juga">
<div class="baca_juga_title">BACA JUGA</div>
<ul>
<li><a href="https://www.community-java.com/2019/04/belajar-database-postgres-klausa-limit-dan-offset.html">Belajar Database Postgres - Contoh Penggunaan Limit dan Offset</a></li>
<li><a href="https://www.community-java.com/2019/03/belajar-database-postgresql-contoh.html">Belajar Database Postgres - Contoh Penggunaan IF ELSE</a></li>
<li><a href="https://www.community-java.com/2017/02/contoh-penggunaan-order-by.html">Belajar Database Postgres - Contoh Penggunaan ORDER BY</a></li>
<li><a href="https://www.community-java.com/2019/04/cara-cross-database-query-menggunakan-postgres-fdw.html">Cara Cross Database Query Menggunakan Postgres FDW Extension</a></li>
</ul>
</div>
<h3>Export PostgreSQL ke File CSV</h3>
<div class="baca_juga">
<div class="baca_juga_title">Contoh 1</div>
<pre>
COPY tbl_transaksi TO 'D:\data-transaksi.csv' DELIMITER ';' CSV HEADER;
</pre>
</div>
<h5>Penjelasan</h5>
<div style="text-align: justify;">
Pada <b>Contoh 1</b>, kita melakukan export dari <b>tabel transaksi</b> ke file CSV (semua kolom dan data akan di export) dengan nama <b>data-transaksi.csv</b> yang disimpan di <i>directory</i> <b>D:\</b>.
</div>
<div class="separator" style="clear: both;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjjPP7DJKaiTaKoJhaaY5k0u4iMhdUL7VQMItqIIZqjBZMR5-eXOX-TQCnFooKopwkTeuQwKY5_ZLDp9ZD1P6MwMIfMiSgjzfXpgCmI_AGDcHruutp1CryijnB2E0i_afkZ-WiFs4XeXjK-eVoj-h-_cq1c8TzA_eBJb0Cr-NjFZLw3r1k-ZJ5K-VpFug=s479" style="display: block; padding: 1em 0; text-align: center; ">
<img alt="cara export postgresql ke file csv" border="0" width="400" data-original-height="151" data-original-width="479" src="https://blogger.googleusercontent.com/img/a/AVvXsEjjPP7DJKaiTaKoJhaaY5k0u4iMhdUL7VQMItqIIZqjBZMR5-eXOX-TQCnFooKopwkTeuQwKY5_ZLDp9ZD1P6MwMIfMiSgjzfXpgCmI_AGDcHruutp1CryijnB2E0i_afkZ-WiFs4XeXjK-eVoj-h-_cq1c8TzA_eBJb0Cr-NjFZLw3r1k-ZJ5K-VpFug=s400"/></a></div>
<div class="baca_juga">
<div class="baca_juga_title">Contoh 2</div>
<pre>
COPY tbl_transaksi(kode_transaksi, tanggal_trasaksi, nomor_pelanggan) TO 'D:\data-transaksi-2.csv' DELIMITER ';' CSV HEADER;
</pre>
</div>
<h5>Penjelasan</h5>
<div style="text-align: justify;">
Pada <b>Contoh 2</b>, kita melakukan export dari <b>tabel transaksi</b> ke file CSV (hanya kolom <b>kode_transaksi</b>, <b>tanggal_trasaksi</b>, <b>nomor_pelanggan</b> yang di export) dengan nama <b>data-transaksi-2.csv</b> yang disimpan di <i>directory</i> <b>D:\</b>.
</div>
<div class="separator" style="clear: both;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgoNhzpA2DaI77MkBDdm-mZs6ISdE6aXyMlk9vXsVkh2Zrj5axepUu0ngswH2L2pS_4SrPw_vA-rMrpE1DvxyKMHJB3bXN5SmS4VbAY1Bvf-okRy2smwGVDMxzC89DKVhcSUJso1Ll2bNLlqk_uBDUsMDu1l6TwJDnRen-lBQUgVqPo9uo--rvHYw4uRg=s418" style="display: block; padding: 1em 0; text-align: center; ">
<img alt="cara export postgresql ke file csv" border="0" width="400" data-original-height="153" data-original-width="418" src="https://blogger.googleusercontent.com/img/a/AVvXsEgoNhzpA2DaI77MkBDdm-mZs6ISdE6aXyMlk9vXsVkh2Zrj5axepUu0ngswH2L2pS_4SrPw_vA-rMrpE1DvxyKMHJB3bXN5SmS4VbAY1Bvf-okRy2smwGVDMxzC89DKVhcSUJso1Ll2bNLlqk_uBDUsMDu1l6TwJDnRen-lBQUgVqPo9uo--rvHYw4uRg=s400"/></a></div>
<br/>
<div class="baca_juga">
<div class="baca_juga_title">Contoh 3</div>
<pre>
COPY (SELECT * FROM tbl_transaksi_detail WHERE id_transaksi = 4) TO 'D:\data-transaksi-detail.csv' DELIMITER ';' CSV HEADER;
</pre>
</div>
<h5>Penjelasan</h5>
<div style="text-align: justify;">
Pada <b>Contoh 3</b>, kita melakukan export dari <b>query</b> ke file CSV dengan nama <b>data-transaksi-detail.csv</b> yang disimpan di <i>directory</i> <b>D:\</b>.
</div>
<div class="separator" style="clear: both;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhROPCbHuCrBIiyFo15Yn384HGpQWaYLYucI3dC626_zZHJqR9X5G8mPLWI4Bb9WCk-ZdiflCiPxbFOc5b2Pz08aRf2R2WFRvu5TNM_701EyXL0rFPHz13WTZSYHtxsPr3_P3OsRdKnShMU8qto_nefa2M5u_-6Xivher2bQQSdntC2OIfaer4KzhF-lw=s473" style="display: block; padding: 1em 0; text-align: center; ">
<img alt="cara export postgresql ke file csv" border="0" width="400" data-original-height="149" data-original-width="473" src="https://blogger.googleusercontent.com/img/a/AVvXsEhROPCbHuCrBIiyFo15Yn384HGpQWaYLYucI3dC626_zZHJqR9X5G8mPLWI4Bb9WCk-ZdiflCiPxbFOc5b2Pz08aRf2R2WFRvu5TNM_701EyXL0rFPHz13WTZSYHtxsPr3_P3OsRdKnShMU8qto_nefa2M5u_-6Xivher2bQQSdntC2OIfaer4KzhF-lw=s400"/></a></div>
<div style="text-align: justify;">
Sekian tutorial cara melakukan <i>export</i> PostgreSQL ke File CSV menggunakan perintah, semoga membantu.
</div>
<br />
<div style="text-align: center;">
<a class="copyrighted-badge" title="Copyrighted.com Registered & Protected" target="_blank" href="https://www.copyrighted.com/website/gqoVdNGH0GWLeNeg">
<img alt="Copyrighted.com Registered & Protected" border="0" width="125" height="25" srcset="https://static.copyrighted.com/badges/125x25/04_2_2x.png 2x" src="https://static.copyrighted.com/badges/125x25/04_2.png" /></a>
</div>
<script src="https://static.copyrighted.com/badges/helper.js"></script>cahendihttp://www.blogger.com/profile/08018498600195831981noreply@blogger.com0Tangerang, Tangerang City, Banten, Indonesia-6.1701796 106.6403236-34.480413436178843 71.4840736 22.140054236178845 141.7965736tag:blogger.com,1999:blog-200160053429810035.post-79972274466447845952022-01-01T15:24:00.016+07:002022-03-31T17:37:34.856+07:00Belajar MySQL - Pengenalan MySQL<h2>Sejarah MySQL</h2>
<p style="text-align: justify;">
<b>MySQL</b> adalah pengembangan lanjutan dari proyek <b>UNIREG</b> yang dikerjakan oleh <b>Michael Monty Widenius</b> dan <b>TcX</b> (perusahaan perangkat lunak asal Swedia). pada tahun 1994 <b>TcX</b> mulai mengembangkan aplikasi berbasis web dengan menggunakan UNIREG sebagai sistem database. Akan tetapi, UNIREG dianggagap tidak cocok untuk database yang dinamis seperti web.</p>
<p style="text-align: justify;">
Kemudian <b>TcX</b> mencari alternatif sistem database lain dan menemukan <i>software</i> yang dikembangkan oleh <b>David Hughes</b>, yaitu <b>miniSQL</b> atau <b>mSQL</b>. Namun, mSQL versi 1 memiliki performa tidak terlalu bagus karena tidak mendukung <i>indexing</i> sehingga belum sesuai dengan kebutuhan <b>TcX</b>.</p>
<p style="text-align: justify;">
Pada akhirnya <b>UNIREG</b> (Michael Monty Widenius), <b>mSQL</b> (David Hughes), dan <b>TcX</b> melakukan Kerjasama yang bertujuan untuk mengembangkan sistem database yang baru, dan pada Tahun 1995 <b>MySQL</b> dirilis dan <b>TcX</b> berubah nama menjadi <b>MySQL AB</b> dengan <b>David Axmark</b>, <b>Michael Widenius</b> dan <b>Allan Larsson</b> sebagai pendirinya.
</p>
<p style="text-align: justify;">
Pada tanggal 16 Januari 2008 <b>Sun Microsystems</b>, Inc melakukan akuisisi terhadap <b>MySQL AB</b> sehingga menjadikan <b>Sun</b> sebagai salah satu perusahaan dengan produk <i>platform open source</i> terbesar seperti <b>Java</b>, <b>OpenSolaris</b> dan <b>MySQL</b>. Namun, pada tanggal 20 April 2009 <b>Oracle</b> melakukan akusisi <b>Sun Microsystems</b>.
</p>
<h2>Apa Itu MySQL</h2>
<p style="text-align: justify;">
MySQL adalah salah satu <b>RDBMS</b> (<i>Relational Database Management System</i>) yang menggunakan perintah <b>SQL</b> (<i>Structured Query Language</i>) dan bersifat <i>Open Source</i>. <b>RDBMS</b> merupakan sebuah <i>software</i> yang dirancang khusus untuk menghubungkan database dengan pengguna agar proses pengelolaan data dapat berjalan dengan baik dengan metode Relasi Database.</p>
<p style="text-align: justify;">
Secara umum, MySQL berfungsi untuk membuat dan mengelola database pada sisi server yang memuat berbagai informasi dengan menggunakan bahasa <b>SQL</b>. Hampir seluruh penyedia hosting atau server web menyediakan fitur MySQL dalam pengembangan aplikasi berbasis web dengan menggunakan <i>interface</i> <b>PHPMyAdmin</b>.
</p>
<h2>Kelebihan MySQL</h2>
<p style="text-align: justify;">
Berikut ini merupakan beberapa kelebihan MySQL diukur dari segi penggunaan dan fitur apa saja yang dimiliki.
</p>
<ul>
<li><b>Tidak Membutuhkan RAM Besar</b></li>
<div style="text-align: justify;">
MySQL dapat di <i>install</i> pada server dengan spesifikasi rendah, dengan server kapasitas 1 GB pun kalian dapat menggunakan <b>MySQL</b>.
</div>
<li><b>Dapat Terintegrasi Dengan Bahasa Pemrograman Lain</b></li>
<div style="text-align: justify;">
MySQL dapat terintegrasi dengan dengan beberapa aplikasi yang banyak digunakan oleh programmer, seperti <b>Java</b>, <b>Python</b>, <b>Perl</b> dan <b>.Net</b>
</div>
<li><b>MySQL sangat populer dalam aplikasi web</b></li>
<li><b>Struktur Tabel yang Fleksibel</b></li>
<div style="text-align: justify;">
Jika dibandingkan dengan DBMS lain seperti <b>Oracle</b> dan <b>PostgreSQL</b>, MySQL memiliki struktur tabel yang fleksibel dan mudah dipakai. Contohnya saat melakukan proses ALTER TABLE.
</div>
</ul>
<br/>
<h2>Kekurangan MySQL</h2>
<p style="text-align: justify;">
Setelah tadi kita mengetahui kelebihan MySQL, sekarang kita perlu tahu juga beberapa kelemahan yang dimiliki oleh MySQL. Sehingga kalian dapat mempertimbangkannya sebelum menggunakan MySQL sebagai DBMS dalam pembuatan aplikasi yang kalian bangun.
</p>
<ul>
<li><b>Sulit Mengelola Skala Data yang Besar</b></li>
<div style="text-align: justify;">
Jika kalian ingin mengembangkan aplikasi dengan skala data yang cukup besar, sebaiknya kalian berfikir ulang untuk menggunakan <b>DBMS</b> <b>MySQL</b>. Karena <b>MySQL</b> dikembangkan agar dapat berjalan pada perangkat yang mempunyai spesifikasi rendah, maka MySQL tidak memiliki fitur yang lengkap seperti DBMS lainnya (<b>Oracle</b> dan <b>PostgreSQL</b>).
</div>
</ul>
<p style="text-align: justify;">
Sekian materi pertama belajar MySQL kali ini, semoga bermanfaat.
</p>cahendihttp://www.blogger.com/profile/08018498600195831981noreply@blogger.com0Tangerang, Tangerang City, Banten, Indonesia-6.1701796 106.6403236-34.480413436178843 71.4840736 22.140054236178845 141.7965736tag:blogger.com,1999:blog-200160053429810035.post-38936583513216130772021-12-01T20:18:00.087+07:002023-08-19T20:31:59.958+07:00Perbandingan Antara Microservices dengan Monolitik<p style="text-align: justify;">Dalam pengembangan perangkat lunak, dua arsitektur utama yang sering dibandingkan adalah "Microservices" dan "Monolitik". Kedua pendekatan ini memiliki kelebihan dan kelemahan masing-masing. Dalam artikel ini, kita akan membandingkan kedua arsitektur ini secara detail, menjelaskan konsepnya dengan bahasa yang dapat dimengerti oleh pemula.</p>
<h2>Arsitektur Monolitik</h2>
<p style="text-align: justify;">Arsitektur Monolitik adalah pendekatan tradisional dalam pengembangan perangkat lunak di mana seluruh aplikasi dikembangkan sebagai satu unit yang terintegrasi. Semua komponen, modul, dan fungsi ada dalam satu kode sumber dan dieksekusi dalam satu proses.</p>
<h5>Kelebihan</h5>
<ul style="text-align: left;">
<li><b>Sederhana</b></li> <p style="text-align: justify;">Monolitik relatif lebih mudah untuk dikembangkan, dideploy, dan diuji karena semuanya ada dalam satu kode basis.</p>
<li><b>Kecepatan Pengembangan Awal</b></li> <p style="text-align: justify;">Dimungkinkan untuk memulai proyek dengan cepat karena tidak ada kerumitan integrasi antar layanan.</p>
<li><b>Manajemen Kesalahan</b></li> <p style="text-align: justify;">Debugging dan pelacakan masalah bisa lebih mudah karena semua komponen ada dalam satu unit.</p>
</ul>
<h5>Kelemahan</h5>
<ul style="text-align: left;">
<li><b>Skalabilitas Terbatas</b></li> <p style="text-align: justify;">Keseluruhan aplikasi harus ditingkatkan, bahkan jika hanya satu bagian yang memerlukan skalabilitas lebih.</p>
<li><b>Ketergantungan Komponen</b></li> <p style="text-align: justify;">Perubahan pada satu komponen dapat memengaruhi yang lain, dan dapat menghasilkan dampak yang tidak diinginkan.</p>
<li><b>Keterbatasan Teknologi</b></li><p style="text-align: justify;">Pilihan teknologi terbatas oleh teknologi yang digunakan dalam monolit.</p>
</ul>
<h2>Arsitektur Microservices</h2>
<p style="text-align: justify;">Arsitektur Microservices adalah pendekatan modern di mana aplikasi dipecah menjadi komponen kecil yang berdiri sendiri, disebut "layanan". Setiap layanan memiliki fungsionalitas unik dan dapat dikembangkan, dideploy, dan diubah secara independen.</p>
<h5>Kelebihan</h5>
<ul style="text-align: left;">
<li><b>Skalabilitas Modular</b></li> <p style="text-align: justify;">Layanan dapat diskalakan secara terpisah sesuai dengan kebutuhan, mengoptimalkan penggunaan sumber daya.</p>
<li><b>Teknologi yang Beragam</b></li> <p style="text-align: justify;">Setiap layanan dapat menggunakan teknologi yang paling sesuai untuk tugasnya.</p>
<li><b>Kemudahan Pengembangan</b></li> <p style="text-align: justify;">Pengembang dapat fokus pada satu layanan tanpa khawatir tentang interaksi dengan komponen lain.</p>
<li><b>Kemampuan untuk Inovasi</b></li> <p style="text-align: justify;">Layanan-layanan baru dapat diperkenalkan atau diubah tanpa memengaruhi yang lain.</p>
</ul>
<h5>Kelemahan</h5>
<ul style="text-align: left;">
<li><b>Kompleksitas Pengelolaan</b></li> <p style="text-align: justify;">Perlu alat pengelolaan untuk memantau, mendeploy, dan mengelola banyak layanan.</p>
<li><b>Pengembangan Awal yang Lambat</b></li> <p style="text-align: justify;">Memerlukan waktu lebih lama untuk membangun infrastruktur dan layanan awal.</p>
<li><b>Pengujian yang Rumit</b></li> <p style="text-align: justify;">Pengujian integrasi antara layanan-layanan ini bisa menjadi kompleks.</p>
<li><b>Overhead Komunikasi</b></li> <p style="text-align: justify;">Komunikasi antar layanan dapat menyebabkan overhead, terutama dalam sistem yang kompleks.</p>
</ul>
<h3>Kesimpulan</h3>
<p style="text-align: justify;">Kesimpulannya, pilihan antara arsitektur Microservices dan Monolitik tergantung pada kebutuhan proyek, skala, dan kompleksitasnya. Arsitektur Monolitik cocok untuk proyek kecil dengan waktu pengembangan yang cepat, sedangkan arsitektur Microservices cocok untuk proyek besar yang memerlukan fleksibilitas dan skalabilitas. Keputusan ini harus dipertimbangkan dengan baik sesuai dengan tujuan dan karakteristik proyek yang dihadapi.</p>cahendihttp://www.blogger.com/profile/08018498600195831981noreply@blogger.com0