Tích hợp Spring Boot và khung SSM (Spring, Spring MVC, MyBatis)
Giới thiệu về Spring Boot và SSM
Spring Boot
Spring Boot là một thành phần con của framework Spring, cung cấp cách tiếp cận nhanh chóng để khởi tạo và chạy các ứng dụng Spring. Nó giúp đơn giản hóa việc thiết lập ban đầu cũng như quá trình phát triển ứng dụng bằng cách cung cấp cấu hình mặc định. Trung tâm của Spring Boot nằm ở nguyên tắc "Ưu tiên quy ước hơn cấu hình", cho phép bạn ít hoặc không cần sử dụng tệp cấu hình XML để chạy ứng dụng Spring.
Khung SSM
SSM là sự kết hợp giữa ba framework: Spring, Spring MVC và MyBatis. Spring đảm nhận tầng nghiệp vụ, Spring MVC xử lý tầng giao diện người dùng, còn MyBatis đóng vai trò như công cụ truy xuất dữ liệu. Cách tích hợp này phổ biến trong phát triển ứng dụng doanh nghiệp nhờ vào cấu trúc rõ ràng và dễ bảo trì.
Lý do tích hợp Spring Boot với SSM?
Việc kết hợp Spring Boot và SSM giúp tận dụng lợi ích từ cả hai nền tảng: tốc độ phát triển và triển khai nhanh của Spring Boot cùng sự ổn định và trưởng thành của SSM. Đặc biệt hữu ích khi nâng cấp hệ thống cũ hoặc cần kiểm soát chi tiết hơn trong quá trình xây dựng.
Các bước thực hiện tích hợp
1. Tạo dự án và cấu hình phụ thuộc
Đầu tiên, hãy tạo một dự án mới sử dụng Spring Initializr (https://start.spring.io/) và thêm các thư viện cần thiết như Spring Web, MyBatis Framework, MySQL Driver,...
Ví dụ cấu hình phụ thuộc trong pom.xml:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.3</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.19</version>
</dependency>
</dependencies>
2. Cấu hình nguồn dữ liệu
Trong tệp application.properties hoặc application.yml, cấu hình thông tin kết nối cơ sở dữ liệu.
Ví dụ cấu hình trong application.properties:
spring.datasource.url=jdbc:mysql://localhost:3306/ten_cSDL?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=mat_khau_cua_ban
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
3. Cấu hình MyBatis
Cấu hình vị trí file Mapper và phân tích kiểu alias, cũng như các thiết lập liên quan đến truy vấn dữ liệu.
Ví dụ cấu hình trong application.properties:
mybatis.mapper-locations=classpath:mapper/*.xml
mybatis.type-aliases-package=com.ten_goi_package.model
4. Lớp thực thể và Interface Mapper
Tạo lớp mô hình tương ứng và interface Mapper, sau đó định nghĩa phương thức truy vấn trong interface Mapper.
User.java (Lớp thực thể):
package com.ten_goi_package.model;
public class User {
private Integer id;
private String username;
private String password;
// các phương thức getter và setter
}
UserMapper.java (Interface Mapper):
package com.ten_goi_package.mapper;
import com.ten_goi_package.model.User;
import org.apache.ibatis.annotations.Select;
public interface UserMapper {
@Select("SELECT * FROM user WHERE id = #{id}")
User findById(Integer id);
}
5. Tệp cấu hình XML
Tạo tệp XML trong thư mục resources/mapper để định nghĩa câu lệnh SQL và ánh xạ với phương thức trong interface.
UserMapper.xml (Cấu hình MyBatis XML):
<?xml version="1.0" encoding="UTF-8" ?>
<mapper namespace="com.ten_goi_package.mapper.UserMapper">
<select id="findById" resultType="com.ten_goi_package.model.User">
SELECT * FROM user WHERE id = #{id}
</select>
</mapper>
6. Lớp Service và Controller
Viết interface và lớp triển khai Service, cùng với lớp Controller để xử lý logic nghiệp vụ và tương tác với frontend.
UserService.java (Interface Service):
package com.ten_goi_package.service;
import com.ten_goi_package.model.User;
public interface UserService {
User findById(Integer id);
}
UserServiceImpl.java (Triển khai Service):
package com.ten_goi_package.service.impl;
import com.ten_goi_package.mapper.UserMapper;
import com.ten_goi_package.model.User;
import com.ten_goi_package.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public User findById(Integer id) {
return userMapper.findById(id);
}
}
UserController.java (Controller):
package com.ten_goi_package.controller;
import com.ten_goi_package.model.User;
import com.ten_goi_package.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/users")
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/{id}")
public User getUserById(@PathVariable Integer id) {
return userService.findById(id);
}
}
7. Lớp khởi động ứng dụng
Sử dụng annotation @SpringBootApplication trên lớp khởi động – đây là sự kết hợp của @Configuration, @EnableAutoConfiguration và @ComponentScan, giúp ứng dụng Spring Boot được khởi chạy.
SpringBootApp.java (Lớp khởi động):
package com.ten_goi_package;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class SpringBootApp {
public static void main(String[] args) {
SpringApplication.run(SpringBootApp.class, args);
}
}
8. Kiểm thử
Khởi động ứng dụng Spring Boot và kiểm tra các endpoint trong Controller bằng trình duyệt hay Postman để xác nhận việc tích hợp đã thành công.
Kết luận
Qua các bước trên, việc tích hợp framework SSM vào dự án Spring Boot có thể thực hiện thành công. Phương pháp này không chỉ tăng hiệu suất phát triển mà còn đảm bảo tính dễ bảo trì và ổn định cho ứng dụng. Trong thực tế, tùy vào yêu cầu cụ thể, có thể điều chỉnh lại cấu hình và cấu trúc mã nguồn nhằm tối ưu hiệu quả phát triển và hiệu năng vận hành.