Phát triển ứng dụng tìm việc làm thêm cho sinh viên sử dụng Spring Boot, Vue.js và UniApp

Trong bối cảnh nhu cầu tìm kiếm việc làm bán thời gian của sinh viên ngày càng tăng, việc xây dựng một nền tảng kết nối hiệu quả giữa nhà tuyển dụng và người lao động trẻ là vô cùng cần thiết. Hệ thống được phát triển dựa trên kiến trúc hiện đại, kết hợp giữa sức mạnh xử lý phía server của Spring Boot và tính linh hoạt của Vue.js cùng UniApp cho giao diện người dùng.

Kiến trúc hệ thống và Công nghệ sử dụng

1. Backend: Framework Spring Boot

Spring Boot được lựa chọn làm nền tảng cốt lõi cho phía server nhờ khả năng tối giản hóa cấu hình thông qua nguyên lý "convention over configuration". Framework này cho phép triển khai nhanh chóng các dịch vụ RESTful API, tích hợp sẵn các máy chủ nhúng như Tomcat, giúp giảm bớt gánh nặng trong việc thiết lập môi trường và vận hành ứng dụng.

2. Frontend: Vue.js và UniApp

Đối với giao diện quản trị Web, Vue.js mang lại trải nghiệm mượt mà nhờ cơ chế Virtual DOM và liên kết dữ liệu hai chiều (two-way data binding). Đối với ứng dụng di động, UniApp được sử dụng để phát triển một lần nhưng có thể biên dịch ra nhiều nền tảng khác nhau như iOS, Android và các loại Mini Program, giúp tối ưu hóa chi phí phát triển.

3. Tầng truy xuất dữ liệu: MyBatis

MyBatis đóng vai trò là cầu nối giữa mã nguồn Java và cơ sở dữ liệu MySQL. Khác với các ORM thuần túy, MyBatis cho phép lập trình viên kiểm soát hoàn toàn các câu lệnh SQL, từ đó tối ưu hóa hiệu suất truy vấn cho các nghiệp vụ phức tạp của hệ thống tuyển dụng.

Triển khai mã nguồn xử lý xác thực

Dưới đây là ví dụ về cách triển khai logic đăng nhập và quản lý mã định danh (Token) trong hệ thống:


// Xử lý đăng nhập và cấp quyền
@RestController
@RequestMapping("/api/auth")
public class AuthenticationController {

    @Autowired
    private MemberService memberService;

    @Autowired
    private SecurityTokenService tokenManager;

    @PostMapping("/signin")
    public ResultResponse processLogin(@RequestBody LoginRequest loginReq) {
        // Tìm kiếm thông tin người dùng dựa trên tài khoản
        MemberAccount account = memberService.findAccount(loginReq.getUsername());
        
        // Kiểm tra tính hợp lệ của mật khẩu
        if (account == null || !account.getSecretKey().equals(loginReq.getPassword())) {
            return ResultResponse.error("Tài khoản hoặc mật khẩu không chính xác");
        }
        
        // Khởi tạo token truy cập
        String accessToken = tokenManager.issueToken(account.getId(), account.getUsername(), account.getRoleType());
        return ResultResponse.success().put("token", accessToken);
    }
}

// Logic khởi tạo và lưu trữ Token
@Service
public class SecurityTokenServiceImpl implements SecurityTokenService {

    @Override
    public String issueToken(Long userId, String loginName, String role) {
        // Kiểm tra xem token cũ còn hiệu lực không
        TokenRecord existingToken = tokenMapper.selectByUserId(userId, role);
        
        String newTokenString = UUID.randomUUID().toString().replace("-", "");
        long expiryTime = System.currentTimeMillis() + 3600000; // Hiệu lực 1 giờ

        if (existingToken != null) {
            existingToken.setAuthToken(newTokenString);
            existingToken.setExpiryDate(new Date(expiryTime));
            tokenMapper.updateById(existingToken);
        } else {
            TokenRecord newRecord = new TokenRecord(userId, loginName, newTokenString, new Date(expiryTime), role);
            tokenMapper.insert(newRecord);
        }
        return newTokenString;
    }
}

Thiết kế Cơ sở dữ liệu

Cấu trúc cơ sở dữ liệu được thiết kế để đảm bảo tính toàn vẹn và khả năng mở rộng. Dưới đây là các bảng dữ liệu quan trọng:


-- Bảng lưu trữ thông tin sinh viên/người dùng
CREATE TABLE `app_student` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `username` varchar(50) NOT NULL COMMENT 'Tên đăng nhập',
  `password` varchar(100) NOT NULL COMMENT 'Mật khẩu',
  `full_name` varchar(100) NOT NULL COMMENT 'Họ tên',
  `gender` varchar(10) DEFAULT NULL COMMENT 'Giới tính',
  `phone_number` varchar(20) DEFAULT NULL COMMENT 'Số điện thoại',
  `wallet_balance` double DEFAULT '0' COMMENT 'Số dư tài khoản',
  PRIMARY KEY (`id`),
  UNIQUE KEY `idx_username` (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Bảng quản lý bài đăng tuyển dụng/diễn đàn
CREATE TABLE `job_forum` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `post_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `subject` varchar(255) DEFAULT NULL COMMENT 'Tiêu đề bài đăng',
  `body_content` longtext NOT NULL COMMENT 'Nội dung chi tiết',
  `author_id` bigint(20) NOT NULL COMMENT 'Mã người đăng',
  `is_pinned` int(1) DEFAULT '0' COMMENT 'Ghim bài',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

Kịch bản kiểm thử hệ thống (Test Cases)

Việc kiểm thử đảm bảo các tính năng hoạt động đúng theo đặc tả kỹ thuật, đặc biệt là các chức năng bảo mật và quản lý người dùng.

Chức năng Dữ liệu đầu vào Kết quả mong đợi Trạng thái
Đăng nhập hệ thống Đúng User/Pass/Captcha Truy cập vào trang quản trị Thành công
Đăng nhập hệ thống Sai mật khẩu Thông báo lỗi xác thực Thành công
Tạo mới người dùng Tên đăng nhập đã tồn tại Cảnh báo tài khoản đã được đăng ký Thành công
Cập nhật hồ sơ Để trống trường bắt buộc Yêu cầu hoàn thiện thông tin Thành công

Hệ thống không chỉ cung cấp một môi trường tìm việc an toàn cho sinh viên mà còn giúp doanh nghiệp tiếp cận nguồn nhân lực trẻ năng động một cách nhanh chóng thông qua các bộ lọc thông minh và quy trình ứng tuyển trực tuyến.

Thẻ: SpringBoot Vue.js UniApp mybatis Java

Đăng vào ngày 19 tháng 6 lúc 23:14