{"id":21428030,"url":"https://github.com/redhat-developer-demos/quarkus-crud-mssql","last_synced_at":"2026-01-02T17:54:17.601Z","repository":{"id":91531548,"uuid":"553480030","full_name":"redhat-developer-demos/quarkus-crud-mssql","owner":"redhat-developer-demos","description":null,"archived":false,"fork":false,"pushed_at":"2025-01-16T08:26:18.000Z","size":229,"stargazers_count":2,"open_issues_count":1,"forks_count":2,"subscribers_count":7,"default_branch":"main","last_synced_at":"2025-01-16T09:56:03.297Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/redhat-developer-demos.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-10-18T09:26:39.000Z","updated_at":"2025-01-16T08:26:20.000Z","dependencies_parsed_at":null,"dependency_job_id":"3d5bf3a8-6c3f-4b2b-ba71-1811ef1f16ba","html_url":"https://github.com/redhat-developer-demos/quarkus-crud-mssql","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/redhat-developer-demos%2Fquarkus-crud-mssql","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/redhat-developer-demos%2Fquarkus-crud-mssql/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/redhat-developer-demos%2Fquarkus-crud-mssql/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/redhat-developer-demos%2Fquarkus-crud-mssql/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/redhat-developer-demos","download_url":"https://codeload.github.com/redhat-developer-demos/quarkus-crud-mssql/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243933973,"owners_count":20371102,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-22T22:09:48.301Z","updated_at":"2026-01-02T17:54:17.558Z","avatar_url":"https://github.com/redhat-developer-demos.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n# Developing Quarkus App consuming Microsoft SQL Server running on Red Hat Enterprise Linux\n\n![](https://lh4.googleusercontent.com/LR2qID0eSPLTJKIBoRVLoQReo61KGWLlxot4PXxNOkgaB9rL06aktF5QAk8SjsXpWd9Ii1C6uA3fQQL5iGK-Ob6S2UK0aHLe0yvSl4voBOyMP78WVReMrC3Y50woojss1VBinmgyJPszu10glH41am_-S3UVb_XzQmSgdO0tfaKCJX_dLojXSs8)\n\n  \n  \n\n### Introduction\n\nModern businesses need a solid data platform to quickly process large volumes of data and meet\n\ngrowing operational and analytical workloads. Microsoft SQL Server on Red Hat Enterprise Linux offers businesses additional flexibility, superior performance, enhanced security, and ultra-high availability. This combination provides a scalable foundation with a consistent application experience, whether deployed across bare-metal, virtual machine, container, or cloud environments.\n\n  \n\nIn this blog post, you will be learning how to implement [Quarkus](https://developers.redhat.com/products/quarkus/getting-started) application running on RHEL Podman container engine which implements CRUD API functionality by connecting to Microsoft SQL Server database running on Red Hat Enterprise Linux.\n\n  \n\n### Pre-requisites\n\n  \n\n-   RHEL9 (or RHEL8) installed on your local system.\n    \n-   [Open JDK 11](https://access.redhat.com/documentation/en-us/openjdk/11/html/installing_and_using_openjdk_11_on_rhel/installing-openjdk11-on-rhel8).\n    \n-   [Quarkus 2.1+](https://quarkus.io/get-started/).\n    \n-   [Quarkus CLI](https://quarkus.io/guides/cli-tooling).\n    \n-   [Maven](https://tecadmin.net/install-apache-maven-on-centos/).\n    \n-   [Podman](https://podman.io/getting-started/installation).\n    \n\n  \n\n### Table of content:\n\n  \n\n1. Microsoft SQL serverInstalltion \u0026 Setup\n\n    1.1. Install Microsoft SQL Server\n\n   1.2. Installation of Microsoft SQL CLI tool\n\n   1.3. Connect Database locally\n\n  \n\n2. Quarkus Application setup\n\n   2.1. Quarkus Introduction.\n\n   2.2. Qurkus Project Create.\n\n   2.3. CRUD Application Flow Diagram.\n\n  \n\n3. Quarkus App API Connectivity with Database\n\n   3.1. Person.java \u0026 Person.java files add\n\n   3.2. Application.properties file\n\n   3.3. Run the application\n\n  \n\n4. Containerise the Quarkus App using Podman.\n\n   4.1 building dockerfile\n\n   4.2 Run quarkus container\n\n   4.3 TEST\n\n  \n\n5. Summary\n\n  \n\n6. Reference links\n  \n\n## 1. Microsoft SQL Server Installation \u0026 Setup\n    \n\nTo begin with install Microsoft SQL Server on RHEL (locally), here are the steps to do it.\n\n  \n  \n\n### 1.1. Install Microsoft SQL Server\n\n  \n\n1.  Download SQL Server 2022 Preview Red Hat repository configuration file.\n    \n\n  \n\n``` sudo curl -o /etc/yum.repos.d/mssql-server.repo https://packages.microsoft.com/config/rhel/8/mssql-server-preview.repo ```\n\n  \n\n2.  Install MSsql server.\n    \n\n  \n\n```sudo yum install -y mssql-server ```\n\n  \n\n3.  MSsql-conf setup using its full path and follow the prompts to set the SA password and choose your edition.\n    \n\n  \n\n``` sudo /opt/mssql/bin/mssql-conf setup```\n\n  \n\n4.  Verify whether the MSsql service is running or not.\n    \n\n  \n\n``` systemctl status mssql-server ```\n\n  \n\n5.  open the SQL Server port on the RHEL firewall. The default SQL Server port is TCP 1433. If you're using FirewallD for your firewall.\n    \n\n  \n\n```sudo firewall-cmd --zone=public --add-port=1433/tcp --permanent  ```\n```sudo firewall-cmd --reload```\n\nSQL Server is now running on your RHEL machine and is ready to use!\n\n  \n\n### 1.2. Installation of Microsoft SQL CLI tool\n\n  \n\nThe following steps are to install the SQL Server command line tool that is an [sqlcmd](https://learn.microsoft.com/en-us/sql/tools/sqlcmd-utility?view=sql-server-ver16).\n\n1. Download the Red Hat repository configuration file.\n\n  \n\n```sudo curl -o /etc/yum.repos.d/msprod.repo https://packages.microsoft.com/config/rhel/8/prod.repo```\n\n  \n\n2.Install mssql-tools with the unixODBC developer package\n\n  \n\n```sudo yum install -y mssql-tools unixODBC-devel```\n\n  \n\n3. add /opt/mssql-tools/bin/ to your PATH environment variable, to make sqlcmd or bcp accessible from the bash shell. Modify the PATH environment variable in your ~/.bash_profile file with the following command:\n\n  \n\n```echo 'export PATH=\"$PATH:/opt/mssql-tools/bin\"' \u003e\u003e ~/.bash_profile```\n\nFor non-interactive sessions, modify the PATH environment variable in your ~/.bashrc file with the following command:\n\n```echo 'export PATH=\"$PATH:/opt/mssql-tools/bin\"' \u003e\u003e ~/.bashrc  ```\n```source ~/.bashrc```\n\n  \n  \n\n## 1.3. Connect to Database locally\n\n1.  Run the sqlcmd with parameters for your SQL Server IP/name (-S), username (-U), and password (-P). In this tutorial, you are connecting locally, so the server name is localhost. The user name is sa and the password is the one you provided for the SA account during setup.\n    \n\n  \n\n```sqlcmd -S localhost -U sa -P '\u003cYourPassword\u003e' ```\n\n  \n\n2.  Create a new Database\n    \n\n``` CREATE DATABASE TestDB; ```\n\n  \n\n3.  write a query to return the name of all of the databases on the server.\n    \n\n``` SELECT Name from sys.databases; ```\n\n  \n\n4.  To execute the above 2 queries write GO\n    \n\n```GO```\n\n  \n  \n\n## 2. Quarkus Application Setup\n\n### 2.1. Quarkus Introduction\n\nQuarkus was invented to enable Java developers to create applications for a modern, cloud-native world. Quarkus is a Kubernetes-native Java framework tailored for GraalVM and HotSpot, crafted from best-of-breed Java libraries and standards. The goal is to make Java the leading platform in Kubernetes and serverless environments while offering developers a framework to address a wider range of distributed application architectures.\n\n![](https://lh4.googleusercontent.com/fbuLYN-7f0_biylORqajOIuWRRnIWuVqTMjVIGprjdMbJYHt0eCfb2qddyZfourTanduLpSH9vXXU_sGMto-0-845mP4kvzu28ztMNDGTigqFz3NaW81VCpW3Icg6O_r9cbrUVriNsp4VTVhCs6OR3QodmVW3ac8K-HVvYAJ-2_5AxKkecwJJczi)\n\n  \n\n### 2.2. Qurkus Project Create.\n\nNow let’s create quarkus project with help of quarkus cli.\n\nquarkus create app org.acme:quarkus-crud-app --extension=agroal,resteasy-reactive, quarkus-hibernate-orm-panache,quarkus-resteasy-jsonb ,quarkus-jdbc-mssql\n\n  \n\nAfter running the above command one ‘quarkus-crud-app’ directory may be created \u0026 you can see a lot of line print on your terminal.\n\n  \n\nAlso, we have added a few extensions which we required during our crud application.\n\n  \n\nAs per our CRUD Application requirement, we have to create GET, POST, PUT, and DELETE API from our Microsoft SQL database. For that, we need to consider one variable which would be ‘Person’.\n\n  \n\n### 2.3. CRUD Application Flow Diagram\n\n  \n  \n  \n\n![](https://lh3.googleusercontent.com/4DAel_R4Nh1NcnC4UMDcXUjVYSct7i7H_RIete7eZZlayvzJyRcyar8GrWORAOdbeRwPMbMPd2EgPgqxoNZkBrN60GtbuJiB1KmfLr-1T74AcD5taHcJjK3cSAYYKmgenELK0LVll5-FlswkTJEJNMly6RsIzY_meqk8LjBhXeTzLPhK4m4xH94a)\n\n  \n\n## 3. Quarkus App API Connectivity with Database\n\nYou can find the source code with instructions used in this blog post in this [GitHub](https://github.com/redhat-developer-demos/quarkus-crud-mssql) repository\n\n### 3.1. Person.java \u0026 Person.java files add\n\n  \n\nLet’s call that entity Person, so you’re going to create a Person.java file. at ‘/quarkus-crud-app/src/main/java/org/acme/Person.java’ location.\n\n```\npackage org.acme;  \n  \nimport javax.persistence.Column;  \nimport javax.persistence.Entity;  \n  \nimport io.quarkus.hibernate.orm.panache.PanacheEntity;  \n  \n@Entity  \npublic class  Person  extends  PanacheEntity {  \n@Column(name=\"first_name\")  \npublic String firstName;  \n  \n@Column(name=\"last_name\")  \npublic String lastName;  \n  \npublic String salutation;  \n}\n```\n  \n\nThe second file we need to create is a PersonResponce.java at ‘/quarkus-crud-app/src/main/java/\n\norg/acme/PersonResponce.java’ location in this file we import multiple packages which are required during our api functionality. And in this file we include GET, POST, PUT and DELETE API.\n\n  \n```\npackage org.acme;  \n  \nimport java.util.List;  \n  \nimport javax.transaction.Transactional;  \nimport javax.ws.rs.Consumes;  \nimport javax.ws.rs.GET;  \nimport javax.ws.rs.POST;  \nimport javax.ws.rs.PUT;  \nimport javax.ws.rs.DELETE;  \nimport javax.ws.rs.Path;  \nimport javax.ws.rs.PathParam;  \nimport javax.ws.rs.Produces;  \nimport javax.ws.rs.WebApplicationException;  \nimport javax.ws.rs.core.MediaType;  \nimport javax.ws.rs.core.Response;  \n  \nimport io.quarkus.panache.common.Sort;  \n  \n@Path(\"/person\")  \n@Consumes(MediaType.APPLICATION_JSON)  \n@Produces(MediaType.APPLICATION_JSON)  \npublic  class  PersonResource {  \n  \n@GET  \npublic List\u003cPerson\u003e getAll() throws Exception {  \nreturn Person.findAll(Sort.ascending(\"last_name\")).list();  \n}  \n  \n  \n@POST  \n@Transactional  \npublic Response create(Person p) {  \nif (p == null || p.id != null)  \nthrow new WebApplicationException(\"id != null\");  \np.persist();  \nreturn Response.ok(p).status(200).build();  \n}  \n  \n  \n  \n@PUT  \n@Transactional  \n@Path(\"/{id}\")  \npublic Person update(@PathParam(\"id\")  Long id, Person p) {  \nPerson entity = Person.findById(id);  \nif (entity == null) {  \nthrow new WebApplicationException(\"Person with id of \" + id + \" does not exist.\", 404);  \n}  \nif(p.salutation != null ) entity.salutation = p.salutation;  \nif(p.firstName != null ) entity.firstName = p.firstName;  \nif(p.lastName != null) entity.lastName = p.lastName;  \nreturn entity;  \n}  \n  \n@DELETE  \n@Path(\"/{id}\")  \n@Transactional  \npublic Response delete(@PathParam(\"id\")  Long id) {  \nPerson entity = Person.findById(id);  \nif (entity == null) {  \nthrow new WebApplicationException(\"Person with id of \" + id + \" does not exist.\", 404);  \n}  \nentity.delete();  \nreturn Response.status(204).build();  \n}  \n}\n```\n  \n\n### 3.2. Application.properties file\n\nApplication.properties is a configuration/environment file of our application in which we add multiple parameters to connect with the Microsoft SQL database from quarks application like username, password, endpoint, size, encrypted-connection, etc.,\n\n  \n```\nquarkus.datasource.db-kind=mssql  \nquarkus.datasource.username=sa  \nquarkus.datasource.password=123@Nagesh  \nquarkus.datasource.jdbc.driver=com.microsoft.sqlserver.jdbc.SQLServerDriver  \nquarkus.datasource.jdbc.url=jdbc:sqlserver://127.0.0.1:1433;databaseName=TestDB;integratedSecurity=false;encrypt=false;trustServerCertificate=true;  \nquarkus.datasource.jdbc.max-size=16  \nquarkus.hibernate-orm.scripts.generation=drop-and-create  \nquarkus.hibernate-orm.scripts.generation.create-target=import.sql  \n  \nquarkus.hibernate-orm.log.format-sql=true  \nquarkus.hibernate-orm.log.sql=true  \nquarkus.hibernate-orm.sql-load-script=import.sql  \nquarkus.datasource.users.new-connection-sql=CREATE TABLE IF NOT EXISTS Person (id int8 not null, first_name varchar(255),last_name varchar(255),salutation varchar(255), PRIMARY KEY ( id ))  \n  ```\n\n  \n\nFollowing is a snapshot of quarkus project directory.\n\n  \n\n![](https://lh5.googleusercontent.com/GPztNCaEAqnFGvpWuIa90kp03mQSgcNJGrQc0x-Z4_SjUM8esqUagRpZeUsOIUWNYhEDmNj2ML05aricbV4hYXKh6zvhCokJArfSdIbaU4BO1XaIjbne5-yvnixmh7q8iLQk7k65YA5KeW4kzRcFvvUiiiDHRwMqJ9b92P2PM2UPT1EWE3Dr8_jx)\n\n  \n  \n\n### 3.3. Run the application\n\nTo run quarkus application you have to first check out on application folder which is a quarkus-crud-app\n\n  \n\n```cd quarkus-crud-app```\n\n  \n\nAfter this, you have to run a command with help of quarkus CLI\n\n  \n\n```qurkus dev```\n\n![](https://lh4.googleusercontent.com/2OC0Zpl0n1QI2_M5VkGh3G2TS2dZwK95zY_wPcmKEzGGCLF90QA2jFYZpHQ4bURiA0IwNGVdbCJkvjw-FJepwoEumxOtGKayWdRZQZPBqFf8ZnroJoZrEvKkzoIR_8R5ZaN18j1Rm_oxpnw7d7zd6T8jLdgfEZ1r2mXELZoxZEYpMzmwKhYCRtWD)\n\n  \n  \n\nNow open your browser, type the following URL \u0026 check whether your application is running or not.\n\n```[http://localhost:8080](http://localhost:8080)```\n\n![](https://lh4.googleusercontent.com/Iy1Ttyb8WPuQNKsDs4unwStPwAp4mjef5dZ3UuSlD-aUY-zZ9T0IjK1te-Stq6UIGgG7OC67cftk6YTPsbczEIGuyuKOqFJcsWBRcLtQJ2Q9ZA6CKwatWc22VEiaEc3xQeDUIY4L101l7l0OAsATVMLu25tItHH0dTegoAxpnNShXuBjxb8lN8pu)\n\n  \n\nWhen the webpage successfully arrives on the browser we need to check if the API’ are working or not.\n\n### List a new person\n\n```http :8080/person```\n\n  \n\n![](https://lh4.googleusercontent.com/mgQ6tjRjQgUME5Du1CJDcsxOOMGuJxBNvbHKwjlEY65zLSeHG5X4cjcnoAbmStukT8krEdL8GS30prx0txjXxp4ChB8x3pWObs9HwGvY_13U5U5qVVsOUvzeAnbwb--CQoPSiHHiKwxwNvf49U4dsVwJeJUC0aikyzzw7xJWlqLpwe0q2nCkDMf5)\n\n  \n\n### Create a new person\n\n```http POST :8080/person firstName=Carlos lastName=Santana salutation=Mr```\n\n![](https://lh5.googleusercontent.com/1jKQXwVqSJGQVUUlnyILGGt8KIJL1oIwKMKAAmIISeHpGwq4hf9km0iPAe-dTvhyRh-P4TKziVzarwcU4Foux_E8VhjENoYNtMQHvBaWynd3S_JIlPJA8QLV0llt68jWzaPcecIeU6IXLRoMQpwK8gtdie6IfJ3qNahmToTTLo-TOK4S7qjDdGjF)\n\n  \n  \n\n### Updating an existing person\n\n```http PUT :8080/person/9 firstName=Jimi lastName=Hendrix```\n\n![](https://lh5.googleusercontent.com/y4gJRSA9iDCIjDerMC_dR_1L3bdmNmGpeD3qB4lfNp8D8ZzexE56CabaXnp9OHsrIZo3o56nPsYrbnTcazfj7HcnlUkHN3JeVQoV-zNNi55LWbaM6wieu8FbK0lTTGmxeyLjhNJcusKZeYA7MVBX-03fWuESOa44wy5Do8P-excA-3DRFAEi9Bu9)\n\n  \n  \n  \n  \n  \n  \n  \n  \n\n### Deleting an existing person\n\n```http DELETE :8080/person/9```\n\n  \n\n![](https://lh3.googleusercontent.com/5iifGwdnmtroE1WmCQsC_rRW3PpQ-4P3pooNP4oLiuJYc0Kt_fmuuyyRIFqFdBC72oHj48AANbr0dgFYAsulj57egB6FB1FCxbU2YEm5DdtTpO81K9maGquELmw687y7XLxFMv5rQZykr6qBr05pAm-jkbIvyu9oOxuWRyq7d9YGmM-2Ah8Fa80u)\n\n  \n\nNow with help of API we created, deleted \u0026 updated the database. To check all changes are reflected in the database we have to cross-verify. For that Please follow the below steps.\n\n  \n\nFirst, we need to login into the Microsoft SQL database. For that, we need to use sqlcmd. please run the following command:\n\n```sqlcmd -S localhost -U sa -P '\u003cYourPassword\u003e'```\n\n  \n\nNow select the sample database which we created earlier.\n\n```USE TestDB  ```\n```GO```\n\n  \n\nList the data from our collection for that run the following command to  list  all  data.\n\n```SELECT * FROM Person  ```\n```GO```\n\n  \n  \n  \n  \n  \n  \n  \n\nAfter running the above command you will get the following result in your terminal.\n\n![](https://lh4.googleusercontent.com/xT2NAdYyE_-5EoKhdmHa8P1yFUkIPf4xIveePGQW5dduq3eTKkmeKkfnfx8h1vS5pKfA_MtfUg5ObY9zvPXuGYso0odIQ7N18ZWk_CQtslU81YQKKqhemGyEPSKnXNZGfUkF2SYI4efrqF5Fk2Kbn23SHHG_-ULX_zdvoR5mbRQ2jdEX6x2xrg2N)\n\n  \n  \n  \n\n### 4. Containerise the Quarkus App using Podman\n\n  \n\nWith the help of podman, we will containerize the quarkus application so that it becomes more portable and ready to be deployed on Kubernetes (OpenShift).\n\nFor that, we need to first create an image of it. Before creating a container image, we need to run one maven command which creates all the dependency files we want while creating the image.\n\n  \n\n```./mvnw package```\n\n  \n\nThis Dockerfile is used to build a container that runs the Quarkus application in JVM mode. You can also build in native,native-micro, and legacy-jar as per your requirement.\n\n  \n\nQuarkus provide us with multiple Dockerfiles with their location of it:\n\n  \n\n├── mvnw\n\n├── mvnw.cmd\n\n├── pom.xml\n\n├── README.md\n\n├── src\n\n│ ├── main\n\n│ │ ├── docker\n\n│ │ │ ├── Dockerfile.jvm\n\n│ │ │ ├── Dockerfile.legacy-jar\n\n│ │ │ ├── Dockerfile.native\n\n│ │ │ └── Dockerfile.native-micro\n\n  \n\nTo build a podman image, you have to run the following command.\n\n  \n\n### 4.1. building dockerfile\n\nNow build the container image with help of podman\n\n```podman build -f src/main/docker/Dockerfile.jvm -t quarkus/quarks-crud-app .```\n\n  \n\n### 4.2. Run Quarkus container\n\nNow run the container with help of podman run command on port 8080. We are taking the help of the host network for that add --network=host  [link](https://www.metricfire.com/blog/what-is-docker-network-host/#:~:text=Docker%20network%20host%2C%20also%20known,(e.g.%2C%20port%2080).).\n\n```podman run -it -p 8080:8080 --network=host quarkus/quarks-crud-app```\n\n  \n\n![](https://lh3.googleusercontent.com/1h5dLuSTS4AjTMb3dYdXDMlFjSxQFG-ObS_NHH02lUsRq8qDUtXn6JN2QwtvHQVpsWJ45XOQunE1T1P_qwjq5b367QYgtQCYnkFyhKtbH67QY3AWT1IaerbQ-ftW9tQsQmpaSOHlyFA22HrR7UNFW3aE72L490TtR1g7FlSWnaCvabmZI6uAUuUJ)\n\n  \n\nAs we tested all the API above we have to test it again after containerization like GET. POST, PUT, and DELETE.\n\n  \n\n```GET: http :8080/person  ```\n  \n```POST: http POST :8080/person firstName=Carlos lastName=Santana salutation=Mr  ```\n  \n```PUT: http PUT :8080/person/1 firstName=Jimi lastName=Hendrix  ```\n  \n```DELETE: http DELETE :8080/person/1```\n\n  \n  \n  \n  \n\n### 5. Summary\n    \n\nUsing Quarkus dramatically reduces the lines of code you have to write. As you have seen, creating a simple REST CRUD service is just a piece of cake. If you then want to move your app to Kubernetes, it’s just a matter of adding another extension to the build process.\n\nThanks to the Dev Services, you’re even able to do fast prototyping without worrying to install 3rd party apps like databases.\n\nMinimizing the amount of boilerplate code makes your app easier to maintain – and lets you focus on what you have to do implementing the business case.\n\nThis is why I fell in love with Quarkus.\n\n6.  ### Reference link:\n    \n\n-   [https://github.com/nageshredhat/quarkus-crud-mssql-](https://github.com/nageshredhat/quarkus-crud-mssql-)\n    \n-   [https://www.opensourcerers.org/2021/12/20/how-to-quickly-create-a-crud-service-with-quarkus/](https://www.opensourcerers.org/2021/12/20/how-to-quickly-create-a-crud-service-with-quarkus/)\n    \n-   [https://github.com/nageshredhat/quarkus-crud-mssql-](https://github.com/nageshredhat/quarkus-crud-mssql-)\n    \n-   [https://learn.microsoft.com/en-us/sql/linux/quickstart-install-connect-red-hat?view=sql-server-ver16](https://learn.microsoft.com/en-us/sql/linux/quickstart-install-connect-red-hat?view=sql-server-ver16)\n    \n-   [https://quarkus.io/guides/getting-started](https://quarkus.io/guides/getting-started)\n    \n-   [https://medium.com/javarevisited/a-very-simple-crud-with-quarkus-7b066c9c44e8](https://medium.com/javarevisited/a-very-simple-crud-with-quarkus-7b066c9c44e8)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fredhat-developer-demos%2Fquarkus-crud-mssql","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fredhat-developer-demos%2Fquarkus-crud-mssql","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fredhat-developer-demos%2Fquarkus-crud-mssql/lists"}