当前位置:网站首页 >  攻略

从零搭建业务级会员体系权益模块:可直接落地实操指南

时间:2026年06月07日 05:33:30 来源:易频IT社区

准备工作

需提前安装JDK1.8+、MySQL8.0、Maven3.6+;打开https://start.spring.io/生成基础项目,Group设为com.member,Artifact设为member-demo,勾选依赖:Spring Web、MyBatis Framework、MySQL Driver、Lombok,点击Generate下载解压。

核心数据库表设计

先创建数据库,再执行以下建表SQL(复制后可直接在MySQL中运行):

``` CREATE DATABASE IF NOT EXISTS member DEFAULT CHARACTER SET utf8mb4; USE member; -- 会员基础表 CREATE TABLE `user_member` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '会员ID', `nickname` varchar(50) NOT NULL COMMENT '会员昵称', `level` int(11) NOT NULL DEFAULT 1 COMMENT '会员等级', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- 权益配置表 CREATE TABLE `member_benefit` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '权益ID', `name` varchar(50) NOT NULL COMMENT '权益名称', `type` int(11) NOT NULL COMMENT '权益类型:1=折扣,2=积分', `content` varchar(255) NOT NULL COMMENT '权益内容:如9折=0.9,10积分', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- 会员-权益关联表 CREATE TABLE `member_benefit_relation` ( `member_id` bigint(20) NOT NULL COMMENT '会员ID', `benefit_id` bigint(20) NOT NULL COMMENT '权益ID', `status` int(11) NOT NULL DEFAULT 0 COMMENT '激活状态:0=未激活,1=已激活', PRIMARY KEY (`member_id`,`benefit_id`), KEY `idx_benefit` (`benefit_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; ```

后端配置与代码开发

1.配置数据源

打开项目src/main/resources/application.yml,替换为以下内容,务必修改spring.datasource.url、username、password为你自己的MySQL环境信息:

``` server: port: 8080 spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/member?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8 username: root password: your_mysql_password mybatis-plus: configuration: map-underscore-to-camel-case: true log-impl: org.apache.ibatis.logging.stdout.StdOutImpl ```

2.核心实体类

在com.member.demo下新建entity文件夹,创建3个实体类,对应三张表:

Member.java(会员实体):

``` package com.member.demo.entity; import lombok.Data; @Data public class Member { private Long id; private String nickname; private Integer level; } ```

Benefit.java(权益实体):

``` package com.member.demo.entity; import lombok.Data; @Data public class Benefit { private Long id; private String name; private Integer type; private String content; } ```

MemberRelation.java(关联关系实体):

``` package com.member.demo.entity; import lombok.Data; @Data public class MemberRelation { private Long memberId; private Long benefitId; private Integer status; } ```

3.数据访问层(Mapper)

新建mapper文件夹,创建3个Mapper接口,继承MyBatis-Plus基础方法:

从零搭建业务级会员体系权益模块:可直接落地实操指南

BenefitMapper.java:

``` package com.member.demo.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.member.demo.entity.Benefit; import org.apache.ibatis.annotations.Mapper; @Mapper public interface BenefitMapper extends BaseMapper {} ```

MemberMapper.java:

``` package com.member.demo.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.member.demo.entity.Member; import org.apache.ibatis.annotations.Mapper; @Mapper public interface MemberMapper extends BaseMapper {} ```

MemberRelationMapper.java:

``` package com.member.demo.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.member.demo.entity.MemberRelation; import org.apache.ibatis.annotations.Mapper; @Mapper public interface MemberRelationMapper extends BaseMapper {} ```

4.业务接口层

新建controller文件夹,创建BenefitController.java,实现核心功能:查询会员可用权益、激活权益:

``` package com.member.demo.controller; import com.member.demo.entity.Benefit; import com.member.demo.entity.MemberRelation; import com.member.demo.mapper.BenefitMapper; import com.member.demo.mapper.MemberRelationMapper; import org.springframework.web.bind.annotation.; import javax.annotation.Resource; import java.util.List; import java.util.stream.Collectors; @RestController @RequestMapping("/api/member") public class BenefitController { @Resource private BenefitMapper benefitMapper; @Resource private MemberRelationMapper relationMapper; // 查询会员未激活的可用权益 @GetMapping("/benefit") public List getAvailableBenefits(@RequestParam Long memberId) { List allBenefits = benefitMapper.selectList(null); List activatedIds = relationMapper.selectList(null) .stream() .filter(r -> r.getMemberId().equals(memberId) && r.getStatus() == 1) .map(MemberRelation::getBenefitId) .collect(Collectors.toList()); return allBenefits.stream() .filter(b -> !activatedIds.contains(b.getId())) .collect(Collectors.toList()); } // 激活会员权益 @PostMapping("/benefit/active") public String activeBenefit(@RequestParam Long memberId, @RequestParam Long benefitId) { // 校验权益是否存在 if (benefitMapper.selectById(benefitId) == null) return "权益不存在"; // 校验是否已激活 MemberRelation exist = relationMapper.selectById(new MemberRelation(){{setMemberId(memberId);setBenefitId(benefitId);}}); if (exist != null && exist.getStatus() ==1) return "该权益已激活"; // 插入激活关系 MemberRelation relation = new MemberRelation(); relation.setMemberId(memberId); relation.setBenefitId(benefitId); relation.setStatus(1); relationMapper.insertOrUpdate(relation); return "激活成功"; } } ```

服务启动与测试

在项目根目录执行`mvn spring-boot:run`启动服务;先插入测试数据到MySQL:

``` INSERT INTO user_member(nickname,level) VALUES('张三',1); INSERT INTO member_benefit(name,type,content) VALUES('9折券',1,'0.9'),('100积分',2,'100'); ```

用Postman测试接口:

1. 查询可用权益:GET http://localhost:8080/api/member/benefit?memberId=1,返回未激活的权益列表;

2. 激活权益:POST http://localhost:8080/api/member/benefit/active?memberId=1&benefitId=1,返回“激活成功”后再次调用查询接口,该权益会消失。

扩展说明

新增权益类型直接修改member_benefit表即可;如需会员等级限制权益,可在查询接口增加member等级校验逻辑,无需改动核心表结构。

相关推荐

最新

热门

推荐

精选

标签

易频IT社区是综合性互联网IT技术门户网站,专注分享网络技术、服务器运维、网络安全、编程开发、系统架构、云计算、大数据等行业干货,实时更新IT行业资讯、零基础教程、实战案例,为IT从业者、技术爱好者提供专业的学习交流平台。

Copyright © 2021-2026 易频IT社区. All Rights Reserved. 备案号:闽ICP备2023013482号 网站地图