下面是一个完整的 Spring Boot 酒店管理系统数据库设计方案,涵盖常见功能模块,包括:

  • 房间管理
  • 用户(住客)信息管理
  • 预订管理
  • 入住与退房
  • 员工与权限管理
  • 收费与账单

✅ 一、数据库概览(核心表结构)

表名说明
users用户信息表(住客、管理员)
rooms房间信息表
room_types房型信息(单人间、双人间等)
reservations预订记录表
check_ins实际入住记录表
payments支付记录表
employees员工信息表
roles / user_roles角色权限(可选)

✅ 二、建表 SQL(MySQL 示例)

1. 用户表(users)

CREATE TABLE users (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(50) NOT NULL UNIQUE,
    password VARCHAR(100) NOT NULL,
    full_name VARCHAR(100),
    phone VARCHAR(20),
    email VARCHAR(100),
    id_card VARCHAR(30),
    user_type ENUM('guest', 'admin') DEFAULT 'guest',
    create_time DATETIME DEFAULT CURRENT_TIMESTAMP
);

2. 房型表(room_types)

CREATE TABLE room_types (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50) NOT NULL,
    description TEXT,
    price DECIMAL(10,2) NOT NULL
);

3. 房间表(rooms)

CREATE TABLE rooms (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    room_number VARCHAR(20) NOT NULL UNIQUE,
    room_type_id BIGINT,
    floor INT,
    status ENUM('available', 'booked', 'occupied', 'maintenance') DEFAULT 'available',
    FOREIGN KEY (room_type_id) REFERENCES room_types(id)
);

4. 预订记录(reservations)

CREATE TABLE reservations (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    user_id BIGINT,
    room_id BIGINT,
    check_in_date DATE,
    check_out_date DATE,
    status ENUM('reserved', 'cancelled', 'checked_in') DEFAULT 'reserved',
    create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (user_id) REFERENCES users(id),
    FOREIGN KEY (room_id) REFERENCES rooms(id)
);

5. 入住记录(check_ins)

CREATE TABLE check_ins (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    reservation_id BIGINT,
    actual_check_in DATETIME,
    actual_check_out DATETIME,
    is_paid BOOLEAN DEFAULT FALSE,
    FOREIGN KEY (reservation_id) REFERENCES reservations(id)
);

6. 支付记录(payments)

CREATE TABLE payments (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    check_in_id BIGINT,
    amount DECIMAL(10,2),
    payment_method ENUM('cash', 'credit_card', 'wechat', 'alipay'),
    pay_time DATETIME DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (check_in_id) REFERENCES check_ins(id)
);

7. 员工表(employees)

CREATE TABLE employees (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(100),
    role VARCHAR(50),
    phone VARCHAR(20),
    email VARCHAR(100),
    hire_date DATE
);

8. (可选)角色权限表(roles & user_roles)

CREATE TABLE roles (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50) UNIQUE
);

CREATE TABLE user_roles (
    user_id BIGINT,
    role_id BIGINT,
    PRIMARY KEY (user_id, role_id),
    FOREIGN KEY (user_id) REFERENCES users(id),
    FOREIGN KEY (role_id) REFERENCES roles(id)
);

✅ 三、功能映射

功能模块涉及表
用户注册/登录usersrolesuser_roles
预订房间reservationsroomsusers
入住管理check_insreservations
房态管理roomsroom_types
退房与结算check_inspayments
员工管理employees
报表统计聚合 paymentscheck_ins 数据

✅ 四、扩展建议

  • ✅ 增加图片表 room_images:展示房型图片;
  • ✅ 添加日志表 audit_logs:记录操作行为;
  • ✅ 添加 coupons 优惠券表,用于打折;
  • ✅ 可接入短信或微信通知:入住提醒等。

✅ 五、Spring Boot 对接建议

你可以基于此数据库设计使用:

  • ORM 框架:Spring Data JPA 或 MyBatis-Plus
  • 安全框架:Spring Security(用于登录权限)
  • 后端接口:RESTful API + Swagger 文档
  • 前端推荐:Vue、React 或 Thymeleaf(根据需求)

如你希望我提供以下内容,也可以继续:

  • ✅ Spring Boot + JPA 实体类代码(根据上面表设计)
  • ✅ Controller / Service 示例
  • ✅ 接口文档模板
  • ✅ 项目骨架初始化

非常好,下面我将为你提供一个完整的 Spring Boot 酒店管理系统后端框架,包括:


✅ 内容结构

  1. 数据库设计回顾(MySQL)
  2. Spring Boot 实体类(JPA 实现)
  3. Repository 接口(Spring Data JPA)
  4. Service 层接口与实现
  5. Controller 层 API 接口
  6. 接口文档(Swagger/OpenAPI 格式)
  7. 项目结构说明
  8. 启动配置说明

✅ 1. 数据库设计

已在上方详述,表结构包括:

  • usersroomsroom_typesreservationscheck_inspaymentsemployeesrolesuser_roles

✅ 2. 实体类(Entity)示例

📌 User 实体类

@Entity
@Table(name = "users")
public class User {
    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(unique = true, nullable = false)
    private String username;

    private String password;
    private String fullName;
    private String phone;
    private String email;
    private String idCard;

    @Enumerated(EnumType.STRING)
    private UserType userType;

    @Column(name = "create_time")
    private LocalDateTime createTime;

    public enum UserType {
        guest, admin
    }

    // Getters and Setters...
}

📌 Room 实体类

@Entity
@Table(name = "rooms")
public class Room {
    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(unique = true)
    private String roomNumber;

    @ManyToOne
    @JoinColumn(name = "room_type_id")
    private RoomType roomType;

    private int floor;

    @Enumerated(EnumType.STRING)
    private Status status;

    public enum Status {
        available, booked, occupied, maintenance
    }

    // Getters and Setters...
}

(其余实体类类似,我可以打包发全套)


✅ 3. Repository 接口

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

@Repository
public interface RoomRepository extends JpaRepository<Room, Long> {
    Optional<Room> findByRoomNumber(String roomNumber);
}

@Repository
public interface ReservationRepository extends JpaRepository<Reservation, Long> {
    List<Reservation> findByUserId(Long userId);
}

✅ 4. Service 接口与实现

public interface UserService {
    User register(User user);
    Optional<User> findById(Long id);
    User login(String username, String password);
}

@Service
public class UserServiceImpl implements UserService {

    @Autowired private UserRepository userRepo;

    @Override
    public User register(User user) {
        user.setUserType(User.UserType.guest);
        user.setCreateTime(LocalDateTime.now());
        return userRepo.save(user);
    }

    @Override
    public Optional<User> findById(Long id) {
        return userRepo.findById(id);
    }

    @Override
    public User login(String username, String password) {
        return userRepo.findByUsername(username)
                .filter(u -> u.getPassword().equals(password))
                .orElseThrow(() -> new RuntimeException("用户名或密码错误"));
    }
}

✅ 5. Controller 示例

@RestController
@RequestMapping("/api/users")
public class UserController {

    @Autowired private UserService userService;

    @PostMapping("/register")
    public ResponseEntity<User> register(@RequestBody User user) {
        return ResponseEntity.ok(userService.register(user));
    }

    @PostMapping("/login")
    public ResponseEntity<User> login(@RequestBody Map<String, String> body) {
        String username = body.get("username");
        String password = body.get("password");
        return ResponseEntity.ok(userService.login(username, password));
    }
}

✅ 6. Swagger 接口文档

在 pom.xml 中添加:

<dependency>
    <groupId>org.springdoc</groupId>
    <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
    <version>2.0.4</version>
</dependency>

启动后访问:

http://localhost:8080/swagger-ui.html

✅ 7. 项目结构建议

hotel-management/
├── controller/
│   └── UserController.java
├── entity/
│   └── User.java, Room.java, ...
├── repository/
│   └── UserRepository.java, ...
├── service/
│   └── UserService.java, UserServiceImpl.java
├── HotelManagementApplication.java
└── resources/
    ├── application.yml
    └── data.sql (初始数据)

✅ 8. application.yml 示例配置

server:
  port: 8080

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/hotel?useSSL=false
    username: root
    password: root
  jpa:
    hibernate:
      ddl-auto: update
    show-sql: true
    properties:
      hibernate:
        format_sql: true

✅ 后续内容提供

我可以继续为你生成:

模块内容
所有实体类(RoomType、Reservation、CheckIn、Payment、Employee)
所有 Controller / Service 实现
登录认证模块(基于 Spring Security + JWT)
前端 Vue3 管理后台页面模板(支持房态图/入住统计)
数据库 SQL 文件打包(含示例数据)