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