基于Java的旅游民宿信息管理系统设计与实现 - 代码讲解文档

在这里插入图片描述

一、项目概述

本项目是一个基于SpringBoot框架的旅游民宿信息管理系统,为游客和民宿商家提供一个便捷的民宿预订平台。系统实现了民宿信息展示、在线预订、商家管理、新闻公告等核心功能,支持用户、商家和管理员三种用户角色。

1.1 系统主要功能

  • 民宿信息管理:商家发布民宿信息,包含房间类型、价格、设施等
  • 民宿预订:用户在线预订民宿房间
  • 商家入驻:商家注册入驻平台
  • 收藏功能:用户收藏感兴趣的民宿
  • 新闻公告:发布平台公告和行业资讯
  • 关于我们:平台介绍与联系方式

1.2 技术选型

技术 版本 说明
SpringBoot 2.x 核心框架
MyBatis-Plus 2.3 ORM框架
MySQL 默认 关系型数据库
WebSocket 内置 实时通信
FastJSON 1.2.8 JSON处理
Hutool 4.0.12 Java工具库
POI 3.11 Excel导出
百度AI SDK 4.4.1 智能识别

二、技术架构

2.1 项目结构

springboot414j55j2/
├── src/main/java/com/
│   ├── annotation/        # 自定义注解
│   ├── config/            # 配置类
│   ├── controller/        # 控制器层(10个)
│   ├── dao/               # 数据访问层
│   ├── entity/            # 实体类
│   │   ├── model/         # Model对象
│   │   ├── view/          # View对象
│   │   └ vo/              # VO对象
│   ├── handler/           # 全局异常处理
│   ├── interceptor/       # 权限拦截器
│   ├── service/           # 业务逻辑层
│   │   └ impl/            # Service实现
│   └── utils/             # 工具类
├── src/main/resources/
│   ├── mapper/            # MyBatis映射
│   └── application.yml    # SpringBoot配置
└── pom.xml

2.2 Controller层模块

Controller 功能说明
MinsuxinxiController 民宿信息管理
YudingminsuController 民宿预订管理
ShangjiaController 商家管理
YonghuController 用户管理
StoreupController 收藏功能
NewsController 新闻公告
NewstypeController 新闻分类
AboutusController 关于我们
SystemintroController 系统简介
UsersController 管理员

三、核心功能模块讲解

3.1 民宿信息管理模块

MinsuxinxiController.java
@RestController
@RequestMapping("/minsuxinxi")
public class MinsuxinxiController {
    @Autowired
    private MinsuxinxiService minsuxinxiService;
    @Autowired
    private StoreupService storeupService;
    
    // 后台列表查询(商家只能查看自己的民宿)
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params, MinsuxinxiEntity minsuxinxi, HttpServletRequest request) {
        String tableName = request.getSession().getAttribute("tableName").toString();
        if(tableName.equals("shangjia")) {
            minsuxinxi.setShangjiazhanghao((String)request.getSession().getAttribute("username"));
        }
        EntityWrapper<MinsuxinxiEntity> ew = new EntityWrapper<>();
        PageUtils page = minsuxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, minsuxinxi), params), params));
        Map<String, String> deSens = new HashMap<>();
        DeSensUtil.desensitize(page, deSens);
        return R.ok().put("data", page);
    }
    
    // 前台列表(无需登录)
    @IgnoreAuth
    @RequestMapping("/list")
    public R list(@RequestParam Map<String, Object> params, MinsuxinxiEntity minsuxinxi, HttpServletRequest request) {
        EntityWrapper<MinsuxinxiEntity> ew = new EntityWrapper<>();
        PageUtils page = minsuxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, minsuxinxi), params), params));
        return R.ok().put("data", page);
    }
    
    // 查询接口
    @RequestMapping("/query")
    public R query(MinsuxinxiEntity minsuxinxi) {
        EntityWrapper<MinsuxinxiEntity> ew = new EntityWrapper<>();
        ew.allEq(MPUtil.allEQMapPre(minsuxinxi, "minsuxinxi"));
        MinsuxinxiView minsuxinxiView = minsuxinxiService.selectView(ew);
        return R.ok("查询民宿信息成功").put("data", minsuxinxiView);
    }
    
    // 保存民宿信息
    @RequestMapping("/save")
    public R save(@RequestBody MinsuxinxiEntity minsuxinxi, HttpServletRequest request) {
        minsuxinxiService.insert(minsuxinxi);
        return R.ok().put("data", minsuxinxi.getId());
    }
    
    // 更新民宿信息
    @RequestMapping("/update")
    @Transactional
    public R update(@RequestBody MinsuxinxiEntity minsuxinxi, HttpServletRequest request) {
        minsuxinxiService.updateById(minsuxinxi);
        return R.ok();
    }
    
    // 删除民宿信息
    @RequestMapping("/delete")
    public R delete(@RequestBody Long[] ids) {
        minsuxinxiService.deleteBatchIds(Arrays.asList(ids));
        return R.ok();
    }
}
Entity层 - MinsuxinxiEntity.java

民宿信息实体类:

字段名 类型 说明
id Long 主键ID(自增)
minsumingcheng String 民宿名称
minsuxingji String 民宿星级
minsutupian String 民宿图片
minsudizhi String 民宿地址
fangjianleixing String 房间类型
yiwanjiage Double 一晚价格
fangjianzhuangtai String 房间状态
fabushijian Date 发布时间
fangjiansheshi String 房间设施
minsujieshao String 民宿介绍
shangjiazhanghao String 商家账号
shangjiamingcheng String 商家名称
lianxidianhua String 联系电话
storeupnum Integer 收藏数
addtime Date 创建时间

3.2 民宿预订模块

YudingminsuController.java

民宿预订流程:

  1. 用户选择民宿和入住日期
  2. 提交预订申请
  3. 商家确认预订
  4. 用户按时入住
YudingminsuEntity.java

预订信息实体:

字段 类型 说明
id Long 主键
minsumingcheng String 民宿名称
fangjianleixing String 房间类型
yiwanjiage Double 价格
yudingriqi Date 预订日期
ruzhutianshu Integer 入住天数
zongjiage Double 总价
yonghuzhanghao String 用户账号
yonghuxingming String 用户姓名
shangjiazhanghao String 商家账号
shangjiamingcheng String 商家名称

3.3 商家管理模块

ShangjiaController.java

商家入驻流程:

  1. 商家注册账号
  2. 填写商家信息
  3. 管理员审核
  4. 开始发布民宿
ShangjiaEntity.java

商家实体:

字段 类型 说明
id Long 主键
shangjiazhanghao String 商家账号
mima String 密码
shangjiamingcheng String 商家名称
lianxidianhua String 联系电话
youxiang String 邮箱
shangjiajieshao String 商家介绍
touxiang String 封面图片

3.4 收藏功能模块

StoreupController.java

用户可收藏感兴趣的民宿,便于后续查看:

@RestController
@RequestMapping("/storeup")
public class StoreupController {
    @Autowired
    private StoreupService storeupService;
    
    // 添加收藏
    @RequestMapping("/save")
    public R save(@RequestBody StoreupEntity storeup, HttpServletRequest request) {
        storeup.setUserid((Long)request.getSession().getAttribute("userId"));
        storeupService.insert(storeup);
        return R.ok();
    }
    
    // 取消收藏
    @RequestMapping("/delete")
    public R delete(@RequestBody Long[] ids) {
        storeupService.deleteBatchIds(Arrays.asList(ids));
        return R.ok();
    }
}
StoreupEntity.java

收藏实体:

字段 类型 说明
id Long 主键
userid Long 用户ID
refid Long 关联民宿ID
tablename String 表名(minsuxinxi)
name String 民宿名称
picture String 图片
type Integer 类型(1收藏)
inteltime Date 收藏时间

3.5 新闻公告模块

NewsController.java

发布平台公告、行业资讯:

  • 公告标题
  • 公告内容
  • 发布时间
  • 公告分类

四、数据库设计分析

4.1 主要数据表结构

minsuxinxi(民宿信息表)
字段 类型 约束 说明
id bigint PK, AUTO 主键
minsumingcheng varchar(100) NOT NULL 民宿名称
minsuxingji varchar(20) 星级
minsutupian varchar(200) 图片URL
minsudizhi varchar(200) 地址
fangjianleixing varchar(50) 房间类型
yiwanjiage double 一晚价格
fangjianzhuangtai varchar(20) 房间状态
fabushijian date 发布时间
fangjiansheshi varchar(200) 房间设施
minsujieshao text 民宿介绍
shangjiazhanghao varchar(50) FK 商家账号
lianxidianhua varchar(20) 联系电话
storeupnum int DEFAULT 0 收藏数
yudingminsu(民宿预订表)
字段 类型 说明
id bigint 主键
minsumingcheng varchar 民宿名称
fangjianleixing varchar 房间类型
yudingriqi date 预订日期
ruzhutianshu int 入住天数
zongjiage double 总价
yonghuzhanghao varchar 用户账号
shangjiazhanghao varchar 商家账号
shangjia(商家表)
字段 类型 说明
id bigint 主键
shangjiazhanghao varchar(50) 商家账号
mima varchar(50) 密码
shangjiamingcheng varchar(100) 商家名称
lianxidianhua varchar(20) 联系电话
youxiang varchar(50) 邵箱
storeup(收藏表)
字段 类型 说明
id bigint 主键
userid bigint 用户ID
refid bigint 关联民宿ID
tablename varchar(50) 表名
inteltime datetime 收藏时间

4.2 数据表关系

  • 商家(shangjia) 1:N 发布民宿(minsuxinxi)
  • 用户(yonghu) 1:N 预订民宿(yudingminsu)
  • 民宿(minsuxinxi) 1:N 预订记录(yudingminsu)
  • 用户(yonghu) 1:N 收藏(storeup)

五、关键代码解析

5.1 数据权限隔离

商家只能管理自己发布的民宿:

String tableName = request.getSession().getAttribute("tableName").toString();
if(tableName.equals("shangjia")) {
    minsuxinxi.setShangjiazhanghao((String)request.getSession().getAttribute("username"));
}

5.2 分页查询

PageUtils page = minsuxinxiService.queryPage(params, 
    MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, minsuxinxi), params), params));
// 返回格式:{list: [], totalCount: 100, pageSize: 10, totalPage: 10, currPage: 1}

5.3 事务管理

@RequestMapping("/update")
@Transactional
public R update(@RequestBody MinsuxinxiEntity minsuxinxi, HttpServletRequest request) {
    minsuxinxiService.updateById(minsuxinxi);
    return R.ok();
}

5.4 数据脱敏

Map<String, String> deSens = new HashMap<>();
DeSensUtil.desensitize(page, deSens);

对联系电话、邮箱等敏感信息进行脱敏处理。

5.5 多条件查询

支持按名称、地址、价格范围等多条件组合查询:

// 构建查询条件
EntityWrapper<MinsuxinxiEntity> ew = new EntityWrapper<>();
if(minsuxinxi.getMinsumingcheng() != null) {
    ew.like("minsumingcheng", minsuxinxi.getMinsumingcheng());
}
if(minsuxinxi.getMinsudizhi() != null) {
    ew.like("minsudizhi", minsuxinxi.getMinsudizhi());
}
// 价格范围查询
if(priceStart != null) ew.ge("yiwanjiage", priceStart);
if(priceEnd != null) ew.le("yiwanjiage", priceEnd);

六、项目亮点总结

  1. 商家入驻机制:商家可注册入驻平台发布民宿
  2. 数据权限隔离:商家只能管理自己的民宿信息
  3. 房间状态管理:实时更新房间预订状态
  4. 收藏功能:用户可收藏感兴趣的民宿
  5. 数据脱敏保护:敏感信息自动脱敏
  6. 多条件查询:支持名称、地址、价格等多维度搜索
  7. 价格计算:自动计算入住总价

七、运行部署说明

7.1 环境要求

  • JDK 1.8+
  • MySQL 5.7+
  • Maven 3.x

7.2 配置步骤

  1. 导入数据库SQL脚本
  2. 修改application.yml数据库连接
  3. 执行:mvn spring-boot:run

7.3 访问地址

  • 前台:http://localhost:8080/springboot414j55j2/front
  • 后台:http://localhost:8080/springboot414j55j2/admin

更多推荐