Implementing CRUD Operations with Spring Boot: Authentication and Configuration

REST Architecture Overview

REST (REpresentational State Transfer) is a software architectural style commonly used for web services.

/* APIResponse.java */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class APIResponse {
    
    
    private Integer status;   // Status code: 1 for success, 0 for failure
    private String message;    // Response message: descriptive string
    private Object payload;   // Response data

    /**
     * Success response for create, update, and delete operations
     */
    public static APIResponse success() {
        
        return new APIResponse(1, "Operation successful", null);
    }

    /**
     * Success response for query operations
     */
    public static APIResponse success(Object data) {
        
        return new APIResponse(1, "Operation successful", data);
    }

    /**
     * Error response
     */
    public static APIResponse error(String message) {
        
        return new APIResponse(0, message, null);
    }
}

Department Management

A complete request path consists of the value attribute from class-level @RequestMapping plus the value attribute from method-level @RequestMapping.

@RequestMapping has specialized annotations such as @GetMapping, @PostMapping, @DeleteMapping, etc.

Add @Slf4j annotation to classes to automatically generate logging variables.

/* DepartmentController.java */
@Slf4j
@RestController
@RequestMapping("/api/departments")
public class DepartmentController {
    
    
	@Autowired
    private DepartmentService departmentService;

	...
/* DepartmentService.java */
@Service
public interface DepartmentService {
    
    ... }
/* DepartmentServiceImpl.java */
@Service
public class DepartmentServiceImpl implements DepartmentService {
    
    
	@Autowired
    private DepartmentMapper departmentMapper;

	...
/* DepartmentMapper.java */
@Mapper
public interface DepartmentMapper {
    
    ... }
/* Department.java */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Department {
    
    
    private Integer id;
    private String departmentName;
    private LocalDateTime creationTime;
    private LocalDateTime modificationTime;
}

2.1 Retrieving Departments

/* DepartmentController.java */
@GetMapping
public APIResponse getAllDepartments() {
    
    log.info("Fetching all department records");
    List departmentList = departmentService.getAllDepartments();
    return APIResponse.success(departmentList);
}
/* DepartmentService.java */
List getAllDepartments();
/* DepartmentServiceImpl.java */
@Override
public List getAllDepartments() {
    
    
	return departmentMapper.selectAllDepartments();
}
/* DepartmentMapper.java */
@Select("SELECT * FROM department")
public List selectAllDepartments();

2.2 Deleting a Department

/* DepartmentController.java */
@DeleteMapping("/{id}")
public APIResponse removeDepartment(@PathVariable Integer id) {
    
    log.info("Deleting department with ID: {}", id);
    departmentService.deleteDepartment(id);
    return APIResponse.success();
}
/* DepartmentService.java */
void deleteDepartment(Integer id);
/* DepartmentServiceImpl.java */
@Override
public void deleteDepartment(Integer id) {
    
    
    departmentMapper.removeById(id);
}
/* DepartmentMapper.java */
@Delete("DELETE FROM department WHERE id = #{id}")
void removeById(Integer id);

Implementation to delete all employees under this department will be added later.

2.3 Adding a Department

/* DepartmentController.java */
@PostMapping
public APIResponse createDepartment(@RequestBody Department department) {
    
    log.info("Adding new department: {}", department);
    departmentService.addDepartment(department);
    return APIResponse.success();
}
/* DepartmentService.java */
void addDepartment(Department department);
/* DepartmentServiceImpl.java */
@Override
public void addDepartment(Department department) {
    
    
    department.setCreationTime(LocalDateTime.now());
    department.setModificationTime(LocalDateTime.now());

    departmentMapper.insertDepartment(department);
}
/* DepartmentMapper.java */
@Insert("INSERT INTO department (department_name, creation_time, modification_time) VALUES (#{departmentName}, #{creationTime}, #{modificationTime})")
void insertDepartment(Department department);

2.4 Updating a Department

Frontend requires two endpoints: retrieve department by ID and update department.

/* DepartmentController.java */
@GetMapping("/{id}")
public APIResponse getDepartmentById(@PathVariable Integer id) {
    
    log.info("Retrieving department with ID: {}", id);
    Department department = departmentService.getDepartmentById(id);
    return APIResponse.success(department);
}
/* DepartmentController.java */
@PutMapping
public APIResponse modifyDepartment(@RequestBody Department department) {
    
    log.info("Updating department: {}", department);
    departmentService.updateDepartment(department);
    return APIResponse.success();
}
/* DepartmentService.java */
Department getDepartmentById(Integer id);
void updateDepartment(Department department);
/* DepartmentServiceImpl.java */
@Override
public Department getDepartmentById(Integer id) {
    
    
    return departmentMapper.selectById(id);
}

@Override
public void updateDepartment(Department department) {
    
    
    department.setModificationTime(LocalDateTime.now());
    departmentMapper.updateDepartment(department);
}
/* DepartmentMapper.java */
@Select("SELECT * FROM department WHERE id = #{id}")
Department selectById(Integer id);

@Update("UPDATE department SET department_name = #{departmentName}, modification_time = #{modificationTime} WHERE id = #{id}")
void updateDepartment(Department department);

Employee Management

/* EmployeeController.java */
@Slf4j
@RestController
@RequestMapping("/api/employees")
public class EmployeeController {
    
    
    @Autowired
    private EmployeeService employeeService;

	...
/* EmployeeService.java */
@Service
public interface EmployeeService {
    
    ... }
/* EmployeeServiceImpl.java */
@Service
public class EmployeeServiceImpl implements EmployeeService {
    
    
    @Autowired
    private EmployeeMapper employeeMapper;

	...
/* EmployeeMapper.java */
@Mapper
public interface EmployeeMapper {
    
    ... }

Tags: Spring Boot CRUD REST API java Authentication

Posted on Thu, 07 May 2026 10:29:30 +0000 by crabfinger