<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Prashant Thorat</title>
    <description>The latest articles on DEV Community by Prashant Thorat (@prashant_thorat_bd80693bf).</description>
    <link>https://dev.to/prashant_thorat_bd80693bf</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3437425%2F47eebc0f-7a0d-4324-a35c-ad6616c4b2a5.jpg</url>
      <title>DEV Community: Prashant Thorat</title>
      <link>https://dev.to/prashant_thorat_bd80693bf</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/prashant_thorat_bd80693bf"/>
    <language>en</language>
    <item>
      <title>Stop Writing CRUD Screens in Spring Boot</title>
      <dc:creator>Prashant Thorat</dc:creator>
      <pubDate>Fri, 05 Jun 2026 11:05:02 +0000</pubDate>
      <link>https://dev.to/prashant_thorat_bd80693bf/stop-writing-crud-screens-in-spring-boot-4261</link>
      <guid>https://dev.to/prashant_thorat_bd80693bf/stop-writing-crud-screens-in-spring-boot-4261</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0u6k0gxtdwhjwogtv8im.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0u6k0gxtdwhjwogtv8im.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Every Spring Boot project seems to start the same way.&lt;/p&gt;

&lt;p&gt;You create a few JPA entities:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nd"&gt;@Entity&lt;/span&gt;
&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Customer&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;

    &lt;span class="nd"&gt;@Id&lt;/span&gt;
    &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;Long&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

    &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;firstName&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

    &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;lastName&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

    &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;email&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then you create repositories:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;interface&lt;/span&gt; &lt;span class="nc"&gt;CustomerRepository&lt;/span&gt;
        &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;JpaRepository&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Customer&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;Long&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And then the real work begins.&lt;/p&gt;

&lt;p&gt;You spend days building:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tables&lt;/li&gt;
&lt;li&gt;Search screens&lt;/li&gt;
&lt;li&gt;Create forms&lt;/li&gt;
&lt;li&gt;Edit forms&lt;/li&gt;
&lt;li&gt;Relationship dropdowns&lt;/li&gt;
&lt;li&gt;Validation screens&lt;/li&gt;
&lt;li&gt;React components
The frustrating part?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of this work is unique to your business.&lt;/p&gt;

&lt;p&gt;It’s repetitive CRUD development.&lt;/p&gt;

&lt;p&gt;After doing this repeatedly across multiple projects, I decided to build an open-source tool that generates these screens automatically.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;The Problem&lt;/strong&gt;&lt;br&gt;
Most business applications contain a large amount of administrative functionality.&lt;/p&gt;

&lt;p&gt;Examples include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Customer Management&lt;/li&gt;
&lt;li&gt;Product Catalogs&lt;/li&gt;
&lt;li&gt;Vendor Management&lt;/li&gt;
&lt;li&gt;Employee Records&lt;/li&gt;
&lt;li&gt;Exchange Rates&lt;/li&gt;
&lt;li&gt;Beneficiary Management&lt;/li&gt;
&lt;li&gt;Master Data Tables&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In many projects, developers spend more time building CRUD screens than implementing actual business logic.&lt;/p&gt;

&lt;p&gt;For startups and internal tools, this is often unnecessary.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;My Goal&lt;/strong&gt;&lt;br&gt;
I wanted a solution where developers only need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A JPA Entity&lt;/li&gt;
&lt;li&gt;A Spring Repository
and immediately receive a working management UI.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Something like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nd"&gt;@Entity&lt;/span&gt;
&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Customer&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;

    &lt;span class="nd"&gt;@Id&lt;/span&gt;
    &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;Long&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

    &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;firstName&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

    &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;lastName&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

    &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;email&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;@RepositoryRestResource&lt;br&gt;
public interface CustomerRepository&lt;br&gt;
        extends JpaRepository {&lt;br&gt;
}&lt;/p&gt;




&lt;p&gt;Run the application and instantly get:&lt;/p&gt;

&lt;p&gt;List View&lt;br&gt;
Create Form&lt;br&gt;
Edit Form&lt;br&gt;
Delete Operations&lt;br&gt;
Relationship Handling&lt;br&gt;
without writing React CRUD pages.&lt;/p&gt;




&lt;p&gt;**Introducing Spring Data Entry&lt;br&gt;
**Spring Data Entry is an open-source project that generates business management screens from Spring Data REST repositories.&lt;/p&gt;

&lt;p&gt;The project consists of:&lt;br&gt;
&lt;strong&gt;Backend&lt;/strong&gt;&lt;br&gt;
Spring Boot library that discovers:&lt;/p&gt;

&lt;p&gt;Entities&lt;br&gt;
Repositories&lt;br&gt;
Metadata&lt;br&gt;
Relationships&lt;br&gt;
and exposes everything through Spring Data REST.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Frontend&lt;/strong&gt;&lt;br&gt;
React-based UI that automatically generates:&lt;/p&gt;

&lt;p&gt;Tables&lt;br&gt;
Forms&lt;br&gt;
Relationship selectors&lt;br&gt;
Navigation&lt;br&gt;
based on the backend metadata.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Features&lt;/strong&gt;&lt;br&gt;
Current capabilities include:&lt;/p&gt;

&lt;p&gt;✅ Dynamic entity discovery&lt;/p&gt;

&lt;p&gt;✅ Automatic form generation&lt;/p&gt;

&lt;p&gt;✅ Spring Data REST integration&lt;/p&gt;

&lt;p&gt;✅ OneToOne relationship support&lt;/p&gt;

&lt;p&gt;✅ ManyToOne relationship support&lt;/p&gt;

&lt;p&gt;✅ React-based UI&lt;/p&gt;

&lt;p&gt;✅ Minimal setup&lt;/p&gt;




&lt;p&gt;**Example Use Cases&lt;br&gt;
**Internal Admin Portals&lt;br&gt;
Manage:&lt;/p&gt;

&lt;p&gt;Customers&lt;br&gt;
Employees&lt;br&gt;
Vendors&lt;br&gt;
Products&lt;br&gt;
without building custom screens.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Fintech Back Office Systems&lt;/strong&gt;&lt;br&gt;
Coming from a fintech background, I repeatedly encountered the need to manage:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Beneficiaries&lt;/li&gt;
&lt;li&gt;Exchange Rates&lt;/li&gt;
&lt;li&gt;Agents&lt;/li&gt;
&lt;li&gt;Branches&lt;/li&gt;
&lt;li&gt;Compliance Reference Data
Most of these screens are essentially CRUD operations.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Spring Data Entry can generate them automatically.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Master Data Management&lt;/strong&gt;&lt;br&gt;
Many organizations maintain hundreds of lookup and reference tables.&lt;/p&gt;

&lt;p&gt;Instead of creating individual admin screens for every table, developers can expose them through Spring Data Entry.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why Open Source?&lt;/strong&gt;&lt;br&gt;
I believe internal tooling is still unnecessarily expensive.&lt;/p&gt;

&lt;p&gt;Many teams either:&lt;/p&gt;

&lt;p&gt;Build everything from scratch&lt;br&gt;
Use spreadsheets&lt;br&gt;
Purchase expensive low-code platforms&lt;br&gt;
I wanted to create a developer-friendly alternative for the Spring ecosystem.&lt;/p&gt;

&lt;p&gt;Open source allows developers to:&lt;/p&gt;

&lt;p&gt;Evaluate freely&lt;br&gt;
Contribute features&lt;br&gt;
Customize behavior&lt;br&gt;
Deploy anywhere&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Current Limitations&lt;/strong&gt;&lt;br&gt;
The project is still evolving.&lt;/p&gt;

&lt;p&gt;Areas I plan to improve include:&lt;/p&gt;

&lt;p&gt;Server-side pagination&lt;br&gt;
Advanced search&lt;br&gt;
Role-based access control&lt;br&gt;
Audit trails&lt;br&gt;
Workflow approvals&lt;br&gt;
Multi-tenant support&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Roadmap&lt;/strong&gt;&lt;br&gt;
My vision is to evolve Spring Data Entry from a CRUD generator into a platform for building internal business applications.&lt;/p&gt;

&lt;p&gt;Future features include:&lt;/p&gt;

&lt;p&gt;Maker-checker workflows&lt;br&gt;
Approval processes&lt;br&gt;
Audit logging&lt;br&gt;
Enterprise security&lt;br&gt;
SaaS deployment options&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Try It Out&lt;/strong&gt;&lt;br&gt;
GitHub repositories:&lt;/p&gt;

&lt;p&gt;Frontend:&lt;br&gt;
&lt;a href="https://github.com/pat246/data-entry" rel="noopener noreferrer"&gt;https://github.com/pat246/data-entry&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Backend:&lt;br&gt;
&lt;a href="https://github.com/pat246/spring-data-entry" rel="noopener noreferrer"&gt;https://github.com/pat246/spring-data-entry&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Demo videos:&lt;/p&gt;

&lt;p&gt;Part 1:&lt;br&gt;
&lt;a href="https://www.youtube.com/watch?v=4hMOjydgdeM" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=4hMOjydgdeM&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Part 2:&lt;br&gt;
&lt;a href="https://www.youtube.com/watch?v=8xZPJCJBg-M" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=8xZPJCJBg-M&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Final Thoughts&lt;/strong&gt;&lt;br&gt;
Most developers don’t enjoy building CRUD screens.&lt;/p&gt;

&lt;p&gt;We build them because business applications require them.&lt;/p&gt;

&lt;p&gt;My goal with Spring Data Entry is simple:&lt;/p&gt;

&lt;p&gt;Spend less time building admin screens and more time building business value.&lt;/p&gt;

&lt;p&gt;If you’re a Spring Boot developer, I’d love your feedback, ideas, and contributions.&lt;/p&gt;

</description>
      <category>java</category>
      <category>springboot</category>
      <category>react</category>
      <category>restapi</category>
    </item>
  </channel>
</rss>
