基于SpringBoot2+vue3的相亲网站 📅 发布时间:2026/7/7 11:01:23 👁️ 浏览次数: 1. 演示地址后台http://xiangqinwangzhan.xiaobias.com/xiangqinwangzhan/admin/dist/index.html#/index前台http://xiangqinwangzhan.xiaobias.com/xiangqinwangzhan/front/index.html管理员:admin/admim用户a1/123456a2/12345自取地址https://fifteen.xiaobias.com/source/1702. 项目简介本项目是一个基于 Spring Boot MyBatis-Plus 开发的相亲网站旨在为用户提供一个线上相亲、婚礼服务信息交流的平台。系统分为前台用户端和后台管理端实现了用户注册登录、个人信息管理、相亲信息发布、婚礼公司展示、结婚案例分享、收藏、留言、预约等功能。后台管理员可以管理用户、相亲信息、婚礼公司、结婚案例以及各类字典数据。3. 技术栈后端框架Spring Boot 2.2.2、MyBatis-Plus、Apache Shiro、Spring MVC前端技术Vue.js Element UI后台管理、LayUI HTML/CSS/JavaScript前台页面数据库MySQL 5.7工具库FastJson、Hutool、Apache Commons、POIExcel导入导出第三方服务百度地图 API用于位置服务、百度AI人脸比对其他Maven、Thymeleaf、JWT通过Token实现身份认证4. 详细介绍4.1 系统架构系统采用前后端分离设计后端提供 RESTful API前端分为两个独立项目前台用户端面向普通用户提供相亲信息浏览、婚礼公司查询、结婚案例查看、收藏、留言、预约等功能。后台管理端面向管理员提供对用户、相亲信息、婚礼公司、结婚案例、字典数据、轮播图等的增删改查管理。4.2 功能模块4.2.1 用户模块用户注册、登录、密码重置。个人中心查看和修改个人信息头像、姓名、手机号、身份证号等。权限控制用户登录后才能进行收藏、留言、预约等操作。4.2.2 相亲信息模块用户可发布自己的相亲资料姓名、性别、照片、属相、有无子女、血型、体重、职业、公司性质、月薪、个人介绍、工作情况、家庭情况、择偶意向。支持按姓名、性别等条件搜索相亲信息。查看相亲详情并可进行留言、收藏操作。4.2.3 婚礼公司模块展示婚礼公司信息公司名称、照片、位置、规模、注册资金、公司介绍。用户可按公司名称搜索查看详情并可收藏或预约该婚礼公司。预约时需选择预约时间系统生成唯一预约编号。4.2.4 结婚案例模块展示结婚案例案例编号、案例名称、照片、案例详情。用户可按案例编号、案例名称搜索查看详情并可收藏案例。4.2.5 收藏与留言模块用户可收藏感兴趣的相亲信息、婚礼公司、结婚案例并在个人中心查看收藏列表。用户可对相亲信息发表留言管理员可在后台回复留言。4.2.6 字典管理模块系统通过字典表dictionary管理各类下拉选项如性别类型、收藏类型等。管理员可在后台动态添加、修改字典项。4.2.7 轮播图管理管理员可配置前台首页的轮播图轮播图路径存储在config表中。4.2.8 后台管理管理员登录后可管理所有用户、相亲信息、婚礼公司、结婚案例、字典数据、轮播图等。支持对留言的回复对预约记录的管理。4.3 数据库设计主要表结构yonghu用户表存储用户账号、密码、姓名、手机号、身份证号、头像。xiangqin相亲信息表关联用户包含详细个人信息。hunligongsi婚礼公司表存储公司信息。jiehunanli结婚案例表存储案例信息。xiangqin_liuyan相亲留言表存储用户留言及管理员回复。hunligongsi_order婚礼公司预约表记录用户对婚礼公司的预约。*_collection收藏表分别记录用户对相亲、婚礼公司、结婚案例的收藏。dictionary字典表用于管理系统下拉选项。config配置表存储轮播图路径等系统配置。users管理员表。token用户登录凭证表用于Token管理。5. 部分代码5.1 用户实体类YonghuEntity.javapackagecom.entity;importcom.baomidou.mybatisplus.annotations.TableId;importcom.baomidou.mybatisplus.annotations.TableName;importcom.fasterxml.jackson.annotation.JsonFormat;importorg.springframework.format.annotation.DateTimeFormat;importjava.io.Serializable;importjava.util.Date;TableName(yonghu)publicclassYonghuEntityimplementsSerializable{privatestaticfinallongserialVersionUID1L;TableIdprivateIntegerid;privateStringusername;// 账户privateStringpassword;// 密码privateStringyonghuName;// 用户姓名privateStringyonghuPhone;// 用户手机号privateStringyonghuIdNumber;// 用户身份证号privateStringyonghuPhoto;// 用户头像JsonFormat(localezh,timezoneGMT8,patternyyyy-MM-dd HH:mm:ss)DateTimeFormatprivateDatecreateTime;// 创建时间// 省略 getter/setter 方法}5.2 相亲控制器XiangqinController.javapackagecom.controller;importcom.alibaba.fastjson.JSONObject;importcom.annotation.IgnoreAuth;importcom.baomidou.mybatisplus.mapper.EntityWrapper;importcom.baomidou.mybatisplus.mapper.Wrapper;importcom.entity.XiangqinEntity;importcom.entity.view.XiangqinView;importcom.service.DictionaryService;importcom.service.XiangqinService;importcom.utils.PageUtils;importcom.utils.R;importorg.slf4j.Logger;importorg.slf4j.LoggerFactory;importorg.springframework.beans.BeanUtils;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.web.bind.annotation.*;importjavax.servlet.http.HttpServletRequest;importjava.util.Arrays;importjava.util.List;importjava.util.Map;RestControllerRequestMapping(/xiangqin)publicclassXiangqinController{privatestaticfinalLoggerloggerLoggerFactory.getLogger(XiangqinController.class);AutowiredprivateXiangqinServicexiangqinService;AutowiredprivateDictionaryServicedictionaryService;/** * 前端列表公开访问 */IgnoreAuthRequestMapping(/list)publicRlist(RequestParamMapString,Objectparams,HttpServletRequestrequest){// 分页查询PageUtilspagexiangqinService.queryPage(params);ListXiangqinViewlist(ListXiangqinView)page.getList();// 字典转换for(XiangqinViewc:list){dictionaryService.dictionaryConvert(c,request);}returnR.ok().put(data,page);}/** * 前端详情 */RequestMapping(/detail/{id})publicRdetail(PathVariable(id)Longid,HttpServletRequestrequest){XiangqinEntityxiangqinxiangqinService.selectById(id);if(xiangqin!null){XiangqinViewviewnewXiangqinView();BeanUtils.copyProperties(xiangqin,view);dictionaryService.dictionaryConvert(view,request);returnR.ok().put(data,view);}returnR.error(511,查不到数据);}/** * 前端保存用户添加相亲信息 */RequestMapping(/add)publicRadd(RequestBodyXiangqinEntityxiangqin,HttpServletRequestrequest){// 检查重复WrapperXiangqinEntityqueryWrappernewEntityWrapperXiangqinEntity().eq(yonghu_id,xiangqin.getYonghuId()).eq(xiangqin_name,xiangqin.getXiangqinName());XiangqinEntityexistxiangqinService.selectOne(queryWrapper);if(existnull){xiangqin.setInsertTime(newDate());xiangqin.setCreateTime(newDate());xiangqinService.insert(xiangqin);returnR.ok();}else{returnR.error(511,表中有相同数据);}}// 其他方法删除、修改等略...}5.3 字典服务DictionaryServiceImpl.javapackagecom.service.impl;importcom.utils.StringUtil;importorg.springframework.stereotype.Service;importcom.baomidou.mybatisplus.service.impl.ServiceImpl;importcom.dao.DictionaryDao;importcom.entity.DictionaryEntity;importcom.service.DictionaryService;importcom.utils.PageUtils;importjavax.servlet.ServletContext;importjavax.servlet.http.HttpServletRequest;importjava.lang.reflect.Field;importjava.util.*;Service(dictionaryService)publicclassDictionaryServiceImplextendsServiceImplDictionaryDao,DictionaryEntityimplementsDictionaryService{OverridepublicPageUtilsqueryPage(MapString,Objectparams){// 分页查询实现...}/** * 字典转换将实体中的Types字段值转换为对应的中文名称 */OverridepublicvoiddictionaryConvert(Objectobj,HttpServletRequestrequest){try{if(objnull)return;ListStringfieldNameListnewArrayList();Class?tempClassobj.getClass();while(tempClass!null){Field[]declaredFieldstempClass.getDeclaredFields();for(Fieldf:declaredFields){f.setAccessible(true);if(f.getType().getName().equals(java.lang.Integer)f.getName().contains(Types)){fieldNameList.add(f.getName());}}tempClasstempClass.getSuperclass();}ServletContextservletContextrequest.getServletContext();MapString,MapInteger,StringdictionaryMap(MapString,MapInteger,String)servletContext.getAttribute(dictionaryMap);for(Strings:fieldNameList){Fieldtypesobj.getClass().getDeclaredField(s);Fieldvalueobj.getClass().getDeclaredField(s.replace(Types,Value));types.setAccessible(true);value.setAccessible(true);if(StringUtil.isNotEmpty(String.valueOf(types.get(obj)))){intcodeIndexInteger.parseInt(String.valueOf(types.get(obj)));// 将字段名转换为字典码如 sexTypes - sex_typesStringdicCodes.replaceAll(([A-Z]),_$1).toLowerCase();StringindexNamedictionaryMap.get(dicCode).get(codeIndex);value.set(obj,indexName);}else{value.set(obj,);}}}catch(Exceptione){e.printStackTrace();}}}5.4 拦截器配置InterceptorConfig.javapackagecom.config;importcom.interceptor.AuthorizationInterceptor;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;importorg.springframework.web.servlet.config.annotation.InterceptorRegistry;importorg.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;importorg.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;ConfigurationpublicclassInterceptorConfigextendsWebMvcConfigurationSupport{BeanpublicAuthorizationInterceptorgetAuthorizationInterceptor(){returnnewAuthorizationInterceptor();}OverridepublicvoidaddInterceptors(InterceptorRegistryregistry){registry.addInterceptor(getAuthorizationInterceptor()).addPathPatterns(/**).excludePathPatterns(/static/**);super.addInterceptors(registry);}/** * 配置静态资源访问 */OverridepublicvoidaddResourceHandlers(ResourceHandlerRegistryregistry){registry.addResourceHandler(/**).addResourceLocations(classpath:/resources/).addResourceLocations(classpath:/static/).addResourceLocations(classpath:/admin/).addResourceLocations(classpath:/front/).addResourceLocations(classpath:/public/);super.addResourceHandlers(registry);}}6. 部分截图7. 项目总结本项目是一个完整的相亲网站系统基于 Spring Boot 和 MyBatis-Plus 构建后端采用前后端分离架构。前端分为面向用户的 LayUI 页面和面向管理员的 Vue Element UI 后台。系统实现了用户注册登录、相亲信息发布、婚礼公司展示、结婚案例分享、收藏、留言、预约等功能并包含完善的权限控制和数据字典管理。项目结构清晰代码规范适合作为 Java Web 开发的入门学习和二次开发的基础。
LeetCode——206(反转链表) 题目链接 https://leetcode.cn/problems/reverse-linked-list/ 题目描述 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 示例 1: 输入:head [1,2,3,4,5] 输出:[5,4,3,2,1] 示例 2: 输入… 2026/7/7 1:32:38
AtCoder448总结C D C题目描述:每次查询给出K个位置,删除这些位置的数据,然后求删除后最小的数大题思路:K的值很小,在5以内,所以就干脆直接查看前K小的数据。只需要查询没有被删的最小的数就可以了。如果K是4,删除了… 2026/7/6 18:37:46
计算机毕业设计springboot水产养殖管理系统 基于SpringBoot框架的水产品养殖信息化服务平台 智慧渔业生产管理与溯源系统的设计与实现 计算机毕业设计springboot水产养殖管理系统zz0r7 (配套有源码 程序 mysql数据库 论文) 本套源码可以在文本联xi,先看具体系统功能演示视频领取,可分享源码参考。随着互联网技术的深度渗透,传统水产养殖业正面临从经验驱动向数据驱… 2026/7/6 21:56:37
SOFAStack 4.0 软件供应链安全实战:集成 SCA、IAST、RASP 3 大核心工具 SOFAStack 4.0 软件供应链安全实战:集成 SCA、IAST、RASP 三大核心工具金融行业的数字化转型正在加速推进,而安全始终是这一进程的基石。随着开源组件和第三方依赖的广泛使用,软件供应链安全已成为企业面临的最大挑战之一。Gartner预测&#… 2026/7/8 2:57:42
Memory记忆系统:让AI拥有长期经验,实现类人连续交互 Memory记忆系统:让AI拥有长期经验,实现类人连续交互 原生大模型是无状态的,每一轮对话都会清空上下文,无法记住用户历史偏好、过往交互事件、长期业务经验,只能做单次问答。Memory(记忆系统)是A… 2026/7/8 2:57:42
商标注册被驳回?别慌,3步教你高效应对与复审 收到驳回通知书先别放弃,90%的驳回都有复审争取空间,关键在于策略。 前言 好不容易设计好Logo、产品准备上线,商标注册却一纸驳回——这是很多开发者踩过的坑。 但商标被驳回 ≠ 商标彻底无效。根据《商标法》第三十四条,申请人可… 2026/7/8 2:55:41
xm转mp3怎么弄?喜马拉雅下载的有声书放不进MP3,5种方法实测 花了几百块在喜马拉雅买了有声小说和课程,下载到本地全是.xm后缀,想拷到MP3里通勤路上听,结果根本打不开。折腾了半个月,把网上各种xm转mp3的方法试了一圈,整理出5个真正管用的。一、xm到底是什么格式?xm是… 2026/7/8 2:53:37
2026年专业谷歌SEO公司怎么选,避坑指南 对于外贸企业来说,独立站谷歌SEO的年度投入并非一个固定数字,而是一套可弹性配置的预算体系。根据2025—2026年行业数据,企业一年的SEO投入大致可分为三个层次:基础型年费约1.5万—5万元,中型企业方案约5万—10万元&am… 2026/7/8 2:53:37
LinkSwift:九大网盘直链下载助手完整指南,快速免费获取高速下载链接 LinkSwift:九大网盘直链下载助手完整指南,快速免费获取高速下载链接 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云… 2026/7/8 2:53:37
BetterNCM安装器:高效管理网易云插件的最佳选择 BetterNCM安装器:高效管理网易云插件的最佳选择 【免费下载链接】BetterNCM-Installer 一键安装 Better 系软件 项目地址: https://gitcode.com/gh_mirrors/be/BetterNCM-Installer 还在为网易云音乐插件的繁琐安装流程而烦恼吗?BetterNCM安装器是… 2026/7/8 0:02:48
运动控制系统安全设置对比:ECI3808的3种限位保护与急停逻辑实现 运动控制系统安全机制深度解析:限位保护与急停逻辑的设计哲学在精密制造与自动化领域,运动控制系统的安全设计绝非简单的功能堆砌,而是一套融合了机械工程、电气原理和软件算法的防御体系。当一台数控机床以每分钟数万转的速度运转࿰… 2026/7/8 0:06:48
AI大模型应用开发:小白也能抓住的红利风口,收藏这篇入门指南! 文章指出,虽然微软等科技巨头在裁员,但英伟达等公司却在积极扩招AI相关人才,尤其是具身智能、仿真等领域。AI行业正在经历结构性调整,传统岗位被淘汰,而大模型应用开发等新岗位需求旺盛。对于想转行或学习AI的普通人来… 2026/7/8 0:10:49
6个月转型AI工程师:实战路径与核心技能 1. 项目概述:6个月转型AI工程师的可行性路径在2023年大模型技术爆发的背景下,AI工程师岗位需求同比增长217%(LinkedIn数据)。不同于传统算法工程师需要3-5年培养周期,现代AI工程师更侧重工程化落地能力。我在硅谷科技公… 2026/7/7 11:26:57
TPAFE0808与PIC18F87K22的多通道信号采集方案 1. 项目背景与核心需求在工业自动化、医疗设备和科研仪器等领域,多通道信号采集与系统监测是基础且关键的技术需求。传统方案往往面临通道数量不足、信号调理复杂、系统集成度低等问题。TPAFE0808作为一款8通道模拟前端芯片,与PIC18F87K22微控制器的组合… 2026/7/7 11:26:57
STC3115与PIC18LF26K80构建高精度电池管理系统 1. STC3115与PIC18LF26K80在电池管理系统中的核心价值在现代电子设备中,电池管理系统(BMS)的重要性不亚于设备的核心处理器。STC3115作为一款高精度电池电量监测IC,与PIC18LF26K80微控制器的组合,构成了一个既能精确监控又能智能管理的完整解… 2026/7/7 11:26:58