Membuat CRUD menggunakan Quarkus + MYSQL

     Quarkus adalah framework aplikasi yang didesain untuk Java virtual machine (JVM) dan native compilation yang cepat dan efisien. Framework ini sangat cocok untuk membangun microservices, terutama untuk lingkungan cloud dan Kubernetes. Quarkus memiliki beberapa keunggulan, di antaranya startup time yang sangat cepat, konsumsi memori yang rendah, dan dukungan untuk GraalVM yang memungkinkan aplikasi Java di-compile menjadi native executables.

Berikut adalah penjelasan singkat tentang beberapa fitur utama Quarkus:

  1. Startup Time yang Cepat: Quarkus dirancang untuk memiliki waktu startup yang sangat cepat, membuatnya ideal untuk aplikasi dengan permintaan tinggi dan aplikasi cloud-native.
  2. Konsumsi Memori yang Rendah: Quarkus mengkonsumsi lebih sedikit memori dibandingkan framework Java tradisional, memungkinkan aplikasi berjalan lebih efisien pada lingkungan dengan sumber daya terbatas.
  3. Dukungan Native Image: Dengan GraalVM, aplikasi Quarkus dapat dikompilasi menjadi native executable, yang berarti aplikasi dapat berjalan tanpa JVM, meningkatkan performa dan efisiensi.
  4. Developer Joy: Quarkus menyediakan fitur seperti live reload, yang memungkinkan pengembang melihat perubahan kode secara langsung tanpa harus me-restart aplikasi, meningkatkan produktivitas.

Cara menginstalll Quarkus menggunakan windows powershell
1. buka windows powershell mengunnakan Run As Administrator  
2. copy paste script dibawah : 
iex "& { $(iwr https://ps.jbang.dev) } trust add https://repo1.maven.org/maven2/io/quarkus/quarkus-cli/"
iex "& { $(iwr https://ps.jbang.dev) } app install --fresh --force quarkus@quarkusio"
3. cek version quarkus yang sudah diinstall : quarkus -version di powershell


Install Quarkus CLI  di Windows menggunakan powershell syntax  dibawah :
iex "& { $(iwr https://ps.jbang.dev) } trust add https://repo1.maven.org/maven2/io/quarkus/quarkus-cli/"
iex "& { $(iwr https://ps.jbang.dev) } app install --fresh --force quarkus@quarkusio"
Install Jbang menggunakan windows powershell :

iex "& { $(iwr https://ps.jbang.dev) } app setup"

Cek version Jbang di windows powershell :  jbang --version 



Install JDK 11 keatas , kalo saya pake JDK 17 dan jangan lupa setting JDK dulu guys :
Download JDK 17 , Klik saja ya. kalo saya pilih Windows x64 Installer.

Untuk memeriksa versi Java yang terinstal di sistem Anda melalui Command Prompt (CMD) di Windows, ikuti langkah-langkah berikut:

Langkah-langkah Memeriksa Versi Java di CMD:

1. Buka Command Prompt:
   - Tekan tombol `Windows + R` untuk membuka dialog Run.
   - Ketik `cmd` dan tekan `Enter` untuk membuka Command Prompt.

2. Jalankan Perintah untuk Memeriksa Versi Java:
   - Di jendela Command Prompt yang terbuka, ketik perintah berikut dan tekan `Enter`:
     ```cmd
     java -version
     ```
3. Interpreting Output:
   - Output akan menampilkan versi Java yang terinstal di sistem Anda. Berikut adalah contoh output yang mungkin Anda lihat:
     ```plaintext
     java version "17.0.1" 2021-10-19 LTS
     Java(TM) SE Runtime Environment (build 17.0.1+12-LTS-39)
     Java HotSpot(TM) 64-Bit Server VM (build 17.0.1+12-LTS-39, mixed mode, sharing)
     ```

Output Penjelasan:

- java version "17.0.1": Menunjukkan bahwa versi Java yang terinstal adalah 17.0.1.
- Java(TM) SE Runtime Environment (build 17.0.1+12-LTS-39)**: Memberikan detail tentang lingkungan runtime Java.
- Java HotSpot(TM) 64-Bit Server VM (build 17.0.1+12-LTS-39, mixed mode, sharing): Memberikan detail tentang JVM yang digunakan.

Jika Anda tidak mendapatkan output yang diharapkan, atau jika perintah `java -version` tidak dikenali, kemungkinan besar Java belum diinstal dengan benar atau PATH sistem belum dikonfigurasi untuk Java.

Memperbarui PATH untuk Java:

Jika Anda perlu menambahkan Java ke PATH, ikuti langkah-langkah ini:

1. Menemukan Lokasi Instalasi Java:
   - Lokasi default biasanya adalah `C:\Program Files\Java\jdk-17\bin` (atau versi yang sesuai).

2. Menambahkan Java ke PATH:
   - Klik kanan pada `This PC` atau `Computer` di desktop atau File Explorer.
   - Pilih `Properties`.
   - Klik `Advanced system settings`.
   - Di tab `Advanced`, klik `Environment Variables`.
   - Di bawah `System variables`, cari variabel `Path`, pilih, dan klik `Edit`.
   - Klik `New` dan tambahkan path ke direktori `bin` dari instalasi JDK, misalnya:
     ```plaintext
     C:\Program Files\Java\jdk-17\bin
     ```
   - Klik `OK` untuk menyimpan perubahan.

3. Restart Command Prompt:
   - Tutup dan buka kembali Command Prompt.
   - Jalankan kembali perintah `java -version` untuk memverifikasi.

Dengan langkah-langkah di atas, Anda seharusnya dapat memeriksa versi Java yang terinstal dan memastikan bahwa Java diatur dengan benar di PATH sistem Anda.

Kemudian yakin kan maven plugin yang digunakan sesuai platform yang kita buat:
kalo saya pake maven 3.9.7 , silahkan download dan extract dulu guys di bagian program files teman2 dan jangan lupa di setting dulu Environment Variables nya

Extract Maven:
ekstark dulu guys dowloaded zip file nya seperti contoh direktori berikut  C:\Program Files\Apache\Maven.

Set Environment Variables:

  1. Buka Menu Start, search for "Environment Variables", dan select "Edit the system environment variables".
  2. Dalam System Properties window, Jangan lupa klik "Environment Variables" button.
  3. Dibawah "System variables", klik"New" dan tambahkan M2_HOME dengan nilai Maven directory kamu ya, contoh  C:\Program Files\Apache\Maven\apache-maven-3.9.7.
  4. Temukan dan  select Path variabel, kemudian klik "Edit". tambahkan Maven bin directory to the PATH, e.g., C:\Program Files\Apache\Maven\apache-maven-3.9.7\bin.

Verify Maven Installation:
buka terminal baru dan Run :
bash:
        mvn -version
You should see output indicating the Maven version.


Oke Lanjut Guys

Kita Langsung membuat CRUD menggunakan QUARKUS+MYSQL

1. Setup Project di VS CODE: Buat proyek baru menggunakan Quarkus CLI dan buka power shell : 

quarkus create app code-with-quarkus
 cd code-with-quarkus

atau bisa juga build proyek baru aplikasi menggunakan alamat berikut secara online samahalnya dengan springboot guys :


nah tinggal dimasukkan saja dependency yang dibutuhkan : 

2. Tambahkan Dependency untuk Hibernate dan RESTEasy: Tambahkan dependencies berikut di file pom.xml:
<dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-hibernate-orm-panache</artifactId> </dependency> <dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-resteasy</artifactId> </dependency> <dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-resteasy-jackson</artifactId> </dependency> <dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-jdbc-mysql</artifactId> </dependency>

-------------------------------------------------------------

Kalo kode pom.xml saya seperti ini :
<?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>
    <groupId>org.perconaan.code</groupId>
    <artifactId>code-with-quarkus</artifactId>
    <version>1.0.0-SNAPSHOT</version>

    <properties>
        <compiler-plugin.version>3.12.1</compiler-plugin.version>
        <maven.compiler.release>17</maven.compiler.release>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <quarkus.platform.artifact-id>quarkus-bom</quarkus.platform.artifact-id>
        <quarkus.platform.group-id>io.quarkus.platform</quarkus.platform.group-id>
        <quarkus.platform.version>3.11.1</quarkus.platform.version>
        <skipITs>true</skipITs>
        <surefire-plugin.version>3.2.5</surefire-plugin.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>${quarkus.platform.group-id}</groupId>
                <artifactId>${quarkus.platform.artifact-id}</artifactId>
                <version>${quarkus.platform.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>
        <dependency>
            <groupId>io.quarkus</groupId>
            <artifactId>quarkus-hibernate-orm-panache</artifactId>
        </dependency>
        <dependency>
            <groupId>io.quarkus</groupId>
            <artifactId>quarkus-resteasy</artifactId>
        </dependency>
        <dependency>
            <groupId>io.quarkus</groupId>
            <artifactId>quarkus-resteasy-jackson</artifactId>
        </dependency>
        <dependency>
            <groupId>io.quarkus</groupId>
            <artifactId>quarkus-jdbc-mysql</artifactId>
        </dependency>
        <dependency>
            <groupId>io.quarkus</groupId>
            <artifactId>quarkus-arc</artifactId>
        </dependency>
        <dependency>
            <groupId>io.quarkus</groupId>
            <artifactId>quarkus-hibernate-orm</artifactId>
        </dependency>
        <dependency>
            <groupId>io.quarkus</groupId>
            <artifactId>quarkus-junit5</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>io.rest-assured</groupId>
            <artifactId>rest-assured</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>${quarkus.platform.group-id}</groupId>
                <artifactId>quarkus-maven-plugin</artifactId>
                <version>${quarkus.platform.version}</version>
                <extensions>true</extensions>
                <executions>
                    <execution>
                        <goals>
                            <goal>build</goal>
                            <goal>generate-code</goal>
                            <goal>generate-code-tests</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>${compiler-plugin.version}</version>
                <configuration>
                    <compilerArgs>
                        <arg>-parameters</arg>
                    </compilerArgs>
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>${surefire-plugin.version}</version>
                <configuration>
                    <systemPropertyVariables>
                        <java.util.logging.manager>org.jboss.logmanager.LogManager</java.util.logging.manager>
                        <maven.home>${maven.home}</maven.home>
                    </systemPropertyVariables>
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-failsafe-plugin</artifactId>
                <version>${surefire-plugin.version}</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>integration-test</goal>
                            <goal>verify</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <systemPropertyVariables>
                        <native.image.path>${project.build.directory}/${project.build.finalName}-runner</native.image.path>
                        <java.util.logging.manager>org.jboss.logmanager.LogManager</java.util.logging.manager>
                        <maven.home>${maven.home}</maven.home>
                    </systemPropertyVariables>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <profiles>
        <profile>
            <id>native</id>
            <activation>
                <property>
                    <name>native</name>
                </property>
            </activation>
            <properties>
                <skipITs>false</skipITs>
                <quarkus.native.enabled>true</quarkus.native.enabled>
            </properties>
        </profile>
    </profiles>
</project>

3. Konfigurasi Database: Tambahkan konfigurasi database di file application.properties:
properties :
# Configure the HTTP port for Quarkus
quarkus.http.port=9090

# Database configuration
quarkus.datasource.db-kind=mysql
quarkus.datasource.username=javadeveloper
quarkus.datasource.password=joko24051992
quarkus.datasource.jdbc.url=jdbc:mysql://localhost:3306/testdb

# Hibernate ORM
quarkus.hibernate-orm.database.generation=update
quarkus.hibernate-orm.log.sql=true

# Pooling configuration
quarkus.datasource.jdbc.max-size=8
quarkus.datasource.jdbc.min-size=2


4. Perhatikan struktur project anda :

4. Buat Entitas Item: Buat kelas Item di package org.perconaan.code:

package org.perconaan.code;

import io.quarkus.hibernate.orm.panache.PanacheEntity;
import jakarta.persistence.Entity;


/**
 * Example JPA entity defined as a Panache Entity.
 * An ID field of Long type is provided, if you want to define your own ID field extends <code>PanacheEntityBase</code> instead.
 *
 * This uses the active record pattern, you can also use the repository pattern instead:
 * .
 *
 * Usage (more example on the documentation)
 *
 * {@code
 *     public void doSomething() {
 *         MyEntity entity1 = new MyEntity();
 *         entity1.field = "field-1";
 *         entity1.persist();
 *
 *         List<MyEntity> entities = MyEntity.listAll();
 *     }
 * }
 */
@Entity
public class Item  extends PanacheEntity {
    public String name;
    public int quantity;
    public double price;
    public double total;

    public void calculateTotal() {
        this.total = this.quantity * this.price;
    }
}


5. Buat Resource untuk CRUD: Buat kelas ItemResource di package org.perconaan.code:
package org.perconaan.code;

import java.util.List;

import jakarta.transaction.Transactional;
import jakarta.ws.rs.*;
import jakarta.ws.rs.core.MediaType;
import jakarta.ws.rs.core.Response;

@Path("/items")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public class ItemResource  {

    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String hello() {
        return "Hello RESTEasy";
    }

    @GET
    public List<Item> getAllItems() {
        return Item.listAll();
    }

    @GET
    @Path("/{id}")
    public Item getItem(@PathParam("id") Long id) {
        return Item.findById(id);
    }

    @POST
    @Transactional
    public Response createItem(Item item) {
        item.calculateTotal();
        item.persist();
        return Response.status(Response.Status.CREATED).entity(item).build();
    }

    @PUT
    @Path("/{id}")
    @Transactional
    public Item updateItem(@PathParam("id") Long id, Item item) {
        Item entity = Item.findById(id);
        if (entity == null) {
            throw new WebApplicationException("Item with id " + id + " does not exist.", Response.Status.NOT_FOUND);
        }
        entity.name = item.name;
        entity.quantity = item.quantity;
        entity.price = item.price;
        entity.calculateTotal();
        entity.persist();
        return entity;
    }

    @DELETE
    @Path("/{id}")
    @Transactional
    public Response deleteItem(@PathParam("id") Long id) {
        Item entity = Item.findById(id);
        if (entity == null) {
            throw new WebApplicationException("Item with id " + id + " does not exist.", Response.Status.NOT_FOUND);
        }
        entity.delete();
        return Response.noContent().build();
    }
}



6. Jalankan Aplikasi: Jalankan aplikasi dengan perintah:

Running program di directory progrm kita menggunakan bash/powershell/cmd :

./mvnw compile quarkus:dev

jika berhasil maka akan tampil seperti berikut :


Testing menggunakan PostMan :

Methode POST : http://localhost:9090/items
Methode GET : http://localhost:9090/items/1
Methode PUT : http://localhost:9090/items/1
Methode DELETE : http://localhost:9090/items/1

POST
 POST

GET
GET

PUT
PUT

DELETE
DELETE


DATABASE MYSQL

POST
GET

PUT

Comments

Popular posts from this blog

create image slider using phyton in web

Tahukah kamu Algoritma Genetika dan Penerapannya dalam Industri

create animated futuristic profile card using html+css+js

CRUD SPRING REACTIVE WEBFLUX +Mongo DB

Top 7 Digital Transformation Companies

100 perusahaan perangkat lunak (software) populer dari Eropa dan Amerika yang memiliki kehadiran atau operasional di Indonesia.

TOP 8 Framework Populer menggunakan bahasa .NET

Python Date and Time Manipulation

TOP 5 Trends Programming 2024

Daftar Kata Kunci (Keyword) dalam Bahasa Pemrograman Python