• SpringBoot学习笔记-创建个人中心页面(上)


    笔记内容转载自 AcWing 的 SpringBoot 框架课讲义,课程链接:AcWing SpringBoot 框架课

    1. 更新数据库表

    我们需要创建一个表来保存 Bot 的信息,新建一个 bot 表,包含以下几个列:

    • id: int:非空、自动增加、唯一、主键。
    • user_id: int:非空。注意:在 pojo 中需要定义成 userId,在 queryWrapper 中的名称仍然为 user_id
    • title: varchar(100)
    • description: varchar(300)
    • content:varchar(10000)
    • rating: int:默认值为1500。
    • createtime: datetime,注意:在 pojo 中定义日期格式的注解:@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    • modifytime: datetime

    可以使用如下 SQL 语句一键创建好该表:

    CREATE TABLE `kob`.`bot` (
        `id` int NOT NULL AUTO_INCREMENT,
        `user_id` int NOT NULL,
        `title` varchar(100) NULL,
        `description` varchar(300) NULL,
        `content` varchar(10000) NULL,
        `rating` int NULL DEFAULT 1500,
        `createtime` datetime NULL,
        `modifytime` datetime NULL,
        PRIMARY KEY (`id`)
    );
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    创建好数据库表后我们需要创建一个 pojo,在 pojo 目录下创建 Bot 类:

    package com.kob.backend.pojo;
    
    import com.baomidou.mybatisplus.annotation.IdType;
    import com.baomidou.mybatisplus.annotation.TableId;
    import com.fasterxml.jackson.annotation.JsonFormat;
    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    
    import java.util.Date;
    
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    public class Bot {
        @TableId(value = "id", type = IdType.AUTO)  // 声明id为自增类型
        private Integer id;
        private Integer userID;  // 注意驼峰命名
        private String title;
        private String description;
        private String content;
        private Integer rating;
        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")  // 注意日期格式的设置
        private Date createtime;
        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
        private Date modifytime;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    然后就可以实现 mapper,在 mapper 目录下创建 BotMapper 接口:

    package com.kob.backend.mapper;
    
    import com.baomidou.mybatisplus.core.mapper.BaseMapper;
    import com.kob.backend.pojo.Bot;
    import org.apache.ibatis.annotations.Mapper;
    
    @Mapper
    public interface BotMapper extends BaseMapper<Bot> {
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    2. 实现后端API

    首先在 service.user 包下创建 bot 包存放与 Bot 相关的 Service 代码,然后在 service.impl.user 包下创建 bot 包存放相应的 Service 实现代码,最后在 controller.user 包下创建 bot 包存放 Controller。

    我们需要实现以下四个 API:

    • /user/bot/add/:创建一个 Bot。
    • /user/bot/remove/:删除一个 Bot。
    • /user/bot/update/:修改一个 Bot。
    • /user/bot/getlist/:查询 Bot 列表。

    service.user.bot 包下创建这四个 API 的 Service 接口:

    (1)AddService

    package com.kob.backend.service.user.bot;
    
    import java.util.Map;
    
    public interface AddService {
        Map<String, String> add(Map<String, String> data);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    (2)RemoveService

    package com.kob.backend.service.user.bot;
    
    import java.util.Map;
    
    public interface RemoveService {
        Map<String, String> remove(Map<String, String> data);
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    (3)UpdateService

    package com.kob.backend.service.user.bot;
    
    import java.util.Map;
    
    public interface UpdateService {
        Map<String, String> update(Map<String, String> data);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    (4)GetListService

    package com.kob.backend.service.user.bot;
    
    import com.kob.backend.pojo.Bot;
    
    import java.util.List;
    
    public interface GetListService {
        List<Bot> getList();  // 根据用户信息获取Bot,用户信息存放在令牌中,因此不用传参数
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    接下来在 service.impl.user.bot 包下创建这四个 Service 接口的实现:

    (1)AddServiceImpl

    package com.kob.backend.service.impl.user.bot;
    
    import com.kob.backend.mapper.BotMapper;
    import com.kob.backend.pojo.Bot;
    import com.kob.backend.pojo.User;
    import com.kob.backend.service.impl.utils.UserDetailsImpl;
    import com.kob.backend.service.user.bot.AddService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
    import org.springframework.security.core.context.SecurityContextHolder;
    import org.springframework.stereotype.Service;
    
    import java.util.Date;
    import java.util.HashMap;
    import java.util.Map;
    
    @Service
    public class AddServiceImpl implements AddService {
        @Autowired
        private BotMapper botMapper;
    
        @Override
        public Map<String, String> add(Map<String, String> data) {
            UsernamePasswordAuthenticationToken authenticationToken =
                    (UsernamePasswordAuthenticationToken) SecurityContextHolder.getContext().getAuthentication();
            UserDetailsImpl loginUser = (UserDetailsImpl) authenticationToken.getPrincipal();
            User user = loginUser.getUser();  // 获取当前登录的用户
    
            String title = data.get("title");
            String description = data.get("description");
            String content = data.get("content");
    
            Map<String, String> res = new HashMap<>();
    
            if (title == null || title.isEmpty()) {
                res.put("result", "The title can't be empty!");
                return res;
            }
            if (title.length() > 100) {
                res.put("result", "Title length can't exceed 100!");
                return res;
            }
            if (description == null || description.isEmpty()) {
                description = "这个用户很懒,什么也没留下~";
            }
            if (description.length() > 300) {
                res.put("result", "Description length can't exceed 300!");
                return res;
            }
            if (content == null || content.isEmpty()) {
                res.put("result", "The content can't be empty!");
                return res;
            }
            if (content.length() > 10000) {
                res.put("result", "Code length can't exceed 10000!");
                return res;
            }
    
            Date now = new Date();
            Bot bot = new Bot(null, user.getId(), title, description, content, 1500, now, now);
            botMapper.insert(bot);
    
            res.put("result", "success");
            return res;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66

    (2)RemoveServiceImpl

    package com.kob.backend.service.impl.user.bot;
    
    import com.kob.backend.mapper.BotMapper;
    import com.kob.backend.pojo.Bot;
    import com.kob.backend.pojo.User;
    import com.kob.backend.service.impl.utils.UserDetailsImpl;
    import com.kob.backend.service.user.bot.RemoveService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
    import org.springframework.security.core.context.SecurityContextHolder;
    import org.springframework.stereotype.Service;
    
    import java.util.HashMap;
    import java.util.Map;
    
    @Service
    public class RemoveServiceImpl implements RemoveService {
        @Autowired
        private BotMapper botMapper;
    
        @Override
        public Map<String, String> remove(Map<String, String> data) {
            UsernamePasswordAuthenticationToken authenticationToken =
                    (UsernamePasswordAuthenticationToken) SecurityContextHolder.getContext().getAuthentication();
            UserDetailsImpl loginUser = (UserDetailsImpl) authenticationToken.getPrincipal();
            User user = loginUser.getUser();  // 需要判断要删除的Bot是不是当前登录用户的Bot
    
            int bot_id = Integer.parseInt(data.get("bot_id"));
            Bot bot = botMapper.selectById(bot_id);
    
            Map<String, String> res = new HashMap<>();
    
            if (bot == null) {
                res.put("result", "Bot doesn't exist!");
                return res;
            }
            if (!bot.getUserID().equals(user.getId())) {
                res.put("result", "No permission to delete the bot!");
                return res;
            }
    
            botMapper.deleteById(bot_id);
    
            res.put("result", "success");
            return null;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47

    (3)UpdateServiceImpl

    package com.kob.backend.service.impl.user.bot;
    
    import com.kob.backend.mapper.BotMapper;
    import com.kob.backend.pojo.Bot;
    import com.kob.backend.pojo.User;
    import com.kob.backend.service.impl.utils.UserDetailsImpl;
    import com.kob.backend.service.user.bot.UpdateService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
    import org.springframework.security.core.context.SecurityContextHolder;
    import org.springframework.stereotype.Service;
    
    import java.util.Date;
    import java.util.HashMap;
    import java.util.Map;
    
    @Service
    public class UpdateServiceImpl implements UpdateService {
        @Autowired
        private BotMapper botMapper;
    
        @Override
        public Map<String, String> update(Map<String, String> data) {
            UsernamePasswordAuthenticationToken authenticationToken =
                    (UsernamePasswordAuthenticationToken) SecurityContextHolder.getContext().getAuthentication();
            UserDetailsImpl loginUser = (UserDetailsImpl) authenticationToken.getPrincipal();
            User user = loginUser.getUser();
    
            int bot_id = Integer.parseInt(data.get("bot_id"));
            String title = data.get("title");
            String description = data.get("description");
            String content = data.get("content");
    
            Map<String, String> res = new HashMap<>();
    
            if (title == null || title.isEmpty()) {
                res.put("result", "The title can't be empty!");
                return res;
            }
            if (title.length() > 100) {
                res.put("result", "Title length can't exceed 100!");
                return res;
            }
            if (description == null || description.isEmpty()) {
                description = "这个用户很懒,什么也没留下~";
            }
            if (description.length() > 300) {
                res.put("result", "Description length can't exceed 300!");
                return res;
            }
            if (content == null || content.isEmpty()) {
                res.put("result", "The content can't be empty!");
                return res;
            }
            if (content.length() > 10000) {
                res.put("result", "Code length can't exceed 10000!");
                return res;
            }
    
            Bot bot = botMapper.selectById(bot_id);
    
            if (bot == null) {
                res.put("result", "Bot doesn't exist!");
                return res;
            }
            if (!bot.getUserID().equals(user.getId())) {
                res.put("result", "No permission to update the bot!");
                return res;
            }
    
            Bot new_bot = new Bot(bot.getId(), user.getId(), title, description, content, bot.getRating(), bot.getCreatetime(), new Date());
            botMapper.updateById(new_bot);
    
            res.put("result", "success");
            return null;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77

    (4)GetListServiceImpl

    package com.kob.backend.service.impl.user.bot;
    
    import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
    import com.kob.backend.mapper.BotMapper;
    import com.kob.backend.pojo.Bot;
    import com.kob.backend.pojo.User;
    import com.kob.backend.service.impl.utils.UserDetailsImpl;
    import com.kob.backend.service.user.bot.GetListService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
    import org.springframework.security.core.context.SecurityContextHolder;
    import org.springframework.stereotype.Service;
    
    import java.util.List;
    
    @Service
    public class GetListServiceImpl implements GetListService {
        @Autowired
        private BotMapper botMapper;
    
        @Override
        public List<Bot> getList() {
            UsernamePasswordAuthenticationToken authenticationToken =
                    (UsernamePasswordAuthenticationToken) SecurityContextHolder.getContext().getAuthentication();
            UserDetailsImpl loginUser = (UserDetailsImpl) authenticationToken.getPrincipal();
            User user = loginUser.getUser();
    
            QueryWrapper<Bot> queryWrapper = new QueryWrapper<>();
            queryWrapper.eq("user_id", user.getId());
    
            return botMapper.selectList(queryWrapper);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    最后在 controller.user.bot 包下创建对应的 Controller:

    (1)AddController

    package com.kob.backend.controller.user.bot;
    
    import com.kob.backend.service.user.bot.AddService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.PostMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.RestController;
    
    import java.util.Map;
    
    @RestController
    public class AddController {
        @Autowired
        private AddService addService;
    
        @PostMapping("/user/bot/add/")
        public Map<String, String> add(@RequestParam Map<String, String> data) {
            return addService.add(data);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    (2)RemoveController

    package com.kob.backend.controller.user.bot;
    
    import com.kob.backend.service.user.bot.RemoveService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.PostMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.RestController;
    
    import java.util.Map;
    
    @RestController
    public class RemoveController {
        @Autowired
        private RemoveService removeService;
    
        @PostMapping("/user/bot/remove/")
        public Map<String, String> remove(@RequestParam Map<String, String> data) {
            return removeService.remove(data);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    (3)UpdateController

    package com.kob.backend.controller.user.bot;
    
    import com.kob.backend.service.user.bot.UpdateService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.PostMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.RestController;
    
    import java.util.Map;
    
    @RestController
    public class UpdateController {
        @Autowired
        private UpdateService updateService;
    
        @PostMapping("/user/bot/update/")
        public Map<String, String> update(@RequestParam Map<String, String> data) {
            return updateService.update(data);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    (4)GetListController

    package com.kob.backend.controller.user.bot;
    
    import com.kob.backend.pojo.Bot;
    import com.kob.backend.service.user.bot.GetListService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    import java.util.List;
    
    @RestController
    public class GetListController {
        @Autowired
        private GetListService getListService;
    
        @GetMapping("/user/bot/getlist/")
        public List<Bot> getList() {
            return getListService.getList();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
  • 相关阅读:
    前端综合面试题【看这一篇就够了】
    支配树🌴学习笔记
    阿里P8大牛带你深入理解SpringCloud微服务构建文档
    spring引入外部属性文件
    git基础命令(一)
    腾讯云4核8G服务器申请费用多少?性能如何?支持几个人?
    【算法|动态规划No.11】leetcode53. 最大子数组和
    【Git】git合并分支指定内容到主分支
    公众号的附件怎么上传(如Word、Excel、Pdf等)
    (四)TensorRT | 基于 GPU 端的 Python 推理
  • 原文地址:https://blog.csdn.net/m0_51755720/article/details/134475426