Mùa xuân Python nghỉ ngơi api

Tôi đã sử dụng API REST của Twilio được một thời gian rồi. Tôi luôn ngạc nhiên khi thấy API REST được sử dụng như thế nào trong việc thiết lập giao tiếp giữa máy khách và máy chủ qua HTTP. Bạn gọi một API, nó sẽ gọi máy chủ. Sau đó, máy chủ sẽ thực hiện toàn bộ logic nghiệp vụ và trả về kết quả

Tôi luôn muốn biết các API này được phát triển như thế nào để tôi có thể tự tạo API. Điều này khiến tôi khám phá các khung khác nhau như Spring Boot. Sau khi phát triển một số API REST bằng Spring Boot, tôi quyết định viết hướng dẫn này để giúp những người mới bắt đầu làm quen với Spring Boot

Trong hướng dẫn này, bạn sẽ phát triển API REST trong Spring Boot để thực hiện các thao tác CRUD trên cơ sở dữ liệu nhân viên

điều kiện tiên quyết

  • Một số kiến ​​thức trước đây về Java hoặc sẵn sàng học hỏi
  • Bộ công cụ phát triển Java (JDK) phiên bản 8 trở lên
  • maven 3. 3 hoặc mới hơn
  • MySQL là dịch vụ cơ sở dữ liệu bạn sẽ sử dụng để lưu trữ dữ liệu nhân viên và quyền truy cập vào ứng dụng của mình thông qua API REST. Bạn có thể làm theo hướng dẫn để biết các bước chi tiết để thiết lập MySQL với Workbench
  • IDE Eclipse để phát triển mã. Khi chạy trình cài đặt, nó sẽ yêu cầu cài đặt gói cụ thể, chọn “Eclipse IDE for Java EE Developers”. Đảm bảo định cấu hình Maven trong Eclipse IDE
  • Ứng dụng máy tính để bàn Postman để kiểm tra các API. Trong khi cài đặt, hãy tạo một tài khoản miễn phí khi được nhắc

Ưu điểm của việc sử dụng Khởi động mùa xuân

Spring Boot là một Java framework, được xây dựng dựa trên Spring, dùng để phát triển các ứng dụng web. Nó cho phép bạn tạo API REST với cấu hình tối thiểu. Một số lợi ích của việc sử dụng Spring Boot cho API REST của bạn bao gồm

  • Không yêu cầu cấu hình XML phức tạp
  • Máy chủ Tomcat được nhúng để chạy các ứng dụng Spring Boot
  • Tính năng tự động cấu hình của Spring Boot tự động định cấu hình ứng dụng của bạn cho các phụ thuộc nhất định. Nếu phụ thuộc có sẵn trong đường dẫn lớp của bạn, Spring Boot sẽ tự động tạo các hạt cho nó. Bean trong Spring là các đối tượng được khởi tạo và quản lý bởi Spring thông qua Spring IoC container. Bạn không cần phải tạo và định cấu hình các bean vì Spring Boot sẽ làm điều đó cho bạn

Nhìn chung, Spring Boot là một lựa chọn tuyệt vời cho các nhà phát triển để xây dựng các ứng dụng của họ vì nó cung cấp mã soạn sẵn với tất cả các cấu hình cần thiết để bắt đầu viết mã ngay lập tức

Tạo và nhập dự án Spring Boot

Để tạo ứng dụng Spring Boot, bạn sẽ sử dụng công cụ có tên là Spring Initializr. Công cụ này cung cấp cấu trúc cơ bản của dự án Spring Boot để bạn bắt đầu nhanh chóng

Truy cập trang web Khởi tạo mùa xuân. Trong Dự án, chọn “Maven” và sau đó chọn “Java” làm ngôn ngữ. Lưu ý rằng hướng dẫn này được xây dựng với phiên bản Spring Boot 2. 5. 6, vì vậy hãy chọn phiên bản tương tự trong Spring Initializr

Bao gồm các số nhận dạng sau trong Siêu dữ liệu dự án cho dự án của bạn

  • Nhóm - đây là tên gói cơ sở cho biết tổ chức hoặc nhóm đang tạo dự án. Điều này tuân theo quy ước đặt tên gói Java. Bạn có thể giữ nó như một giá trị mặc định
  • Artifact - đây là tên dự án của bạn. Vì bạn đang tạo một ứng dụng để truy cập và thao tác với thông tin chi tiết của nhân viên, bạn có thể cung cấp “nhân viên”
  • Tên - đây là tên hiển thị cho ứng dụng của bạn mà Spring Boot sẽ sử dụng khi tạo điểm vào cho dự án. Bạn có thể giữ nguyên tên hiện vật là "nhân viên"
  • Mô tả - cung cấp mô tả về dự án

Chọn “Jar” làm loại Bao bì vì ứng dụng sẽ chạy trong máy chủ Tomcat nhúng do Spring Boot cung cấp

Hướng dẫn này được viết bằng Java 8. Do đó, bạn có thể chọn cùng một phiên bản Java để theo dõi

Thêm các Phụ thuộc sau vào dự án

  • web mùa xuân. cần thiết để xây dựng các ứng dụng web RESTful
  • Dữ liệu mùa xuân JPA. cần thiết để truy cập dữ liệu từ cơ sở dữ liệu. JPA (Java Persistence API) là một Đặc tả Java ánh xạ các đối tượng Java tới các thực thể cơ sở dữ liệu, còn được gọi là ORM (Ánh xạ quan hệ đối tượng). Spring Data JPA là một sự trừu tượng hóa trên JPA cung cấp các phương thức tiện ích cho các hoạt động khác nhau trên cơ sở dữ liệu như tạo, xóa và cập nhật bản ghi. Nó loại bỏ nhu cầu viết truy vấn như bạn làm với JDBC
  • Trình điều khiển MySQL. cần thiết để kết nối với cơ sở dữ liệu MySQL

Ứng dụng Spring Boot của bạn sẽ trông giống như hình bên dưới

Mùa xuân Python nghỉ ngơi api

Nhấp vào nút Tạo ở cuối màn hình. Điều này sẽ tải xuống một tệp zip chứa bản tóm tắt dự án của bạn. Giải nén tệp zip vào vị trí thư mục ưa thích của bạn

Mở IDE Eclipse và đi đến Tệp và chọn Nhập. Trong Maven, chọn Dự án Maven hiện có. Nhấp vào Tiếp theo

Duyệt qua thư mục mà bạn đã giải nén tệp zip, chọn thư mục gốc chứa tệp pom. tập tin xml có mặt. Nhấp vào Kết thúc để nhập dự án của bạn vào IDE Eclipse của bạn

Khám phá cấu trúc tập tin

Bạn sẽ thấy các thư mục sau trong trình khám phá tệp

Mùa xuân Python nghỉ ngơi api

  • Thư mục con src/main/java/com/example/employee bao gồm tất cả các lớp Java cho hướng dẫn
  • Ứng dụng. tệp thuộc tính trong thư mục tài nguyên chứa các thuộc tính mà Spring Boot của bạn sẽ sử dụng để định cấu hình ứng dụng. Bạn sẽ thêm các chi tiết cấu hình cơ sở dữ liệu như URL cơ sở dữ liệu, tên người dùng và mật khẩu vào tệp này sau trong hướng dẫn
  • quả bông. xml chứa tất cả các phụ thuộc mà bạn đã thêm khi tạo dự án Spring Boot trong Spring Initializr

Lưu ý rằng có một tệp có tên là EmployeeApplication. java. Đây là entry point sẽ khởi chạy ứng dụng Spring Boot

package com.example.employee.model;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "employee")
public class Employee {
        
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        @Column(name="emp_id")
            private Long id;
        
        @Column(name="first_name")
        private String firstName;
        
        @Column(name="last_name")
        private String lastName;
        
        @Column(name="email_id")
        private String emailId;
}
5 bao gồm các tính năng của chú thích Spring Boot bên dưới

  • package com.example.employee.model;
    
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    import javax.persistence.Table;
    
    @Entity
    @Table(name = "employee")
    public class Employee {
            
            @Id
            @GeneratedValue(strategy = GenerationType.IDENTITY)
            @Column(name="emp_id")
                private Long id;
            
            @Column(name="first_name")
            private String firstName;
            
            @Column(name="last_name")
            private String lastName;
            
            @Column(name="email_id")
            private String emailId;
    }
    
    6 - điều này sẽ kích hoạt tính năng tự động cấu hình của Spring Boot đã thảo luận trước đó
  • package com.example.employee.model;
    
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    import javax.persistence.Table;
    
    @Entity
    @Table(name = "employee")
    public class Employee {
            
            @Id
            @GeneratedValue(strategy = GenerationType.IDENTITY)
            @Column(name="emp_id")
                private Long id;
            
            @Column(name="first_name")
            private String firstName;
            
            @Column(name="last_name")
            private String lastName;
            
            @Column(name="email_id")
            private String emailId;
    }
    
    7 - nó chỉ định một lớp cấu hình, nơi bạn sẽ cung cấp tất cả các định nghĩa bean mà ứng dụng của bạn đang sử dụng. Spring Boot sẽ sử dụng các định nghĩa bean được cung cấp trong lớp cấu hình để khởi tạo chúng khi chạy
  • package com.example.employee.model;
    
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    import javax.persistence.Table;
    
    @Entity
    @Table(name = "employee")
    public class Employee {
            
            @Id
            @GeneratedValue(strategy = GenerationType.IDENTITY)
            @Column(name="emp_id")
                private Long id;
            
            @Column(name="first_name")
            private String firstName;
            
            @Column(name="last_name")
            private String lastName;
            
            @Column(name="email_id")
            private String emailId;
    }
    
    8 - cho phép Spring Boot quét gói để tìm các thành phần như
    package com.example.employee.model;
    
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    import javax.persistence.Table;
    
    @Entity
    @Table(name = "employee")
    public class Employee {
            
            @Id
            @GeneratedValue(strategy = GenerationType.IDENTITY)
            @Column(name="emp_id")
                private Long id;
            
            @Column(name="first_name")
            private String firstName;
            
            @Column(name="last_name")
            private String lastName;
            
            @Column(name="email_id")
            private String emailId;
    }
    
    9,
    package com.example.employee.repository;
    
    import org.springframework.data.jpa.repository.JpaRepository;
    import org.springframework.stereotype.Repository;
    
    import com.example.employee.model.Employee;
    
    @Repository
    public interface EmployeeRepository extends JpaRepository<Employee, Long> {
    
    }
    
    0,
    package com.example.employee.repository;
    
    import org.springframework.data.jpa.repository.JpaRepository;
    import org.springframework.stereotype.Repository;
    
    import com.example.employee.model.Employee;
    
    @Repository
    public interface EmployeeRepository extends JpaRepository<Employee, Long> {
    
    }
    
    1, v.v. và đăng ký đậu cho mỗi lớp đó

Thêm các gói phụ vào dự án

Hãy hiểu các lớp chính mà một ứng dụng Spring Boot bao gồm. Bạn sẽ tạo các gói con cho từng lớp này trong dự án

  • DAO - DAO (lớp truy cập dữ liệu) cung cấp giao diện để kết nối với cơ sở dữ liệu và truy cập dữ liệu được lưu trữ trong cơ sở dữ liệu. Một lớp DAO duy nhất có thể xử lý các truy vấn truy xuất các loại thực thể khác nhau
  • Kho lưu trữ - Lớp này tương tự như lớp DAO kết nối với cơ sở dữ liệu và truy cập dữ liệu. Tuy nhiên, lớp kho lưu trữ cung cấp mức độ trừu tượng cao hơn so với lớp DAO. Mỗi lớp chịu trách nhiệm truy cập và thao tác với một thực thể. Hướng dẫn này sẽ sử dụng lớp kho lưu trữ
  • Dịch vụ - Lớp này gọi lớp DAO để lấy dữ liệu và thực hiện logic nghiệp vụ trên đó. Logic nghiệp vụ trong lớp dịch vụ có thể là - thực hiện các phép tính trên dữ liệu nhận được, lọc dữ liệu dựa trên một số logic, v.v.
  • Mô hình - Mô hình chứa tất cả các đối tượng Java sẽ được ánh xạ tới bảng cơ sở dữ liệu bằng cách sử dụng. DAO sẽ lấy dữ liệu từ cơ sở dữ liệu và điền vào mô hình tương ứng với dữ liệu đó và trả lại cho lớp dịch vụ và ngược lại
  • Bộ điều khiển - Đây là lớp trên cùng, được gọi khi có yêu cầu cho một API REST cụ thể. Bộ điều khiển sẽ xử lý yêu cầu API REST, gọi một hoặc nhiều dịch vụ và trả về phản hồi HTTP cho máy khách

Để tạo các thư mục riêng cho các thành phần trên, trong Eclipse, nhấp chuột phải vào thư mục com. thí dụ. gói nhân viên và Chọn Mới rồi chọn Gói như bên dưới

Một cửa sổ bật lên mới sẽ mở ra, trong trường Tên, hãy nhập “com. thí dụ. Nhân viên. kho lưu trữ” và nhấp vào Kết thúc

Mùa xuân Python nghỉ ngơi api

Điều này sẽ tạo thư mục cho các thành phần kho lưu trữ. Lặp lại các bước trên cho các gói sau

  • com. thí dụ. Nhân viên. bộ điều khiển
  • com. thí dụ. Nhân viên. mô hình
  • com. thí dụ. Nhân viên. Dịch vụ

Trước khi viết mã cho ứng dụng trong từng gói phụ này, hãy tạo bảng và định cấu hình chi tiết kết nối MySQL trong Spring Boot mà bạn sẽ sử dụng trong hướng dẫn này

Tạo bảng và cấu hình chi tiết MySQL trong Spring Boot

Mở bàn làm việc MySQL. Trong trang chủ, nhấp vào biểu tượng [+] bên cạnh Kết nối MySQL

Mùa xuân Python nghỉ ngơi api

Cửa sổ bật lên Thiết lập kết nối mới sẽ mở ra. Nhập "spring-boot-test" làm tên kết nối. Trong Lược đồ mặc định, nhập "lược đồ nhân viên"

Mùa xuân Python nghỉ ngơi api

Bấm vào đồng ý. Một kết nối MySQL mới được tạo trên trang chủ

Mùa xuân Python nghỉ ngơi api

Để mở kết nối, nhấp vào spring-boot-test trên trang chủ. Trong sơ đồ nhân viên, nhấp chuột phải vào Bảng và chọn Tạo bảng

Thêm bốn cột - emp_id, first_name, last_name, email_id. Đối với emp_id, hãy chọn hộp kiểm Khóa chính, Không phải Null và Tự động tăng. Bảng của bạn sẽ trông giống như hình bên dưới

Mùa xuân Python nghỉ ngơi api

Nhấp vào Áp dụng rồi Kết thúc

Để kết nối phiên bản MySQL này trong ứng dụng của bạn, bạn sẽ phải cung cấp chi tiết cơ sở dữ liệu cho Spring Boot. mở ứng dụng. tệp thuộc tính và thêm nội dung bên dưới

spring.datasource.url = jdbc:mysql://127.0.0.1:3306/employee-schema

spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5InnoDBDialect

  • package com.example.employee.repository;
    
    import org.springframework.data.jpa.repository.JpaRepository;
    import org.springframework.stereotype.Repository;
    
    import com.example.employee.model.Employee;
    
    @Repository
    public interface EmployeeRepository extends JpaRepository<Employee, Long> {
    
    }
    
    2 là số cổng mà phiên bản MySQL đang chạy. Thay đổi nó thành số cổng mà phiên bản của bạn đang chạy
  • package com.example.employee.repository;
    
    import org.springframework.data.jpa.repository.JpaRepository;
    import org.springframework.stereotype.Repository;
    
    import com.example.employee.model.Employee;
    
    @Repository
    public interface EmployeeRepository extends JpaRepository<Employee, Long> {
    
    }
    
    3 được sử dụng để thông báo cho Spring Boot về cơ sở dữ liệu đang được sử dụng. Dựa trên điều này, Spring Boot sẽ tạo các truy vấn SQL cho cơ sở dữ liệu cụ thể đó

Với thông tin này, Spring Boot sẽ tự động cấu hình kết nối cơ sở dữ liệu cho bạn

Bây giờ bảng đã sẵn sàng, hãy chuyển sang thêm mã cho các lớp khác nhau của ứng dụng

Tạo lớp mô hình

Quay trở lại IDE Eclipse và nhấp chuột phải vào com. thí dụ. Nhân viên. gói mô hình cho tùy chọn tạo một lớp mới

Một cửa sổ bật lên mới với chi tiết Lớp học sẽ xuất hiện. Trong trường Tên, nhập “Nhân viên”. Nhấp vào Kết thúc

Mùa xuân Python nghỉ ngơi api

Thêm nội dung vào tập tin

package com.example.employee.model;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "employee")
public class Employee {
        
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        @Column(name="emp_id")
            private Long id;
        
        @Column(name="first_name")
        private String firstName;
        
        @Column(name="last_name")
        private String lastName;
        
        @Column(name="email_id")
        private String emailId;
}

Hãy chia nhỏ mã trong tệp

  • Chú thích
    package com.example.employee.repository;
    
    import org.springframework.data.jpa.repository.JpaRepository;
    import org.springframework.stereotype.Repository;
    
    import com.example.employee.model.Employee;
    
    @Repository
    public interface EmployeeRepository extends JpaRepository<Employee, Long> {
    
    }
    
    4 xác định rằng lớp Java này được ánh xạ tới bảng cơ sở dữ liệu
  • package com.example.employee.repository;
    
    import org.springframework.data.jpa.repository.JpaRepository;
    import org.springframework.stereotype.Repository;
    
    import com.example.employee.model.Employee;
    
    @Repository
    public interface EmployeeRepository extends JpaRepository<Employee, Long> {
    
    }
    
    5 với sự trợ giúp của thuộc tính
    package com.example.employee.repository;
    
    import org.springframework.data.jpa.repository.JpaRepository;
    import org.springframework.stereotype.Repository;
    
    import com.example.employee.model.Employee;
    
    @Repository
    public interface EmployeeRepository extends JpaRepository<Employee, Long> {
    
    }
    
    6 chỉ định bảng cụ thể mà lớp này được ánh xạ tới
  • package com.example.employee.repository;
    
    import org.springframework.data.jpa.repository.JpaRepository;
    import org.springframework.stereotype.Repository;
    
    import com.example.employee.model.Employee;
    
    @Repository
    public interface EmployeeRepository extends JpaRepository<Employee, Long> {
    
    }
    
    7 trên mỗi biến đối tượng Java cho phép xác định một tập hợp các thuộc tính như tên, độ dài, v.v. Thuộc tính
    package com.example.employee.repository;
    
    import org.springframework.data.jpa.repository.JpaRepository;
    import org.springframework.stereotype.Repository;
    
    import com.example.employee.model.Employee;
    
    @Repository
    public interface EmployeeRepository extends JpaRepository<Employee, Long> {
    
    }
    
    6 sẽ là tên của trường trong bảng cơ sở dữ liệu mà biến thể hiện này sẽ ánh xạ tới
  • package com.example.employee.repository;
    
    import org.springframework.data.jpa.repository.JpaRepository;
    import org.springframework.stereotype.Repository;
    
    import com.example.employee.model.Employee;
    
    @Repository
    public interface EmployeeRepository extends JpaRepository<Employee, Long> {
    
    }
    
    9 trên một trường cho Spring Boot biết rằng trường cụ thể này là khóa chính trong bảng
  • package com.example.employee.service;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    import com.example.employee.model.Employee;
    import com.example.employee.repository.EmployeeRepository;
    import java.util.List;
    
    @Service
    public class EmployeeService {
    
            @Autowired
                EmployeeRepository empRepository;        
    }
    
    0 chỉ định chiến lược sẽ được sử dụng để tạo khóa chính

Có bốn chiến lược tạo khóa chính như được mô tả bên dưới

  • package com.example.employee.service;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    import com.example.employee.model.Employee;
    import com.example.employee.repository.EmployeeRepository;
    import java.util.List;
    
    @Service
    public class EmployeeService {
    
            @Autowired
                EmployeeRepository empRepository;        
    }
    
    1 - Đây là chiến lược mặc định được sử dụng bởi Spring Boot. Nếu bạn sử dụng chiến lược này, nhà cung cấp JPA sẽ quyết định một chiến lược phù hợp để tạo khóa chính tùy thuộc vào phương ngữ được cung cấp trong ứng dụng. tệp thuộc tính
  • package com.example.employee.service;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    import com.example.employee.model.Employee;
    import com.example.employee.repository.EmployeeRepository;
    import java.util.List;
    
    @Service
    public class EmployeeService {
    
            @Autowired
                EmployeeRepository empRepository;        
    }
    
    2 - chiến lược này sử dụng cột nhận dạng cơ sở dữ liệu để xác định chiến lược khóa chính. Ví dụ: bạn đã xác định cột
    package com.example.employee.service;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    import com.example.employee.model.Employee;
    import com.example.employee.repository.EmployeeRepository;
    import java.util.List;
    
    @Service
    public class EmployeeService {
    
            @Autowired
                EmployeeRepository empRepository;        
    }
    
    3 là cột tăng tự động trong cơ sở dữ liệu trong khi tạo bảng nhân viên. Bây giờ khi bạn sử dụng chiến lược này thì một khóa chính duy nhất được tạo bằng cách bắt đầu từ 1 và tăng dần mỗi khi một hàng mới được chèn vào bảng
  • package com.example.employee.service;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    import com.example.employee.model.Employee;
    import com.example.employee.repository.EmployeeRepository;
    import java.util.List;
    
    @Service
    public class EmployeeService {
    
            @Autowired
                EmployeeRepository empRepository;        
    }
    
    4 - chiến lược này sử dụng trình tự cơ sở dữ liệu để tạo khóa chính
  • package com.example.employee.service;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    import com.example.employee.model.Employee;
    import com.example.employee.repository.EmployeeRepository;
    import java.util.List;
    
    @Service
    public class EmployeeService {
    
            @Autowired
                EmployeeRepository empRepository;        
    }
    
    5 - chiến lược này sử dụng bảng cơ sở dữ liệu để tạo khóa chính

Ngoài ra, bạn sẽ tạo setters và getters cho biến thể hiện ở trên. Để tự động tạo chúng trong Eclipse, nhấp chuột phải vào Nhân viên. java và chọn Nguồn. Chọn Tạo Getters và Setters. Nhấp vào Chọn tất cả rồi nhấp vào nút Tạo

Trong phần tiếp theo, bạn sẽ tạo lớp kho lưu trữ sẽ sử dụng lớp mô hình này để truy cập thông tin chi tiết về nhân viên từ cơ sở dữ liệu

Tạo lớp kho lưu trữ

Tạo một lớp có tên là EmployeeRepository dưới com. thí dụ. Nhân viên. gói kho lưu trữ và thay thế mã bằng các nội dung sau

package com.example.employee.repository;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

import com.example.employee.model.Employee;

@Repository
public interface EmployeeRepository extends JpaRepository<Employee, Long> {

}

package com.example.employee.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.example.employee.model.Employee;
import com.example.employee.repository.EmployeeRepository;
import java.util.List;

@Service
public class EmployeeService {

        @Autowired
            EmployeeRepository empRepository;        
}
6 trên lớp chỉ ra rằng lớp là kho lưu trữ dữ liệu sẽ chứa các thao tác CRUD. CRUD là từ viết tắt của bốn thao tác cơ bản của cơ sở dữ liệu - Tạo, Đọc, Cập nhật, Xóa

package com.example.employee.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.example.employee.model.Employee;
import com.example.employee.repository.EmployeeRepository;
import java.util.List;

@Service
public class EmployeeService {

        @Autowired
            EmployeeRepository empRepository;        
}
7 kéo dài
package com.example.employee.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.example.employee.model.Employee;
import com.example.employee.repository.EmployeeRepository;
import java.util.List;

@Service
public class EmployeeService {

        @Autowired
            EmployeeRepository empRepository;        
}
8. Bạn có hai tham số được truyền cho
package com.example.employee.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.example.employee.model.Employee;
import com.example.employee.repository.EmployeeRepository;
import java.util.List;

@Service
public class EmployeeService {

        @Autowired
            EmployeeRepository empRepository;        
}
8 - tham số đầu tiên là lớp mô hình sẽ được quản lý bởi kho lưu trữ này, thứ hai là kiểu dữ liệu của khóa chính

Giao diện

package com.example.employee.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.example.employee.model.Employee;
import com.example.employee.repository.EmployeeRepository;
import java.util.List;

@Service
public class EmployeeService {

        @Autowired
            EmployeeRepository empRepository;        
}
8 do Spring Data JPA cung cấp giúp lớp kho lưu trữ có thể truy xuất, cập nhật, xóa các bản ghi trong bảng nhân viên

Giao diện này cũng định nghĩa các phương thức như

// CREATE 
public Employee createEmployee(Employee emp) {
    return empRepository.save(emp);
}

// READ
public List<Employee> getEmployees() {
    return empRepository.findAll();
}

// DELETE
public void deleteEmployee(Long empId) {
    empRepository.deleteById(empId);
}
1,
// CREATE 
public Employee createEmployee(Employee emp) {
    return empRepository.save(emp);
}

// READ
public List<Employee> getEmployees() {
    return empRepository.findAll();
}

// DELETE
public void deleteEmployee(Long empId) {
    empRepository.deleteById(empId);
}
2,
// CREATE 
public Employee createEmployee(Employee emp) {
    return empRepository.save(emp);
}

// READ
public List<Employee> getEmployees() {
    return empRepository.findAll();
}

// DELETE
public void deleteEmployee(Long empId) {
    empRepository.deleteById(empId);
}
3, để thao tác trên cơ sở dữ liệu. Việc triển khai các phương thức này được cung cấp bởi lớp triển khai mặc định có tên là
// CREATE 
public Employee createEmployee(Employee emp) {
    return empRepository.save(emp);
}

// READ
public List<Employee> getEmployees() {
    return empRepository.findAll();
}

// DELETE
public void deleteEmployee(Long empId) {
    empRepository.deleteById(empId);
}
4. Bạn phải thực hiện cuộc gọi đến các phương thức này, do đó giúp bạn không phải viết truy vấn cho các thao tác này

Trong phần tiếp theo, bạn sẽ tạo lớp dịch vụ sẽ gọi các phương thức triển khai

package com.example.employee.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.example.employee.model.Employee;
import com.example.employee.repository.EmployeeRepository;
import java.util.List;

@Service
public class EmployeeService {

        @Autowired
            EmployeeRepository empRepository;        
}
8

Tạo lớp dịch vụ

Thành phần dịch vụ chứa logic nghiệp vụ. Tạo một lớp có tên là EmployeeService dưới com. thí dụ. Nhân viên. gói dịch vụ và thay thế mã bằng nội dung bên dưới

package com.example.employee.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.example.employee.model.Employee;
import com.example.employee.repository.EmployeeRepository;
import java.util.List;

@Service
public class EmployeeService {

        @Autowired
            EmployeeRepository empRepository;        
}

Trong Spring, bạn sử dụng chú thích

// CREATE 
public Employee createEmployee(Employee emp) {
    return empRepository.save(emp);
}

// READ
public List<Employee> getEmployees() {
    return empRepository.findAll();
}

// DELETE
public void deleteEmployee(Long empId) {
    empRepository.deleteById(empId);
}
6 để khởi tạo một đối tượng lớp

Chú thích

package com.example.employee.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.example.employee.model.Employee;
import com.example.employee.repository.EmployeeRepository;
import java.util.List;

@Service
public class EmployeeService {

        @Autowired
            EmployeeRepository empRepository;        
}
6 từ lớp
package com.example.employee.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.example.employee.model.Employee;
import com.example.employee.repository.EmployeeRepository;
import java.util.List;

@Service
public class EmployeeService {

        @Autowired
            EmployeeRepository empRepository;        
}
7 cho phép tạo một bean của lớp này thông qua tính năng
package com.example.employee.model;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "employee")
public class Employee {
        
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        @Column(name="emp_id")
            private Long id;
        
        @Column(name="first_name")
        private String firstName;
        
        @Column(name="last_name")
        private String lastName;
        
        @Column(name="email_id")
        private String emailId;
}
8 của Spring. Bean này sau đó được sử dụng trong lớp dịch vụ bằng cách sử dụng chú thích
// CREATE 
public Employee createEmployee(Employee emp) {
    return empRepository.save(emp);
}

// READ
public List<Employee> getEmployees() {
    return empRepository.findAll();
}

// DELETE
public void deleteEmployee(Long empId) {
    empRepository.deleteById(empId);
}
6. Điều này được gọi là Tiêm phụ thuộc vào mùa xuân

Bây giờ bạn sẽ tạo các phương thức trong lớp dịch vụ. Mỗi phương thức này sẽ gọi các phương thức

package com.example.employee.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.example.employee.model.Employee;
import com.example.employee.repository.EmployeeRepository;
import java.util.List;

@Service
public class EmployeeService {

        @Autowired
            EmployeeRepository empRepository;        
}
8 được mở rộng bởi
package com.example.employee.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.example.employee.model.Employee;
import com.example.employee.repository.EmployeeRepository;
import java.util.List;

@Service
public class EmployeeService {

        @Autowired
            EmployeeRepository empRepository;        
}
7

Thêm các phương thức này vào lớp

// UPDATE
public Employee updateEmployee(Long empId, Employee employeeDetails) {
        Employee emp = empRepository.findById(empId).get();
        emp.setFirstName(employeeDetails.getFirstName());
        emp.setLastName(employeeDetails.getLastName());
        emp.setEmailId(employeeDetails.getEmailId());
        
        return empRepository.save(emp);                                
}
3 sau
// UPDATE
public Employee updateEmployee(Long empId, Employee employeeDetails) {
        Employee emp = empRepository.findById(empId).get();
        emp.setFirstName(employeeDetails.getFirstName());
        emp.setLastName(employeeDetails.getLastName());
        emp.setEmailId(employeeDetails.getEmailId());
        
        return empRepository.save(emp);                                
}
4

// CREATE 
public Employee createEmployee(Employee emp) {
    return empRepository.save(emp);
}

// READ
public List<Employee> getEmployees() {
    return empRepository.findAll();
}

// DELETE
public void deleteEmployee(Long empId) {
    empRepository.deleteById(empId);
}

  • Phương thức
    // UPDATE
    public Employee updateEmployee(Long empId, Employee employeeDetails) {
            Employee emp = empRepository.findById(empId).get();
            emp.setFirstName(employeeDetails.getFirstName());
            emp.setLastName(employeeDetails.getLastName());
            emp.setEmailId(employeeDetails.getEmailId());
            
            return empRepository.save(emp);                                
    }
    
    5 gọi hàm
    // UPDATE
    public Employee updateEmployee(Long empId, Employee employeeDetails) {
            Employee emp = empRepository.findById(empId).get();
            emp.setFirstName(employeeDetails.getFirstName());
            emp.setLastName(employeeDetails.getLastName());
            emp.setEmailId(employeeDetails.getEmailId());
            
            return empRepository.save(emp);                                
    }
    
    6, hàm này sẽ trả về đối tượng
    // UPDATE
    public Employee updateEmployee(Long empId, Employee employeeDetails) {
            Employee emp = empRepository.findById(empId).get();
            emp.setFirstName(employeeDetails.getFirstName());
            emp.setLastName(employeeDetails.getLastName());
            emp.setEmailId(employeeDetails.getEmailId());
            
            return empRepository.save(emp);                                
    }
    
    7 sau khi lưu nó vào cơ sở dữ liệu. Tham số được truyền cho phương thức
    // UPDATE
    public Employee updateEmployee(Long empId, Employee employeeDetails) {
            Employee emp = empRepository.findById(empId).get();
            emp.setFirstName(employeeDetails.getFirstName());
            emp.setLastName(employeeDetails.getLastName());
            emp.setEmailId(employeeDetails.getEmailId());
            
            return empRepository.save(emp);                                
    }
    
    5 là mô hình
    // UPDATE
    public Employee updateEmployee(Long empId, Employee employeeDetails) {
            Employee emp = empRepository.findById(empId).get();
            emp.setFirstName(employeeDetails.getFirstName());
            emp.setLastName(employeeDetails.getLastName());
            emp.setEmailId(employeeDetails.getEmailId());
            
            return empRepository.save(emp);                                
    }
    
    7 chứa tất cả các chi tiết cần lưu
  • Tương tự,
    package com.example.employee.controller;
    
    import java.util.List;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RequestBody;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RestController;
    
    import com.example.employee.model.Employee;
    import com.example.employee.service.EmployeeService;
    
    @RestController
    @RequestMapping("/api")
    public class EmployeeController {
            @Autowired
            EmployeeService empService;
    
    }
    
    0 và
    package com.example.employee.controller;
    
    import java.util.List;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RequestBody;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RestController;
    
    import com.example.employee.model.Employee;
    import com.example.employee.service.EmployeeService;
    
    @RestController
    @RequestMapping("/api")
    public class EmployeeController {
            @Autowired
            EmployeeService empService;
    
    }
    
    1 gọi các phương thức tương ứng là
    package com.example.employee.service;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    import com.example.employee.model.Employee;
    import com.example.employee.repository.EmployeeRepository;
    import java.util.List;
    
    @Service
    public class EmployeeService {
    
            @Autowired
                EmployeeRepository empRepository;        
    }
    
    8 được mở rộng bởi EmployeeRepository
  • Hàm
    // CREATE 
    public Employee createEmployee(Employee emp) {
        return empRepository.save(emp);
    }
    
    // READ
    public List<Employee> getEmployees() {
        return empRepository.findAll();
    }
    
    // DELETE
    public void deleteEmployee(Long empId) {
        empRepository.deleteById(empId);
    }
    
    2 trả về danh sách tất cả các chi tiết nhân viên trong cơ sở dữ liệu
  • Hàm
    package com.example.employee.controller;
    
    import java.util.List;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RequestBody;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RestController;
    
    import com.example.employee.model.Employee;
    import com.example.employee.service.EmployeeService;
    
    @RestController
    @RequestMapping("/api")
    public class EmployeeController {
            @Autowired
            EmployeeService empService;
    
    }
    
    4 sẽ xóa một bản ghi nhân viên trong đó
    package com.example.employee.service;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    import com.example.employee.model.Employee;
    import com.example.employee.repository.EmployeeRepository;
    import java.util.List;
    
    @Service
    public class EmployeeService {
    
            @Autowired
                EmployeeRepository empRepository;        
    }
    
    3 trong bảng bằng với
    package com.example.employee.controller;
    
    import java.util.List;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RequestBody;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RestController;
    
    import com.example.employee.model.Employee;
    import com.example.employee.service.EmployeeService;
    
    @RestController
    @RequestMapping("/api")
    public class EmployeeController {
            @Autowired
            EmployeeService empService;
    
    }
    
    6 được thông qua

Để cập nhật chi tiết nhân viên, hãy thêm hàm sau vào sau phương thức

package com.example.employee.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import com.example.employee.model.Employee;
import com.example.employee.service.EmployeeService;

@RestController
@RequestMapping("/api")
public class EmployeeController {
        @Autowired
        EmployeeService empService;

}
7

// UPDATE
public Employee updateEmployee(Long empId, Employee employeeDetails) {
        Employee emp = empRepository.findById(empId).get();
        emp.setFirstName(employeeDetails.getFirstName());
        emp.setLastName(employeeDetails.getLastName());
        emp.setEmailId(employeeDetails.getEmailId());
        
        return empRepository.save(emp);                                
}

Hãy chia nhỏ phương pháp trên

  • Phương thức
    package com.example.employee.controller;
    
    import java.util.List;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RequestBody;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RestController;
    
    import com.example.employee.model.Employee;
    import com.example.employee.service.EmployeeService;
    
    @RestController
    @RequestMapping("/api")
    public class EmployeeController {
            @Autowired
            EmployeeService empService;
    
    }
    
    8 chấp nhận hai tham số - ID nhân viên (khóa chính) và đối tượng nhân viên chứa thông tin chi tiết về nhân viên mới
  • Để cập nhật một nhân viên hiện có, trước tiên bạn sẽ truy xuất đối tượng nhân viên có ID nhân viên trong cơ sở dữ liệu bằng
    package com.example.employee.controller;
    
    import java.util.List;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RequestBody;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RestController;
    
    import com.example.employee.model.Employee;
    import com.example.employee.service.EmployeeService;
    
    @RestController
    @RequestMapping("/api")
    public class EmployeeController {
            @Autowired
            EmployeeService empService;
    
    }
    
    6 và lưu trữ nó trong biến
    {
      "firstName": "Joe",
      "lastName": "B",
      "emailId": "[email protected]"
    }
    
    0
  • Sau khi nhận được đối tượng employee cũ, bạn sẽ sử dụng setters được xác định trong Employee. java để cập nhật các trường với các giá trị mới được lưu trữ trong
    {
      "firstName": "Joe",
      "lastName": "B",
      "emailId": "[email protected]"
    }
    
    1
  • Cuối cùng, hàm
    {
      "firstName": "Joe",
      "lastName": "B",
      "emailId": "[email protected]"
    }
    
    2 sẽ lưu đối tượng
    {
      "firstName": "Joe",
      "lastName": "B",
      "emailId": "[email protected]"
    }
    
    0 đã cập nhật vào cơ sở dữ liệu

Tạo lớp điều khiển

Tạo một lớp có tên là EmployeeController dưới com. thí dụ. Nhân viên. gói điều khiển và thay thế mã bằng nội dung bên dưới

package com.example.employee.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import com.example.employee.model.Employee;
import com.example.employee.service.EmployeeService;

@RestController
@RequestMapping("/api")
public class EmployeeController {
        @Autowired
        EmployeeService empService;

}

  • Chú thích
    {
      "firstName": "Joe",
      "lastName": "B",
      "emailId": "[email protected]"
    }
    
    4 trên lớp xác định URL cơ sở cho tất cả các API REST được tạo trong bộ điều khiển này. URL cơ sở này được theo sau bởi các điểm cuối REST riêng lẻ được cung cấp cho từng phương thức của bộ điều khiển
  • {
      "firstName": "Joe",
      "lastName": "B",
      "emailId": "[email protected]"
    }
    
    5 trên lớp là sự kết hợp của
  • {
      "firstName": "Joe",
      "lastName": "B",
      "emailId": "[email protected]"
    }
    
    6 - nói với Spring Boot rằng lớp này là bộ điều khiển
  • {
      "firstName": "Joe",
      "lastName": "B",
      "emailId": "[email protected]"
    }
    
    7 - chỉ ra rằng giá trị trả về của các phương thức bên trong bộ điều khiển sẽ được trả về dưới dạng nội dung phản hồi cho API REST
  • // UPDATE
    public Employee updateEmployee(Long empId, Employee employeeDetails) {
            Employee emp = empRepository.findById(empId).get();
            emp.setFirstName(employeeDetails.getFirstName());
            emp.setLastName(employeeDetails.getLastName());
            emp.setEmailId(employeeDetails.getEmailId());
            
            return empRepository.save(emp);                                
    }
    
    3 được đưa vào dưới dạng phụ thuộc bằng cách sử dụng chú thích
    // CREATE 
    public Employee createEmployee(Employee emp) {
        return empRepository.save(emp);
    }
    
    // READ
    public List<Employee> getEmployees() {
        return empRepository.findAll();
    }
    
    // DELETE
    public void deleteEmployee(Long empId) {
        empRepository.deleteById(empId);
    }
    
    6

Tạo các phương thức để thực hiện các thao tác CRUD

Trước khi tiếp tục triển khai các yêu cầu API REST trong bộ điều khiển, hãy thảo luận về cấu trúc của các API REST này

Để tạo một nhân viên, một phương thức POST được tạo với điểm cuối

{
  "firstName": "Joe",
  "lastName": "B",
  "emailId": "[email protected]"
}
0. Nội dung yêu cầu bao gồm dữ liệu được gửi từ ứng dụng khách tới API của bạn. Trong trường hợp này, dữ liệu là chi tiết nhân viên mới để lưu vào cơ sở dữ liệu. Nó sẽ là một JSON tương tự như nội dung bên dưới

{
  "firstName": "Joe",
  "lastName": "B",
  "emailId": "[email protected]"
}

Để lấy thông tin chi tiết về nhân viên, một phương thức GET được tạo với điểm cuối

{
  "firstName": "Joe",
  "lastName": "B",
  "emailId": "[email protected]"
}
0

Để cập nhật chi tiết nhân viên, phương thức PUT HTTP được tạo với điểm cuối

{
  "firstName": "Joe",
  "lastName": "B",
  "emailId": "[email protected]"
}
2 trong đó
{
  "firstName": "Joe",
  "lastName": "B",
  "emailId": "[email protected]"
}
3 là tham số đường dẫn chứa ID nhân viên, được gửi tới API. Nội dung yêu cầu bao gồm các chi tiết nhân viên mới để cập nhật trong cơ sở dữ liệu được định dạng như bên dưới

{
  "firstName": "Joe",
  "lastName": "B",
  "emailId": "[email protected]"
}

Để xóa một nhân viên, một phương thức DELETE HTTP được tạo với điểm cuối

{
  "firstName": "Joe",
  "lastName": "B",
  "emailId": "[email protected]"
}
4 trong đó {empId} - là ID nhân viên có dữ liệu cần xóa

Hãy tạo các phương thức cho bốn API REST này. Thêm phương thức dưới đây vào lớp EmployeeController sau EmployeeService empService

@RequestMapping(value="/employees", method=RequestMethod.POST)
public Employee createEmployee(@RequestBody Employee emp) {
    return empService.createEmployee(emp);
}

Hãy phân tích mã mới được thêm vào

  • {
      "firstName": "Joe",
      "lastName": "B",
      "emailId": "[email protected]"
    }
    
    5 - là điểm cuối. Trong trường hợp của bạn, đó là /employees. Lưu ý rằng điểm cuối được cung cấp trong trường giá trị chỉ là “/employees” chứ không phải “/API/employees”. Vì “/api” là chung cho tất cả các điểm cuối, nên điều này đã được thêm làm URL cơ sở trong chú thích
    {
      "firstName": "Joe",
      "lastName": "B",
      "emailId": "[email protected]"
    }
    
    4 trên lớp
  • {
      "firstName": "Joe",
      "lastName": "B",
      "emailId": "[email protected]"
    }
    
    7 - đây là loại phương thức HTTP được đại diện bởi một enum. Đối với điểm cuối tạo nhân viên, phương thức HTTP là POST. Do đó, bạn sẽ thêm
    {
      "firstName": "Joe",
      "lastName": "B",
      "emailId": "[email protected]"
    }
    
    8 làm giá trị của nó
  • Chú thích
    {
      "firstName": "Joe",
      "lastName": "B",
      "emailId": "[email protected]"
    }
    
    9 được sử dụng để ánh xạ phần thân yêu cầu của điểm cuối với tham số phương thức.
    {
      "firstName": "Joe",
      "lastName": "B",
      "emailId": "[email protected]"
    }
    
    0 sẽ chứa JSON yêu cầu được chuyển đến điểm cuối này

Tương tự, bạn sẽ thêm mã cho tất cả các API REST khác. Thêm các phương thức này vào lớp EmployeeController sau phương thức

// UPDATE
public Employee updateEmployee(Long empId, Employee employeeDetails) {
        Employee emp = empRepository.findById(empId).get();
        emp.setFirstName(employeeDetails.getFirstName());
        emp.setLastName(employeeDetails.getLastName());
        emp.setEmailId(employeeDetails.getEmailId());
        
        return empRepository.save(emp);                                
}
5

package com.example.employee.model;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "employee")
public class Employee {
        
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        @Column(name="emp_id")
            private Long id;
        
        @Column(name="first_name")
        private String firstName;
        
        @Column(name="last_name")
        private String lastName;
        
        @Column(name="email_id")
        private String emailId;
}
0

Lưu ý rằng một số phương thức bao gồm

@RequestMapping(value="/employees", method=RequestMethod.POST)
public Employee createEmployee(@RequestBody Employee emp) {
    return empService.createEmployee(emp);
}
2, nghĩa là điểm cuối API có liên quan đến tham số đường dẫn.
@RequestMapping(value="/employees", method=RequestMethod.POST)
public Employee createEmployee(@RequestBody Employee emp) {
    return empService.createEmployee(emp);
}
2 sẽ ánh xạ biến đường dẫn được cung cấp trong tham số
{
  "firstName": "Joe",
  "lastName": "B",
  "emailId": "[email protected]"
}
5 của điểm cuối tới trường phương thức Java

Xây dựng ứng dụng

Trước khi bạn xây dựng, đây là dự án đã hoàn thành trong kho lưu trữ GitHub để bạn tham khảo

Nhấp chuột phải vào thư mục nhân viên trong Project Explorer trên Eclipse và chọn Run As sau đó chọn 4 bản dựng Maven

Mùa xuân Python nghỉ ngơi api

Cửa sổ bật lên Chỉnh sửa cấu hình sẽ mở ra. Loại khởi động mùa xuân. chạy trong Mục tiêu

Mùa xuân Python nghỉ ngơi api

Chuyển đến tab Môi trường và nhấp vào Thêm. Cửa sổ bật lên Biến môi trường mới sẽ mở ra

Trong trường Tên, nhập "mùa xuân. nguồn dữ liệu. tên tài khoản". Đối với Giá trị, hãy nhập tên người dùng MySQL của bạn. Nhấp vào OK

Mùa xuân Python nghỉ ngơi api

Tương tự, thêm một biến môi trường mới với "spring. nguồn dữ liệu. mật khẩu" trong Tên và mật khẩu MySQL của bạn trong Giá trị. Nhấp vào Áp dụng rồi Chạy

Ứng dụng bây giờ sẽ bắt đầu xây dựng. Bản dựng thành công sẽ hiển thị thông tin sau trên bảng điều khiển

Mùa xuân Python nghỉ ngơi api

Nếu bạn thấy một vài dòng cuối cùng trong bảng điều khiển, nó sẽ thông báo rằng ứng dụng đã bắt đầu chạy trên cổng mặc định 8080. Nếu cổng này không khả dụng, Spring Boot sẽ tìm một cổng khả dụng khác

Bạn sẽ nhận được Trang Lỗi Nhãn trắng trong trình duyệt dành cho https. //máy chủ cục bộ. 8080

Trong phần tiếp theo, bạn sẽ tìm hiểu cách kiểm tra bốn API CRUD

Kiểm tra các API

Postman là một ứng dụng giúp phát triển, thử nghiệm và ghi lại các API. Tạo một tài khoản miễn phí nếu bạn chưa làm như vậy

Bạn sẽ tạo một không gian làm việc trong Postman có thể được sử dụng để cộng tác với các thành viên trong nhóm trong các dự án. Mỗi không gian làm việc có thể có một hoặc nhiều bộ sưu tập chứa các thư mục với một bộ API được xác định

Để tạo một không gian làm việc trong Postman, hãy làm theo các bước dưới đây

  1. Mở ứng dụng Người đưa thư
  2. Chọn menu thả xuống Không gian làm việc và nhấp vào Không gian làm việc mới

Mùa xuân Python nghỉ ngơi api

  1. Nhập tên của không gian làm việc, chẳng hạn như "Không gian làm việc API Spring Boot REST"
  2. Phần Khả năng hiển thị cho phép bạn chọn xem bạn muốn hiển thị không gian làm việc cho đồng đội hay chính mình. Bạn có thể chọn một trong hai tùy chọn cho bài viết này
  3. Nhấp vào nút Tạo không gian làm việc ở góc dưới cùng bên trái

Mùa xuân Python nghỉ ngơi api

Để tạo bộ sưu tập, nhấp vào biểu tượng Tạo bộ sưu tập mới trong bảng điều khiển bên trái

Mùa xuân Python nghỉ ngơi api

Nhấp vào biểu tượng Chỉnh sửa bên cạnh tên bộ sưu tập và nhập “Bộ sưu tập nhân viên” của bạn

Mùa xuân Python nghỉ ngơi api

Tiếp theo, bạn sẽ tạo và kiểm tra các yêu cầu trong bộ sưu tập của mình cho từng API trong số bốn API REST được tạo trong ứng dụng Spring Boot của bạn

Tạo và kiểm tra một yêu cầu trong Postman

Trong bảng điều khiển bên trái, nhấp vào Xem thêm hành động cho bộ sưu tập bạn đã tạo, chọn Thêm yêu cầu

Mùa xuân Python nghỉ ngơi api

Mùa xuân Python nghỉ ngơi api

Đặt tên yêu cầu là “Tạo nhân viên”. Một yêu cầu mới được tạo như hình bên dưới

Mùa xuân Python nghỉ ngơi api

Thay đổi phương thức HTTP thành POST

Mùa xuân Python nghỉ ngơi api

Trong trường Nhập URL yêu cầu, hãy nhập “https. //máy chủ cục bộ. 8080/api/nhân viên”

Mùa xuân Python nghỉ ngơi api

Điểm cuối /api/employees, đứng trước máy chủ và cổng nơi ứng dụng đang chạy. Nếu ứng dụng của bạn đang chạy ở một cổng khác, hãy thay thế

@RequestMapping(value="/employees", method=RequestMethod.POST)
public Employee createEmployee(@RequestBody Employee emp) {
    return empService.createEmployee(emp);
}
5 trong URL

Để gửi nội dung yêu cầu đến điểm cuối URL yêu cầu này, hãy điều hướng đến tab Nội dung, chọn hộp kiểm thô với JSON làm định dạng nội dung yêu cầu

Mùa xuân Python nghỉ ngơi api

Nhập dữ liệu bên dưới vào hộp văn bản được cung cấp

package com.example.employee.model;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "employee")
public class Employee {
        
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        @Column(name="emp_id")
            private Long id;
        
        @Column(name="first_name")
        private String firstName;
        
        @Column(name="last_name")
        private String lastName;
        
        @Column(name="email_id")
        private String emailId;
}
1

Đây là những chi tiết nhân viên sẽ được thêm vào cơ sở dữ liệu. Nhấp vào Lưu rồi Gửi. Dưới đây là phản hồi bạn nhận được trong Postman

package com.example.employee.model;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "employee")
public class Employee {
        
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        @Column(name="emp_id")
            private Long id;
        
        @Column(name="first_name")
        private String firstName;
        
        @Column(name="last_name")
        private String lastName;
        
        @Column(name="email_id")
        private String emailId;
}
2

Lưu ý trạng thái phản hồi

@RequestMapping(value="/employees", method=RequestMethod.POST)
public Employee createEmployee(@RequestBody Employee emp) {
    return empService.createEmployee(emp);
}
6 và nội dung phản hồi là JSON chứa chi tiết hồ sơ nhân viên đã được lưu trong cơ sở dữ liệu

Truy cập MySQL Workbench và xác minh rằng một hàng mới được tạo với các chi tiết nhân viên ở trên với

@RequestMapping(value="/employees", method=RequestMethod.POST)
public Employee createEmployee(@RequestBody Employee emp) {
    return empService.createEmployee(emp);
}
7 bằng cách thực hiện truy vấn

package com.example.employee.model;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "employee")
public class Employee {
        
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        @Column(name="emp_id")
            private Long id;
        
        @Column(name="first_name")
        private String firstName;
        
        @Column(name="last_name")
        private String lastName;
        
        @Column(name="email_id")
        private String emailId;
}
3

Mùa xuân Python nghỉ ngơi api

Tương tự, bạn sẽ tạo và chạy các yêu cầu để NHẬN, XÓA và CẬP NHẬT nhân viên

Đối với nhân viên của

@RequestMapping(value="/employees", method=RequestMethod.POST)
public Employee createEmployee(@RequestBody Employee emp) {
    return empService.createEmployee(emp);
}
8, hãy nhập “http. //máy chủ cục bộ. 8080/api/employees/” trong trường Nhập URL yêu cầu. Để trống Nội dung và nhấp vào Gửi

Mùa xuân Python nghỉ ngơi api

Để

@RequestMapping(value="/employees", method=RequestMethod.POST)
public Employee createEmployee(@RequestBody Employee emp) {
    return empService.createEmployee(emp);
}
9 nhân viên có ID cụ thể, hãy tạo một yêu cầu
package com.example.employee.model;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "employee")
public class Employee {
        
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        @Column(name="emp_id")
            private Long id;
        
        @Column(name="first_name")
        private String firstName;
        
        @Column(name="last_name")
        private String lastName;
        
        @Column(name="email_id")
        private String emailId;
}
00. Nhập “http. //máy chủ cục bộ. 8080/api/employees/1” trong trường Nhập URL yêu cầu. Nhập các chi tiết sau vào phần thân JSON thô và nhấp vào Gửi

package com.example.employee.model;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "employee")
public class Employee {
        
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        @Column(name="emp_id")
            private Long id;
        
        @Column(name="first_name")
        private String firstName;
        
        @Column(name="last_name")
        private String lastName;
        
        @Column(name="email_id")
        private String emailId;
}
4

Mùa xuân Python nghỉ ngơi api

Để

package com.example.employee.model;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "employee")
public class Employee {
        
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        @Column(name="emp_id")
            private Long id;
        
        @Column(name="first_name")
        private String firstName;
        
        @Column(name="last_name")
        private String lastName;
        
        @Column(name="email_id")
        private String emailId;
}
01 hồ sơ nhân viên, hãy tạo một yêu cầu
package com.example.employee.model;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "employee")
public class Employee {
        
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        @Column(name="emp_id")
            private Long id;
        
        @Column(name="first_name")
        private String firstName;
        
        @Column(name="last_name")
        private String lastName;
        
        @Column(name="email_id")
        private String emailId;
}
01. Nhập “http. //máy chủ cục bộ. 8080/api/employees/1” trong trường Nhập URL yêu cầu. Để trống Nội dung và nhấp vào Gửi

Mùa xuân Python nghỉ ngơi api

Điều gì tiếp theo cho các dự án Java Spring Boot?

Trong hướng dẫn này, bạn đã học cách xây dựng API REST với Spring Boot và cách kiểm tra API trong Postman

Thử thách bản thân tiếp theo bằng cách xem các bài viết này và triển khai API Twilio trong ứng dụng Khởi động mùa xuân của bạn

  • Gửi SMS trong Ứng dụng khởi động mùa xuân của bạn
  • Tạo bảng điều khiển SMS trong Java với Spring Boot
  • Phiên âm các cuộc gọi điện thoại bằng Twilio Media Streams với Java, WebSockets và Spring Boot

Nida là một nhà phát triển ngăn xếp đầy đủ. Cô ấy là một người học thực hành, do đó thích học các công nghệ mới thông qua phát triển. Trong thời gian rảnh rỗi, cô khám phá các công nghệ mới, đọc các blog công nghệ và giải quyết các vấn đề về Cấu trúc dữ liệu và thuật toán. Theo dõi cô ấy trên GitHub hoặc LinkedIn