项目方案: Java SpringBoot 小程序后端搭建

1. 项目概述

本项目旨在搭建一个基于Java SpringBoot框架的小程序后端,用于提供数据接口服务。通过该后端,小程序可以实现用户登录、数据查询、数据更新等功能。

2. 技术选型

为了快速开发并提供高效的服务,我们选择以下技术进行项目的搭建:

  • 后端框架:SpringBoot
  • 数据库:MySQL
  • 数据库访问:Spring Data JPA
  • 接口文档:Swagger
  • 日志管理:Log4j
  • 安全认证:JWT

3. 项目结构

我们将按照MVC(Model-View-Controller)的架构设计项目的结构,具体如下:

  • com.example.demo :项目根目录
    • config:配置类目录,存放一些初始化配置类
    • controller:控制层目录,处理接口请求和响应
    • dto:数据传输对象目录,用于在不同层之间传递数据
    • exception:异常处理目录,用于处理异常情况
    • model:数据模型目录,存放实体类和数据库表的映射关系
    • repository:数据访问层目录,用于操作数据库
    • service:服务层目录,实现业务逻辑
    • util:工具类目录,存放一些通用的工具类

4. 类图

classDiagram
    class UserController{
        - UserService userService
        + UserController(UserService userService)
        + login(username:String, password:String): Map<String, Object>
    }
    class UserService{
        - UserRepository userRepository
        + UserService(UserRepository userRepository)
        + login(username:String, password:String): Map<String, Object>
    }
    class UserRepository{
        + findByUsername(String username): User
    }
    class User{
        - String id
        - String username
        - String password
        + User()
        + User(username:String, password:String)
        + getId(): String
        + getUsername(): String
        + getPassword(): String
        + setId(id:String): void
        + setUsername(username:String): void
        + setPassword(password:String): void
    }

5. 数据库设计

我们将使用MySQL数据库作为数据存储的后端支持。在MySQL中创建一个名为user的表,用于存储用户信息。

CREATE TABLE `user` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `username` VARCHAR(255) NOT NULL,
  `password` VARCHAR(255) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE INDEX `username_unique` (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

6. 代码示例

6.1 用户实体类

package com.example.demo.model;

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

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private String id;
    private String username;
    private String password;

    public User() {}

    public User(String username, String password) {
        this.username = username;
        this.password = password;
    }

    // getters and setters
}

6.2 用户数据访问层

package com.example.demo.repository;

import com.example.demo.model.User;
import org.springframework.data.jpa.repository.JpaRepository;

public interface UserRepository extends JpaRepository<User, String> {
    User findByUsername(String username);
}

6.3 用户服务层

package com.example.demo.service;

import com.example.demo.model.User;
import com.example.demo.repository.UserRepository;
import org.springframework.stereotype.Service;

@Service
public class UserService {
    private final UserRepository userRepository;

    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    public User login(String username, String password) {
        User user = userRepository.findByUsername(username);
        if (user != null && user.getPassword().equals(password)) {
            return user;
        }
        return null;
    }
}

6.4 用户控制层

package com.example.demo.controller;

import com.example.demo.dto.LoginRequest;
import com.example.demo.dto.LoginResponse;
import com.example.demo.service.UserService;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserController {
    private final UserService userService;

    public UserController(UserService userService) {
        this.userService = userService;
    }

    @PostMapping("/login")