Hướng dẫn phát triển cơ bản với Spring Boot 2.1.x

1. Thiết lập dự án ban đầu

Sử dụng Spring Initializr hoặc IntelliJ IDEA để tạo dự án Spring Boot. Đảm bảo cài đặt JDK 8 và Maven 3.2 trở lên, cấu hình IDE sử dụng mã hóa UTF-8.

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.6.RELEASE</version>
</parent>

1.1 Khởi chạy dự án không kết nối CSDL

Thêm cấu hình loại trừ cấu hình tự động kết nối CSDL:

@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)

1.2 Thêm dependency cho ứng dụng web

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
@Controller
@RequestMapping("nguoi-dung")
public class NguoiDungController {
    @RequestMapping("kiem-tra")
    @ResponseBody
    public String kiemTra() {
        return "Kết nối thành công";
    }
}

1.3 Công cụ hỗ trợ

<!-- Hot reload -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
</dependency>

<!-- Lombok -->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
</dependency>

2. Kết nối cơ sở dữ liệu

2.1 Cấu hình MySQL 5.7 với MyBatis 3

Dùng Docker để triển khai MySQL:

docker run -di -p 3306:3306 --name mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
centos/mysql-57-centos7
CREATE TABLE `nguoi_dung` (
  `id` INT PRIMARY KEY AUTO_INCREMENT,
  `so_dien_thoai` VARCHAR(40) UNIQUE,
  `mat_khau` VARCHAR(200),
  `ten` VARCHAR(40),
  `gioi_tinh` TINYINT
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

2.2 Cấu hình kết nối CSDL

spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    url: jdbc:mysql://localhost:3306/ten_csdl
    username: root
    password: 123456

mybatis:
  mapper-locations: classpath:com/example/mapper/*.xml

2.3 Tự động sinh mã với MyBatis Generator

<plugin>
  <groupId>org.mybatis.generator</groupId>
  <artifactId>mybatis-generator-maven-plugin</artifactId>
</plugin>
<context id="default" targetRuntime="MyBatis3Simple">
  <jdbcConnection driverClass="com.mysql.jdbc.Driver"
    connectionURL="jdbc:mysql://localhost:3306/ten_csdl"
    userId="root" password="123456"/>
  <javaModelGenerator targetPackage="com.example.model" />
  <sqlMapGenerator targetPackage="com.example.mapper" />
  <javaClientGenerator type="XMLMAPPER" targetPackage="com.example.repository"/>
  <table tableName="nguoi_dung"/>
</context>

2.4 Sử dụng MyBatis Plus

<dependency>
  <groupId>com.baomidou</groupId>
  <artifactId>mybatis-plus-boot-starter</artifactId>
  <version>3.2.0</version>
</dependency>
public interface NguoiDungRepository extends BaseMapper<NguoiDung> {}

3. Định dạng trả về chung & xử lý ngoại lệ

3.1 Định nghĩa lớp kết quả chung

@Data
@Builder
public class KetQua {
    private int ma;
    private String thongBao;
    
    @JsonInclude(JsonInclude.Include.NON_NULL)
    private Object duLieu;
    
    public static KetQua thanhCong(Object duLieu) {
        return KetQua.builder()
            .ma(200).thongBao("Thành công").duLieu(duLieu).build();
    }
}

3.2 Xử lý ngoại lệ toàn hệ thống

@RestControllerAdvice
public class XuLyNgoaiLe {
    
    @ExceptionHandler(Exception.class)
    public KetQua xuLy(HttpServletRequest request, Exception ex) {
        if (ex instanceof NguoiDungKhongTonTaiException) {
            return KetQua.builder()
                .ma(10001).thongBao("Không tìm thấy dữ liệu").build();
        }
        return KetQua.builder()
            .ma(10002).thongBao("Lỗi hệ thống").build();
    }
}
spring:
  mvc:
    throw-exception-if-no-handler-found: true
  resources:
    add-mappings: false

Thẻ: Spring Boot mybatis mysql REST API Java

Đăng vào ngày 8 tháng 6 lúc 22:21