下面是一个完整的 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)
);
✅ 三、功能映射
功能模块 | 涉及表 |
---|---|
用户注册/登录 | users 、roles 、user_roles |
预订房间 | reservations 、rooms 、users |
入住管理 | check_ins 、reservations |
房态管理 | rooms 、room_types |
退房与结算 | check_ins 、payments |
员工管理 | employees |
报表统计 | 聚合 payments 、check_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 酒店管理系统后端框架,包括:
✅ 内容结构
- 数据库设计回顾(MySQL)
- Spring Boot 实体类(JPA 实现)
- Repository 接口(Spring Data JPA)
- Service 层接口与实现
- Controller 层 API 接口
- 接口文档(Swagger/OpenAPI 格式)
- 项目结构说明
- 启动配置说明
✅ 1. 数据库设计
已在上方详述,表结构包括:
users
,rooms
,room_types
,reservations
,check_ins
,payments
,employees
,roles
,user_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 文件打包(含示例数据) |
发表回复