Spring Boot Tutorial

Spring Boot - Software Setup and Configuration (STS/Eclipse/IntelliJ)

Prerequisite (Spring Core Concepts)

Spring Boot Core

Spring Boot with REST API

Spring Boot with Database and Data JPA

Spring Boot with Kafka

Spring Boot with AOP

Spring Boot - CRUD Operations using MySQL Database

Creating CRUD operations with MySQL in Spring Boot requires the integration of Spring Data JPA and the MySQL JDBC driver. Here's a step-by-step guide:

1. Setup Dependencies

Add Spring Data JPA and the MySQL driver to your pom.xml:

<!-- Spring Data JPA -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

<!-- MySQL JDBC driver -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>

2. Configure Database

Specify your MySQL properties in application.properties or application.yml:

spring.datasource.url=jdbc:mysql://localhost:3306/mydatabase?useSSL=false&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=root
spring.jpa.hibernate.ddl-auto=update

3. Create Entity

Define your JPA entity:

@Entity
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    private String email;

    // Getters, Setters, Constructors, hashCode, equals, toString
}

4. Create Repository

Spring Data JPA provides the JpaRepository to simplify CRUD operations:

public interface UserRepository extends JpaRepository<User, Long> {
}

5. Create Service

Here's a simple service layer:

@Service
public class UserService {

    @Autowired
    private UserRepository userRepository;

    public List<User> getAllUsers() {
        return userRepository.findAll();
    }

    public User getUserById(Long id) {
        return userRepository.findById(id).orElse(null);
    }

    public User createUser(User user) {
        return userRepository.save(user);
    }

    public User updateUser(Long id, User user) {
        if (userRepository.existsById(id)) {
            user.setId(id);
            return userRepository.save(user);
        } else {
            return null;
        }
    }

    public void deleteUser(Long id) {
        userRepository.deleteById(id);
    }
}

6. Create Controller

A RESTful API for CRUD operations:

@RestController
@RequestMapping("/users")
public class UserController {

    @Autowired
    private UserService userService;

    @GetMapping
    public List<User> getAllUsers() {
        return userService.getAllUsers();
    }

    @GetMapping("/{id}")
    public User getUserById(@PathVariable Long id) {
        return userService.getUserById(id);
    }

    @PostMapping
    public User createUser(@RequestBody User user) {
        return userService.createUser(user);
    }

    @PutMapping("/{id}")
    public User updateUser(@PathVariable Long id, @RequestBody User user) {
        return userService.updateUser(id, user);
    }

    @DeleteMapping("/{id}")
    public ResponseEntity<Void> deleteUser(@PathVariable Long id) {
        userService.deleteUser(id);
        return ResponseEntity.noContent().build();
    }
}

Now, you have set up a basic CRUD API backed by a MySQL database in your Spring Boot application. Ensure you have a MySQL instance running and that the specified database (mydatabase in this case) exists. Adjust the connection properties, including username and password, to match your MySQL setup.

  1. JPA repository in Spring Boot for MySQL CRUD operations:

    • Create a JPA repository interface extending JpaRepository for CRUD operations.
    • Example:
      public interface UserRepository extends JpaRepository<User, Long> {
          // Custom query methods if needed
      }
      
  2. RESTful CRUD operations with Spring Boot and MySQL:

    • Implement RESTful CRUD operations using Spring Boot and MySQL.
    • Example:
      @RestController
      @RequestMapping("/api/users")
      public class UserController {
          @Autowired
          private UserRepository userRepository;
      
          // Implement CRUD operations using UserRepository
      }
      
  3. Connecting Spring Boot to MySQL database for CRUD operations:

    • Configure MySQL connection properties in application.properties or application.yml.
    • Example (application.properties):
      spring.datasource.url=jdbc:mysql://localhost:3306/mydatabase
      spring.datasource.username=root
      spring.datasource.password=password
      
  4. Handling relationships in Spring Boot MySQL CRUD operations:

    • Define and manage relationships between JPA entities using annotations like @ManyToOne or @OneToMany.
    • Example:
      public class Order {
          @ManyToOne
          private User user;
          // Other fields and methods
      }
      
  5. Custom queries and native queries in Spring Boot MySQL CRUD:

    • Use query methods, @Query annotations, or native queries for customized queries.
    • Example:
      public interface UserRepository extends JpaRepository<User, Long> {
          @Query("SELECT u FROM User u WHERE u.age > :age")
          List<User> findByAgeGreaterThan(@Param("age") int age);
      }
      
  6. Transaction management with MySQL in Spring Boot:

    • Handle transactions for MySQL operations using @Transactional or TransactionTemplate.
    • Example:
      @Transactional
      public void performTransaction() {
          // MySQL operations within a transaction
      }