- Get link
- X
- Other Apps
HTML Form for CRUD Operations
<!--Create Operation: Adding a new programmer--><form action="addProgrammer" method="post">
<!-- <h3>Enter Programmer's ID</h3>
<input type="text" name="pId" /> -->
<h3>Enter Programmer's Name</h3>
<input type="text" name="pName" />
<h3>Enter Programmer's Language</h3>
<input type="text" name="pLang" />
<button type="submit">Add Programmer</button>
</form>
<!-- Read Operation: Finding a programmer by ID -->
<form action="findById" method="get">
<h3>Enter Programmer's ID</h3>
<input type="text" name="pId" />
<button type="submit">Find by ID</button>
</form>
<!-- Read Operation: Finding programmers by name -->
<form action="findByName" method="get">
<h3>Enter Programmer's Name</h3>
<input type="text" name="pName" />
<button type="submit">Find by Name</button>
</form>
<!-- Delete Operation: Deleting a programmer by ID -->
<form action="deleteById" method="post">
<h3>Enter Programmer's ID</h3>
<input type="text" name="pId" />
<button type="submit">Delete</button>
</form>
<!-- Update Operation: Updating a programmer's information by ID -->
<form action="updateById" method="post">
<h3>Enter Programmer's ID</h3>
<input type="text" name="pId" />
<h3>Enter Programmer's Name</h3>
<input type="text" name="pName" />
<h3>Enter Programmer's Language</h3>
<input type="text" name="pLang" />
<button type="submit">Update</button>
</form>
Here’s the controller page for performing CRUD operations
<!--Create Operation: Adding a new programmer--><form action="addProgrammer" method="post">
<!-- <h3>Enter Programmer's ID</h3>
<input type="text" name="pId" /> -->
<h3>Enter Programmer's Name</h3>
<input type="text" name="pName" />
<h3>Enter Programmer's Language</h3>
<input type="text" name="pLang" />
<button type="submit">Add Programmer</button>
</form>
<!-- Read Operation: Finding a programmer by ID -->
<form action="findById" method="get">
<h3>Enter Programmer's ID</h3>
<input type="text" name="pId" />
<button type="submit">Find by ID</button>
</form>
<!-- Read Operation: Finding programmers by name -->
<form action="findByName" method="get">
<h3>Enter Programmer's Name</h3>
<input type="text" name="pName" />
<button type="submit">Find by Name</button>
</form>
<!-- Delete Operation: Deleting a programmer by ID -->
<form action="deleteById" method="post">
<h3>Enter Programmer's ID</h3>
<input type="text" name="pId" />
<button type="submit">Delete</button>
</form>
<!-- Update Operation: Updating a programmer's information by ID -->
<form action="updateById" method="post">
<h3>Enter Programmer's ID</h3>
<input type="text" name="pId" />
<h3>Enter Programmer's Name</h3>
<input type="text" name="pName" />
<h3>Enter Programmer's Language</h3>
<input type="text" name="pLang" />
<button type="submit">Update</button>
</form>Here’s the controller page for performing CRUD operations
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@Controller
public class ProgrammerController {
@Autowired
private ProgrammerRepository pr;
// Create Operation: Adding a new programmer
@PostMapping("/addProgrammer")
public String addProgrammer(@ModelAttribute Programmer programmer) {
pr.save(programmer); // Saves the new programmer in the database
return "redirect:/home"; // Redirects to home after adding
}
// Read Operation: Finding a programmer by ID
@GetMapping("/findById")
public String findById(@RequestParam int pId, Model m) {
// Finding the programmer by ID, or returns null if not found
Programmer p = pr.findById(pId).orElse(null);
m.addAttribute("programmer", p); // Adds the programmer to the model for display
return "ProgrammerInfo.html"; // Page displaying the programmer's info
}
// Read Operation: Finding programmers by name
@GetMapping("/findByName")
public String findByName(@RequestParam String pName, Model m) {
// Custom repository method to find a list of programmers by name
List<Programmer> p = pr.findBypName(pName);
m.addAttribute("programmers", p); // Adds the list to the model for display
return "AllProgrammersInfo.html"; // Page displaying all programmers with the name
}
// Update Operation: Updating a programmer's information by ID
@PostMapping("/updateById")
public String updateById(@ModelAttribute Programmer programmer) {
// Finds the programmer by ID; if not found, throws an exception
Programmer p = pr.findById(programmer.getpId()).orElseThrow(() -> new RuntimeException("Programmer not found"));
// Updates name and language fields
p.setpName(programmer.getpName());
p.setpLang(programmer.getpLang());
pr.save(p); // Saves the updated programmer in the database
return "ProgrammerInfo.html"; // Page displaying the updated programmer's info
}
// Delete Operation: Deleting a programmer by ID
@PostMapping("/deleteById")
public String deleteById(@RequestParam int pId) {
pr.deleteById(pId); // Deletes the programmer by ID
return "redirect:/home"; // Redirects to home after deletion
}
}
Query DSL (Domain Specific Language)
Read (findById and findByName):
findById: Uses findById method (built-in) to search by ID and returns a single programmer.
findByName: Uses findBypName (custom repository method) to search for all programmers witha specified name.
This type of method, like findBypName, is known as a Query DSL (Domain Specific Language) in Spring Data JPA. In Spring Data, the Query DSL allows you to define custom queries by simply naming repository methods in a specific pattern, without writing actual SQL or JPQLcode. For example:findBypName is a method derived from the Query DSL pattern, where Spring Data JPA interpretsthe method nameand automatically generates the query to find programmers by the pName field.
@Repository
public interface ProgrammerRepo extends JpaRepository<Programmer, Integer> {
List<Programmer> findBypName(String pName);
}
In Spring Data JPA, Query DSL method names follow specific rules that help you create queries based
on your entity’s fields. Rules for naming methods in repositories:1. Start with Keywords
- Query methods in Spring Data often begin with keywords like
findBy, getBy, or countBy. - For example,
findBy tells Spring Data JPA that this method will search for specific data.
2. Use Entity Field Names
- After the keyword (
findBy, getBy), use the name of the entity field you want to search by. - This must match exactly with the field name in your entity class.
- If your entity class has a field
pName, you can name the method findBypName to search by that field. - For multiple conditions, you can chain fields together with logical keywords like And or Or.
3. Combine Fields with And or Or
- Use
And or Or between fields if you want to add multiple conditions. - For example:
findBypNameAndpLang: Finds programmers with a specific name and language.findBypNameOrpLang: Finds programmers with a specific name or language.
4. Use Comparators for Conditions
- You can use specific comparators for different types of conditions:
Is or Equals: Checks for exact matches (e.g., findBypNameIs or findBypNameEquals).LessThan / GreaterThan: For numeric or date fields (e.g., findByAgeLessThan).Like: For partial matches or patterns (e.g., findBypNameLike).Between: For a range of values (e.g., findByAgeBetween).IsNull / IsNotNull: Checks for null or non-null values (e.g., findBypLangIsNull).
5. Sort Results with OrderBy
- Add
OrderBy followed by the field name and sort direction (Asc for ascending, Desc for descending).
Example: findBypNameOrderBypLangAsc will find all programmers with a specific name and sort them by language in ascending order.
Example Summary
Here’s a sample list of method names and what they would do:
findBypName: Finds programmers by name.findBypNameAndpLang: Finds programmers by both name and language.findByAgeLessThan: Finds programmers younger than a specific age.findBypLangIsNotNull: Finds programmers whose language field is not empty.findBypNameOrderBypLangDesc: Finds programmers by name and sorts them by language in descending order.
If we want to create a custom query to find programmers by name but wish to use a more meaningful
method name rather than following the standard naming convention, we can use the @Query annotation
in Spring Data JPA. Click here to see how it would look:
- Get link
- X
- Other Apps

Comments
Post a Comment