Java毕业设计优质选题汇总|2026‑2027届100个热门项目方向参考
·
前言
📌博主介绍:一线全栈工程师,毕设实战引路人。技术栈覆盖Java、Python、C#、PHP、Node.js及UniApp跨端开发,擅长多语言项目落地与架构设计。持续分享毕设源码、开题报告、技术选型心得与职场踩坑经验。用工程化思维写代码,帮你把毕设做成作品集。👍👍
毕业设计选题越来越重要,也越来越让同学感到焦虑。(切记先收藏起来)
很多同学不知道该如何确定题目,也不清楚导师真正关注的是什么,导致选题阶段浪费了很多时间。(选题指导)
其实,选题阶段最重要的不是一开始就想一个 “完美题目”,而是先把自己能做什么、感兴趣什么、导师可能认可什么理清楚。很多同学之所以选题困难,往往是因为没有把研究方向、题目来源、实践条件和论文写作要求结合起来考虑。(选题避坑)
如果选题没有做好,后面的开题、调研、实验、写作都会受到影响。因此,建议大家在正式确定题目之前,先多查资料、多和导师沟通,尽量选择一个既有研究价值、又有数据和案例支撑的题目。(有疑问可随时咨询,免费解答)
也可以参考一些优秀的毕业设计题目,帮助自己打开思路,避免走弯路(收藏,收藏,收藏~)

文章最下面,获取源码和数据库
Java选题参考
- 基于springboot的新农村自建房改造管理系统
- 在线教育平台系统
- 健身房管理系统
- 糖尿病患者智能饮食推荐系统
- 在线商品库存管理系统
- 基于springboot的自习室预约系统
- 基于springboot的在线考试系统设计与实现
- 校园失物招领与寻物启事智能匹配系统
- 宠物领养与回访管理系统
- 基于springboot的海绵课堂管理系统设计与实现
- 医院患者随访管理系统
- 个人舌像诊断系统
- 基于springboot的妇幼保健院专科预约挂号
- 羽毛球比赛管理系统
- 小区管理系统
- 社区养老志愿者管理系统
- 共享单车运行租赁管理系统
- 个性化学习助手
- 大学生跳蚤平台
- 水质监测系统
- 天猫智能家电销售数据分析可视化系统
- 校园二手交易
- 高校宿舍维修平台
- 餐厅订单管理系统
- 基于springboot的旅游智能推荐系统
- 农村智慧社区系统
- 基于springboot的游戏账号交易系统
- 基于springboot的租迹房屋租赁平台
- 运动方案智能生成与管理系统
- 网络学习资源管理系统
- 基于springboot的高校订餐系统
- 线上零食专卖店系统
- 基于springboot的学生学业预警与帮扶系统设计与实现
- 班团一体化管理系统
- OpenCV的课堂考勤系统
- 失踪儿童在线求助系统
- 校园志愿者管理系统
- 基于springboot的教室设备故障快速报修系统
- 江苏果尚食品特色农产品销售平台
- 基于springboot的校园闲置商品智能推荐系统
- 电商知产维权速办平台
- 基于springboot的校园招聘系统
- 基于ssm的社区超市管理系统
- 面向高校的教学资源访问日志清洗与热门课程推荐系统
- 汽车报废管理系统
- 智慧校园评测系统
- 基于ssm的高校心理援助系统
- 基于ssm的小区物业居民服务信息系统
- 社区共享工具平台
- 突发事件下粮食应急配送中心智能选址系统
- 智慧文旅个性化推荐与客流调控平台
- 游戏用户行为分析与个性化游戏推荐系统
- 商品采购系统
- 个人财务管理
- 校园交易平台
- 酒店管理系统
- 滑雪场管理系统
- 图书馆座位预约系统
- 校园领养网站
- 校园自习室预约系统
- 物联网智能硬件电商平台
- 基于ssm的高校大学生入伍管理系统
- 高考志愿辅助系统
- 健身房管理系统
- 高校智慧学工服务平台
- 校园社团活动管理系统
- 抗日宣传网站与制作
- 企业员工管理系统
- 企业专利信息管理系统
- 宠物商店管理系统
- 进出入管理系统
- 校园智能膳食管理系统
- 外卖订餐系统
- 流浪动物管理系统
- 公交线路管理系统
- 健身俱乐部系统
- 社区公益活动管理系统
- 智慧养老居家上门服务管理系统
- 基于ssm的带报修优先级的学生宿舍管理系统
- 跨境电商产品智能推荐系统
- 汽车销售管理平台
- 小微企业商务合同管理系统
- 基于ssm的个人收支记账系统设计与实现
- 校园图书借阅管理系统
- 小学生托管服务系统
- 健身房管理系统
- 基于ssm的家具销售平台
- 部队体能管理系统
- 贫困山区扶贫救助系统
- 房屋租赁系统
- 新疆旅游景点推荐系统
- 轻量版在线课程学习与刷题平台
- 烹饪技能学习系统
- 基于ssm的校园失物招领与寻物启事平台设计与实现
- 基于ssm的医疗影像归档与浏览系统
- 企业员工每日办公头条系统
- 基于ssm的云游安源红个人网站
- 柒柒酒肆点餐小程序
- 线上服装销售平台
- 智慧医疗信息管理平台
- 基于ssm的加密型个人记账系统
- 开封木版年画线上平台
- 个人学习计划管理系统
- 校园活动报名与签到管理系统
数据库参考
CREATE TABLE `upload` (
`upload_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '上传ID',
`name` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '文件名',
`path` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '访问路径',
`file` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '文件路径',
`display` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '显示顺序',
`father_id` int(11) DEFAULT '0' COMMENT '父级ID',
`dir` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '文件夹',
`type` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '文件类型',
PRIMARY KEY (`upload_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='文件上传';
insert into `upload` values ('1','movie.mp4','/upload/movie.mp4','',null,'0',null,'video');
DROP TABLE IF EXISTS `logistics_delivery`;
CREATE TABLE `logistics_delivery` (
`logistics_delivery_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '物流配送ID',
`order_number` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '订单号',
`product_name` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '商品名称',
`purchase_quantity` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '购买数量',
`total_transaction_amount` double(10,2) DEFAULT '0.00' COMMENT '交易总额',
`the_date_of_issuance` date DEFAULT NULL COMMENT '发货日期',
`delivery_number` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '配送订单',
`ordinary_users` int(11) DEFAULT '0' COMMENT '普通用户',
`shipping_address` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '收货地址',
`delivery_status` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '配送状态',
`signing_status` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '签收状态',
`recommend` int(11) NOT NULL DEFAULT '0' COMMENT '智能推荐',
`contact_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '联系人名字',
`merchant_id` int(11) DEFAULT NULL COMMENT '商家id',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`courier_type` int(11) NOT NULL DEFAULT '1' COMMENT '配送方式(1:商家配送,2:其他配送)',
`courier_id` int(11) DEFAULT NULL COMMENT '配送员ID',
`courier_name` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '配送员名字',
`courier_detail` longtext COLLATE utf8mb4_general_ci COMMENT '配送详情',
PRIMARY KEY (`logistics_delivery_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='物流配送';
DROP TABLE IF EXISTS `goods`;
CREATE TABLE `goods` (
`goods_id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT COMMENT '产品ID',
`title` varchar(125) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '标题',
`img` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '封面图:用于显示于产品列表页',
`description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '描述',
`price_ago` double(8,2) unsigned NOT NULL DEFAULT '0.00' COMMENT '原价',
`price` double(8,2) unsigned NOT NULL DEFAULT '0.00' COMMENT '卖价',
`sales` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '销量',
`inventory` int(11) NOT NULL DEFAULT '0' COMMENT '商品库存',
`type` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '商品分类',
`hits` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '点击量',
`content` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '正文',
`img_1` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '主图1',
`img_2` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '主图2',
`img_3` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '主图3',
`img_4` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '主图4',
`img_5` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '主图5',
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`customize_field` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '自定义字段',
`source_table` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '来源表',
`source_field` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '来源字段',
`source_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '来源ID',
`user_id` int(11) unsigned DEFAULT '0' COMMENT '添加人',
`integral` int(11) DEFAULT '0' COMMENT '积分',
`list_status` smallint(1) DEFAULT '1' COMMENT '上架状态(0:下架;1上架)',
PRIMARY KEY (`goods_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='商品信息';
CREATE TABLE `cart` (
`cart_id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '购物车ID',
`title` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '标题',
`img` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '0' COMMENT '图片',
`user_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '用户ID',
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`state` int(1) unsigned NOT NULL DEFAULT '0' COMMENT '状态:使用中,已失效',
`price` double(8,2) NOT NULL DEFAULT '0.00' COMMENT '单价',
`price_ago` double(8,2) NOT NULL DEFAULT '0.00' COMMENT '原价',
`price_count` double(10,2) NOT NULL DEFAULT '0.00' COMMENT '总价',
`num` int(8) unsigned NOT NULL DEFAULT '1' COMMENT '数量',
`goods_id` mediumint(8) unsigned NOT NULL COMMENT '商品id',
`type` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '未分类' COMMENT '商品分类',
`description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '描述',
`norms` varchar(64) COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '规格',
PRIMARY KEY (`cart_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='购物车';
DROP TABLE IF EXISTS `message_inform`;
CREATE TABLE `message_inform` (
`message_inform_id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '通知ID',
`user_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '通知人ID',
`title` varchar(255) DEFAULT NULL COMMENT '标题',
`state` varchar(255) DEFAULT NULL COMMENT '状态',
`type` varchar(64) DEFAULT NULL COMMENT '分类',
`content` varchar(255) DEFAULT NULL COMMENT '内容',
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`message_inform_id`) USING BTREE,
KEY `user_id` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='通知记录';
DROP TABLE IF EXISTS `order`;
CREATE TABLE `order` (
`order_id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '订单ID',
`order_number` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '订单号',
`goods_id` mediumint(8) unsigned NOT NULL COMMENT '商品ID',
`title` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '商品标题',
`img` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '商品图片',
`price` double(10,2) unsigned NOT NULL DEFAULT '0.00' COMMENT '价格',
`price_ago` double(10,2) unsigned NOT NULL DEFAULT '0.00' COMMENT '原价',
`num` int(8) NOT NULL DEFAULT '1' COMMENT '数量',
`price_count` double(8,2) unsigned NOT NULL DEFAULT '0.00' COMMENT '总价',
`norms` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '规格',
`type` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '未分类' COMMENT '商品分类',
`contact_name` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '联系人姓名',
`contact_email` varchar(125) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '联系人邮箱',
`contact_phone` varchar(11) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '联系人手机',
`contact_address` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '收件地址',
`postal_code` varchar(9) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '邮政编码',
`user_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '买家ID',
`merchant_id` mediumint(8) unsigned NOT NULL DEFAULT '0' COMMENT '商家ID',
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '描述',
`state` varchar(16) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '待付款' COMMENT '订单状态:待付款,待发货,待签收,已签收,待退款,已退款,已拒绝,已完成',
`remark` text CHARACTER SET utf8 COLLATE utf8_general_ci COMMENT '订单备注',
`delivery_state` varchar(16) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT '未配送' COMMENT '发货状态:未配送,已配送',
`vip_discount` double(10,2) DEFAULT '0.00' COMMENT '折扣',
`integral` int(11) DEFAULT '0' COMMENT '积分',
`buy_type` tinyint(2) DEFAULT '1' COMMENT '1-全额购买,2-积分兑换,3-钱包购买',
`desc` varchar(64) COLLATE utf8mb4_general_ci DEFAULT '其他原因' COMMENT '取消订单原因',
PRIMARY KEY (`order_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='订单';
DROP TABLE IF EXISTS `user_group`;
CREATE TABLE `user_group` (
`group_id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT COMMENT '用户组ID',
`display` smallint(4) unsigned NOT NULL DEFAULT '100' COMMENT '显示顺序',
`name` varchar(16) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '名称',
`description` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '描述',
`source_table` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '来源表',
`source_field` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '来源字段',
`source_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '来源ID',
`register` smallint(1) unsigned DEFAULT '0' COMMENT '注册位置',
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`group_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='用户组';
DROP TABLE IF EXISTS `article`;
CREATE TABLE `article` (
`article_id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT COMMENT '文章id',
`title` varchar(125) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '标题',
`type` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '0' COMMENT '文章分类',
`hits` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '点击数',
`praise_len` int(11) NOT NULL DEFAULT '0' COMMENT '点赞数',
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`source` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '来源',
`url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '来源地址',
`tag` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '标签',
`content` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '正文',
`img` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '封面图',
`description` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '文章描述',
PRIMARY KEY (`article_id`,`title`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='文章';
DROP TABLE IF EXISTS `access_token`;
CREATE TABLE `access_token` (
`token_id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '临时访问牌ID',
`token` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '临时访问牌',
`info` text CHARACTER SET utf8 COLLATE utf8_general_ci COMMENT '信息',
`maxage` int(2) NOT NULL DEFAULT '2' COMMENT '最大寿命:默认2小时',
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`user_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '用户编号',
PRIMARY KEY (`token_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='登陆访问时长';
DROP TABLE IF EXISTS `code_token`;
CREATE TABLE `code_token` (
`code_token_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '验证码ID',
`token` varchar(255) CHARACTER SET latin1 COLLATE latin1_swedish_ci DEFAULT NULL COMMENT '令牌',
`code` varchar(255) CHARACTER SET latin1 COLLATE latin1_swedish_ci DEFAULT NULL COMMENT '验证码',
`expire_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '失效时间',
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`code_token_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=COMPACT COMMENT='验证码';
DROP TABLE IF EXISTS `collect`;
CREATE TABLE `collect` (
`collect_id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '收藏ID',
`user_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '收藏人ID',
`source_table` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '来源表',
`source_field` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '来源字段',
`source_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '来源ID',
`title` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '标题',
`img` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '封面',
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`collect_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='收藏';
DROP TABLE IF EXISTS `notice`;
CREATE TABLE `notice` (
`notice_id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT COMMENT '公告ID',
`title` varchar(125) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '标题',
`content` longtext CHARACTER SET utf8 COLLATE utf8_general_ci COMMENT '正文',
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`notice_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='公告';
代码参考
* 宠物商城:(PetMall)表控制层
*
*/
@RestController
@RequestMapping("/pet_mall")
public class PetMallController extends BaseController<PetMall, PetMallService> {
/**
* 宠物商城对象
*/
@Autowired
public PetMallController(PetMallService service) {
setService(service);
}
@Autowired
private GoodsService goodsService;
@PostMapping("/add")
@Transactional
public Map<String, Object> add(HttpServletRequest request) throws IOException {
Map<String,Object> paramMap = service.readBody(request.getReader());
paramMap.entrySet().removeIf(entry -> {
Object value = entry.getValue();
return value instanceof String && ((String) value).isEmpty();
});
PetMall pet_mall = new PetMall();
pet_mall.setPlace_of_origin_of_the_product(paramMap.get("place_of_origin_of_the_product")==null?null:String.valueOf(paramMap.get("place_of_origin_of_the_product")));
pet_mall.setHits(paramMap.get("hits")==null?null:Integer.valueOf(String.valueOf(paramMap.get("hits"))));
pet_mall.setCart_title(paramMap.get("cart_title")==null?null:String.valueOf(paramMap.get("cart_title")));
pet_mall.setCart_img(paramMap.get("cart_img")==null?null:String.valueOf(paramMap.get("cart_img")));
pet_mall.setCart_description(paramMap.get("cart_description")==null?null:String.valueOf(paramMap.get("cart_description")));
pet_mall.setCart_price_ago(paramMap.get("cart_price_ago")==null?null:Double.valueOf(String.valueOf(paramMap.get("cart_price_ago"))));
pet_mall.setCart_price(paramMap.get("cart_price")==null?null:Double.valueOf(String.valueOf(paramMap.get("cart_price"))));
pet_mall.setCart_inventory(paramMap.get("cart_inventory")==null?null:Double.valueOf(String.valueOf(paramMap.get("cart_inventory"))));
pet_mall.setCart_type(paramMap.get("cart_type")==null?null:String.valueOf(paramMap.get("cart_type")));
pet_mall.setCart_content(paramMap.get("cart_content")==null?null:String.valueOf(paramMap.get("cart_content")));
pet_mall.setCart_img_1(paramMap.get("cart_img_1")==null?null:String.valueOf(paramMap.get("cart_img_1")));
pet_mall.setCart_img_2(paramMap.get("cart_img_2")==null?null:String.valueOf(paramMap.get("cart_img_2")));
pet_mall.setCart_img_3(paramMap.get("cart_img_3")==null?null:String.valueOf(paramMap.get("cart_img_3")));
pet_mall.setCart_img_4(paramMap.get("cart_img_4")==null?null:String.valueOf(paramMap.get("cart_img_4")));
pet_mall.setCart_img_5(paramMap.get("cart_img_5")==null?null:String.valueOf(paramMap.get("cart_img_5")));
pet_mall.setListStatus(paramMap.get("list_status")==null?null:Integer.valueOf(String.valueOf(paramMap.get("list_status"))));
pet_mall.setSku(paramMap.get("sku")==null?null:String.valueOf(paramMap.get("sku")));
pet_mall.setCreate_by(paramMap.get("create_by")==null?null:Integer.valueOf(String.valueOf(paramMap.get("create_by"))));
this.addEntity(pet_mall);
System.out.println("宠物商城新增成功");
return success(1);
}
@PostMapping("/set")
@Transactional
public Map<String, Object> set(HttpServletRequest request) throws IOException {
Map<String,String> queryMap = service.readQuery(request);
Map<String,String> configMap = service.readConfig(request);
Map<String,Object> paramMap = service.readBody(request.getReader());
paramMap.entrySet().removeIf(entry -> {
Object value = entry.getValue();
return value instanceof String && ((String) value).isEmpty();
});
PetMall pet_mall = new PetMall();
pet_mall.setPlace_of_origin_of_the_product(paramMap.get("place_of_origin_of_the_product")==null?null:String.valueOf(paramMap.get("place_of_origin_of_the_product")));
pet_mall.setHits(paramMap.get("hits")==null?null:Integer.valueOf(String.valueOf(paramMap.get("hits"))));
pet_mall.setCart_title(paramMap.get("cart_title")==null?null:String.valueOf(paramMap.get("cart_title")));
pet_mall.setCart_img(paramMap.get("cart_img")==null?null:String.valueOf(paramMap.get("cart_img")));
pet_mall.setCart_description(paramMap.get("cart_description")==null?null:String.valueOf(paramMap.get("cart_description")));
pet_mall.setCart_price_ago(paramMap.get("cart_price_ago")==null?null:Double.valueOf(String.valueOf(paramMap.get("cart_price_ago"))));
pet_mall.setCart_price(paramMap.get("cart_price")==null?null:Double.valueOf(String.valueOf(paramMap.get("cart_price"))));
pet_mall.setCart_inventory(paramMap.get("cart_inventory")==null?null:Double.valueOf(String.valueOf(paramMap.get("cart_inventory"))));
pet_mall.setCart_type(paramMap.get("cart_type")==null?null:String.valueOf(paramMap.get("cart_type")));
pet_mall.setCart_content(paramMap.get("cart_content")==null?null:String.valueOf(paramMap.get("cart_content")));
pet_mall.setCart_img_1(paramMap.get("cart_img_1")==null?null:String.valueOf(paramMap.get("cart_img_1")));
pet_mall.setCart_img_2(paramMap.get("cart_img_2")==null?null:String.valueOf(paramMap.get("cart_img_2")));
pet_mall.setCart_img_3(paramMap.get("cart_img_3")==null?null:String.valueOf(paramMap.get("cart_img_3")));
pet_mall.setCart_img_4(paramMap.get("cart_img_4")==null?null:String.valueOf(paramMap.get("cart_img_4")));
pet_mall.setCart_img_5(paramMap.get("cart_img_5")==null?null:String.valueOf(paramMap.get("cart_img_5")));
pet_mall.setListStatus(paramMap.get("list_status")==null?null:Integer.valueOf(String.valueOf(paramMap.get("list_status"))));
pet_mall.setSku(paramMap.get("sku")==null?null:String.valueOf(paramMap.get("sku")));
this.setEntity(queryMap,configMap,pet_mall);
System.out.println("宠物商城修改成功");
return success(1);
}
private static final double PURCHASE_WEIGHT = 5.0; // 购买权重
private static final double COLLECT_WEIGHT = 3.0; // 收藏权重
private static final double CLICK_WEIGHT = 1.0; // 点击权重
private static final double COMMENT_WEIGHT = 2.0; // 评论权重
/**
* 协同过滤算法
*/
@RequestMapping("/get_hits_list")
public Map<String, Object> getHits(HttpServletRequest request) {
Map<String,String> paramMap = service.readQuery(request);
if (paramMap.get("user_id")==null||paramMap.get("user_id").equals("")){
Map<String,String> configMap = service.readConfig(request);
configMap.computeIfAbsent(FindConfig.PAGE, k -> String.valueOf(1));
configMap.computeIfAbsent(FindConfig.SIZE, k -> String.valueOf(1));
configMap.put(FindConfig.ORDER_BY, "goods_id asc");
List goodsList = goodsService.selectBaseList(goodsService.select(paramMap, configMap));
Map<String, Object> map = new HashMap<>();
map.put("list", goodsList);
map.put("count", goodsList.size());
return success(map);
}else{
try {
if (paramMap.get("examine_state")!=null && !paramMap.get("examine_state").equals("")){
paramMap.put("examine_state", URLDecoder.decode(paramMap.get("examine_state"), "UTF-8"));
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
//加权查询
String hitsSource = buildCartWeightedSql(paramMap.get("user_id"));
List<Map<String,Object>> hitsSourceList = goodsService.selectMapBaseList(hitsSource);
if (hitsSourceList != null && hitsSourceList.size() > 0) {
System.out.println("前5条行为数据: ");
for (int i = 0; i < Math.min(5, hitsSourceList.size()); i++) {
Map<String, Object> item = hitsSourceList.get(i);
System.out.println(" 商品ID: " + item.get("goods_id") + ", 加权分数: " + item.get("hits_count"));
}
}
//判断是否为空,代表当前用户暂无点击数据,那么取其他用户的最常点击
if (hitsSourceList==null || hitsSourceList.size()<=0){
hitsSource = buildCartWeightedSql(null);
hitsSourceList = goodsService.selectMapBaseList(hitsSource);
}
String table_name = "goods";
String table_id = "goods_id";
String type_name = "type";
//二次处理-如果依旧为空则取添加时间前12条数据
if (hitsSourceList==null || hitsSourceList.size()<=0){
String sql = "SELECT * FROM " + table_name;
if (paramMap.get("examine_state")!=null && !paramMap.get("examine_state").equals("")){
sql = sql + " where examine_state = '"+paramMap.get("examine_state")+"'";
}
sql = sql + " ORDER BY create_time DESC LIMIT 0,12";
List list = goodsService.selectBaseList(sql);
Map<String, Object> map=new HashMap<>();
map.put("list",list);
map.put("count",list.size());
return success(map);
}else {
//对用户点击量进行排序取得最大值
double max = 0.0;
int maxSourceId = 0;
for (Map<String,Object> map:hitsSourceList) {
double hitsCount = Double.parseDouble(String.valueOf(map.get("hits_count")));
if (hitsCount > max){
max = hitsCount;
maxSourceId = Integer.parseInt(String.valueOf(map.get("goods_id")));
}
}
//查询该用户点击最大值的种类
String typeSql = "SELECT " + type_name + " FROM " + table_name + " WHERE " + table_id + " = " + maxSourceId;
List<Map<String,Object>> typeList = goodsService.selectMapBaseList(typeSql);
//如果为空则取添加时间前12条数据
if (typeList==null || typeList.size()<=0){
String sql = "SELECT * FROM " + table_name;
if (paramMap.get("examine_state")!=null && !paramMap.get("examine_state").equals("")){
sql = sql + " where examine_state = '"+paramMap.get("examine_state")+"'";
}
sql = sql + " ORDER BY create_time DESC LIMIT 0,12";
List list = goodsService.selectBaseList(sql);
Map<String, Object> map=new HashMap<>();
map.put("list",list);
map.put("count",list.size());
return success(map);
}else {
String typeName = String.valueOf(typeList.get(0).get(type_name));
//查询该种类的数据
String sql = "SELECT * FROM " + table_name + " WHERE " + type_name + " = '"+typeName+"'" ;
if (paramMap.get("examine_state")!=null && !paramMap.get("examine_state").equals("")){
sql = sql + " and examine_state = '"+paramMap.get("examine_state")+"' ORDER BY create_time DESC limit 0,12";
}else {
sql = sql + " ORDER BY create_time DESC limit 0,12";
}
List resultList = goodsService.selectBaseList(sql);
//如果为空则取添加时间前12条数据
if (resultList==null || resultList.size()<=0){
sql = "SELECT * FROM " + table_name;
if (paramMap.get("examine_state")!=null && !paramMap.get("examine_state").equals("")){
sql = sql + " where examine_state = '"+paramMap.get("examine_state")+"'";
}
sql = sql + " ORDER BY create_time DESC LIMIT 0,12";
List list = goodsService.selectBaseList(sql);
Map<String, Object> map=new HashMap<>();
map.put("list",list);
map.put("count",list.size());
return success(map);
}else {
//对结果排序-冒泡排序
for (int i = resultList.size() - 1; i > 0; i--) {
// 是否发生交换
boolean swapped = false;
for (int j = 0; j < i; j++) {
Goods leftMap = (Goods) resultList.get(j);
Goods rightMap = (Goods) resultList.get(j + 1);
if (leftMap.getHits()<rightMap.getHits()){
Goods temp = rightMap;
rightMap = leftMap;
leftMap = temp;
swapped = true;
}
}
if (!swapped) {
// 没有发生交换,则说明数组已有序,停止冒泡
break;
}
}
//判断是否有12条-如果不足则计算其他类型和用户当前点击最多的余弦相似度,依次往下取得数据
if (resultList.size()<12) {
String typeCosSql = "SELECT " + type_name + " FROM " + table_name + " WHERE " + type_name + " <> '" + typeName + "' GROUP BY " + type_name;
List<Map<String, Object>> typeCosList = goodsService.selectMapBaseList(typeCosSql);
if (typeCosList != null && typeCosList.size() > 0) {
for (Map<String, Object> typeCos : typeCosList) {
typeCos.put("cosSim", calculateCosineSimilarity(typeName, String.valueOf(typeCos.get(type_name))));
}
//冒泡根据相似度排序
for (int i = typeCosList.size() - 1; i > 0; i--) {
// 是否发生交换
boolean swapped = false;
for (int j = 0; j < i; j++) {
Map<String, Object> leftMap = typeCosList.get(j);
Map<String, Object> rightMap = typeCosList.get(j + 1);
if (Double.parseDouble(String.valueOf(leftMap.get("cosSim" ))) < Double.parseDouble(String.valueOf(rightMap.get("cosSim" )))) {
Map<String, Object> temp = rightMap;
rightMap = leftMap;
leftMap = temp;
swapped = true;
}
}
if (!swapped) {
// 没有发生交换,则说明数组已有序,停止冒泡
break;
}
}
//逐条加入数据
for (Map<String, Object> typeCos : typeCosList) {
sql = "SELECT * FROM " + table_name + " WHERE " + type_name + " = '" + String.valueOf(typeCos.get(type_name)) + "'";
if (paramMap.get("examine_state")!=null && !paramMap.get("examine_state").equals("")){
sql = sql + " and examine_state = '"+paramMap.get("examine_state")+"'";
}
sql = sql + " ORDER BY create_time DESC LIMIT 0," + (12 - resultList.size());
List list = goodsService.selectBaseList(sql);
if (list != null && list.size() > 0) {
resultList.addAll(list);
}
if (resultList.size() >= 12) {
break;
}
}
}
}
Map<String, Object> map=new HashMap<>();
map.put("list",resultList);
map.put("count",resultList.size());
return success(map);
}
}
}
}
}
/**
* 计算余弦相似度
*/
private double calculateCosineSimilarity(String text1, String text2) {
// 将文本分词并转换为向量表示
Map<Character, Integer> wordCount1 = getWordCount(text1);
Map<Character, Integer> wordCount2 = getWordCount(text2);
double dotProduct = 0.0;
double magnitude1 = 0.0;
double magnitude2 = 0.0;
for (Character word : wordCount1.keySet()) {
int count1 = wordCount1.get(word);
int count2 = wordCount2.getOrDefault(word, 0);
dotProduct += count1 * count2;
magnitude1 += Math.pow(count1, 2);
}
for (Integer count : wordCount2.values()) {
magnitude2 += Math.pow(count, 2);
}
magnitude1 = Math.sqrt(magnitude1);
magnitude2 = Math.sqrt(magnitude2);
if (magnitude1 == 0.0 || magnitude2 == 0.0) {
return 0.0;
}
return dotProduct / (magnitude1 * magnitude2);
}
private static Map<Character, Integer> getWordCount(String text) {
Map<Character, Integer> wordCount = new HashMap<>();
for (char c : text.toCharArray()) {
wordCount.put(c, wordCount.getOrDefault(c, 0) + 1);
}
return wordCount;
}
/**
* 构建加权行为SQL
* @param userId 用户ID(null表示全局)
* @return 加权SQL
*/
private String buildCartWeightedSql(String userId) {
// 用户条件
String userCondition = (userId != null && !userId.isEmpty()) ?
" AND user_id = " + userId : "";
return "SELECT goods_id, " +
"(COUNT(CASE WHEN source_type = 'order' THEN 1 END) * " + PURCHASE_WEIGHT + " + " +
"COUNT(CASE WHEN source_type = 'collect' THEN 1 END) * " + COLLECT_WEIGHT + " + " +
"COUNT(CASE WHEN source_type = 'hits' THEN 1 END) * " + CLICK_WEIGHT + " + " +
"COUNT(CASE WHEN source_type = 'comment' THEN 1 END) * " + COMMENT_WEIGHT + ") as hits_count " +
"FROM (" +
// 购买行为
"SELECT goods_id, 'order' as source_type FROM `order` WHERE 1=1" + userCondition + " " +
"UNION ALL " +
// 收藏行为
"SELECT source_id as goods_id, 'collect' as source_type FROM collect " +
"WHERE source_table = 'goods'" + userCondition + " " +
"UNION ALL " +
// 点击行为
"SELECT source_id as goods_id, 'hits' as source_type FROM hits " +
"WHERE source_table = 'goods'" + userCondition + " " +
"UNION ALL " +
// 评论行为
"SELECT source_id as goods_id, 'comment' as source_type FROM comment " +
"WHERE source_table = 'goods'" + userCondition + " " +
") t " +
"GROUP BY goods_id " +
"ORDER BY hits_count DESC";
有需要项目源码的同学,
查看下方名片即可联系我。
感谢大家的支持,麻烦关注点赞收藏,
后续持续更新毕设选题和项目代码。🙏🙏
更多推荐




所有评论(0)