[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"article-public-uagE5iJR":3,"public-project-articles-uagE5iJR":17},{"id":4,"uuid":5,"project_id":6,"title":7,"content":8,"type":9,"status":10,"public_enabled":10,"views":11,"sort":12,"created_at":13,"updated_at":14,"project_title":15,"project_slug":16},908,"uagE5iJR",50,"02. 彻底搞会SpringBoot进阶开发模式","## 下载 数据请求工具 Postman（发送 post\\put\\delete 请求）\n\n关注公众号：**程序员青戈**，回复：**软件  **\n\n下载这个Postman\n\n或者下载 ApiPost 软件，也可以发请求，下载地址：[https:\u002F\u002Fwww.apipost.cn\u002F](https:\u002F\u002Fwww.apipost.cn\u002F)\n\n## 写接口注意事项\n\n1. 接口必须定义请求方式，常见的方式有：**GET、POST、PUT、DELETE**\n2. 定义接口的路径\n3. 定义接口方法（返回值和接口参数）  接口参数要注意，使用的是实体类接受还是单个数据\n4. 新增和更新方法使用是实体类接收数据，删除、查询方法使用的是单个数据\n\n## 新增数据\n\n注意：数据是** json** 对象格式\n\n返回：**ResponseEntity **对象，包含**状态码**\n\n------\n\n![](https:\u002F\u002Fcdn.nlark.com\u002Fyuque\u002F0\u002F2025\u002Fpng\u002F751015\u002F1760513254372-8dfa1fb7-9431-4135-92f1-67e615728b1c.png)\n\n当你的控制台出现错误，一般是 后端写错了，一般是 SQL 问题，检查一下 SQL\n\n\n\n新增的接口\n\n```java\n\u002F**\n * 新增接口\n *\u002F\n@PostMapping(\"\u002Fadd\")\npublic ResponseEntity\u003CString> add(@RequestBody User user) {\n    try {\n        userService.add(user);\n    } catch (RuntimeException e) {\n        return new ResponseEntity\u003C>(e.getMessage() ,HttpStatus.INTERNAL_SERVER_ERROR);\n    }\n    return new ResponseEntity\u003C>(\"成功\", HttpStatus.OK);\n}\n```\n\n新增的 Service\n\n```java\npublic void add(User user) {\n    \u002F\u002F 校验账号是否为空\n    if (user.getUsername() == null || \"\".equals(user.getUsername())) {\n        throw new RuntimeException(\"新增失败！账号不能为空！\");\n    }\n    if (user.getPassword() == null || \"\".equals(user.getPassword())) {\n        user.setPassword(\"123\");\n    }\n    if (user.getName() == null || \"\".equals(user.getName())) {\n        user.setName(user.getUsername());\n    }\n    User dbUser = userMapper.selectByUsername(user.getUsername());\n    \u002F\u002F 存在同名的账号\n    if (dbUser != null) {\n        throw new RuntimeException(\"新增失败！账号重复！\");\n    }\n    userMapper.insert(user);\n}\n```\n\n新增的 Mapper.xml\n\n```xml\n\u003Cselect id=\"selectByUsername\" resultType=\"com.example.entity.User\">\n    select * from `user` where username = #{username}\n\u003C\u002Fselect>\n\n\u003Cinsert id=\"insert\" parameterType=\"com.example.entity.User\">\n    insert into `user` (username, password, name, phone, email)\n    values (#{username}, #{password}, #{name}, #{phone}, #{email})\n\u003C\u002Finsert>\n```\n\n\n\n使用 postman 模拟发送数据\n\n![](https:\u002F\u002Fcdn.nlark.com\u002Fyuque\u002F0\u002F2025\u002Fpng\u002F751015\u002F1760514410033-3a13c073-2e1b-4a15-8d4e-81ce7bb86c4b.png)\n\n使用 apiPost 测试数据\n\n![](https:\u002F\u002Fcdn.nlark.com\u002Fyuque\u002F0\u002F2025\u002Fpng\u002F751015\u002F1760516490228-598737ad-f9f4-4596-bce5-ef8a1f74bef6.png)\n\n## 更新数据\n\n根据唯一的 ID 更新数据\n\n注意：更新数据一定要加上 ID 的条件，否则会出现全表更新，**\u003Cfont style=\"color:#DF2A3F;\">非常危险！\u003C\u002Ffont>**\n\n**\u003Cfont style=\"color:#DF2A3F;\">\u003C\u002Ffont>**\n\nUpdateController\n\n```java\n\u002F**\n * 更新接口\n * 更新接口的参数必须携带ID，否则无法更新\n * 我们需要根据ID找到对应的数据库数据  才能更新\n *\u002F\n@PutMapping(\"\u002Fupdate\")\npublic ResponseEntity\u003CString> update(@RequestBody User user) {\n    try {\n        userService.update(user);\n    } catch (RuntimeException e) {\n        return new ResponseEntity\u003C>(e.getMessage() ,HttpStatus.INTERNAL_SERVER_ERROR);\n    }\n    return new ResponseEntity\u003C>(\"成功\", HttpStatus.OK);\n}\n```\n\n\n\nservice\n\n```java\npublic void update(User user) {\n    \u002F\u002F 校验账号是否为空\n    if (user.getId() == null) {\n        throw new RuntimeException(\"更新失败！ID不能为空！\");\n    }\n    userMapper.updateById(user);\n}\n```\n\n\n\nMapper.xml\n\n```xml\n\u003Cupdate id=\"updateById\" parameterType=\"com.example.entity.User\">\n    update `user` set username = #{username}, password = #{password}, name = #{name},\n    phone = #{phone}, email = #{email}\n    where id = #{id}\n\u003C\u002Fupdate>\n```\n\n\n\n使用 apipost 测试数据\n\n![](https:\u002F\u002Fcdn.nlark.com\u002Fyuque\u002F0\u002F2025\u002Fpng\u002F751015\u002F1760516570233-48f75b43-ef7b-4676-b94b-6e0fcde355e7.png)\n\n## 删除数据\n\n根据唯一的 ID 删除数据\n\nDeleteController\n\n```java\n\u002F**\n     * 删除接口\n     * @param id 是路径参数，必传\n     *\u002F\n    @DeleteMapping(\"\u002Fdelete\u002F{id}\")\n    public ResponseEntity\u003CString> delete(@PathVariable Integer id) {\n        try {\n            userService.delete(id);\n        } catch (RuntimeException e) {\n            return new ResponseEntity\u003C>(e.getMessage() ,HttpStatus.INTERNAL_SERVER_ERROR);\n        }\n        return new ResponseEntity\u003C>(\"成功\", HttpStatus.OK);\n    }\n```\n\n\n\nService\n\n```java\npublic void delete(Integer id) {\n    userMapper.deleteById(id);\n}\n```\n\n\n\nMapper.xml\n\n```xml\n\u003Cdelete id=\"deleteById\">\n    delete from `user` where id = #{id}\n\u003C\u002Fdelete>\n\n```\n\n\n\n使用 apiPost 模拟发送数据\n\n![](https:\u002F\u002Fcdn.nlark.com\u002Fyuque\u002F0\u002F2025\u002Fpng\u002F751015\u002F1760516625380-290babb1-81b0-4d77-af64-b7c534f2b5cf.png)\n\n## 分页模糊查询数据\n\n使用 pagehelper 分页插件\n\n分页模糊查询的 Controller\n\n```java\n\u002F**\n * @param pageNum 当前的页码\n * @param pageSize 每页查询的个数\n * @return 分页数据：总数、页码、每页个数、当前页的数据JSON数组\n * \u002Fuser\u002FselectPage?pageNum=1&pageSize=10\n *\u002F\n@GetMapping(\"\u002FselectPage\")\npublic ResponseEntity\u003CPageInfo\u003CUser>> selectPage(@RequestParam(defaultValue = \"1\") Integer pageNum,\n                                           @RequestParam(defaultValue = \"2\") Integer pageSize,\n                                           @RequestParam(required = false) String name) {\n    PageInfo\u003CUser> pageInfo = userService.selectPage(pageNum, pageSize, name);\n    return new ResponseEntity\u003C>(pageInfo, HttpStatus.OK);\n}\n\n\n```\n\n\n\nService\n\n```java\npublic PageInfo\u003CUser> selectPage(Integer pageNum, Integer pageSize, String name) {\n    \u002F\u002F 使用pagehelper进行分页查询\n    PageHelper.startPage(pageNum, pageSize);\n    List\u003CUser> userList = this.userMapper.selectByCondition(name);\n    return PageInfo.of(userList);\n}\n\n```\n\n\n\nMapper.xml\n\n```xml\n\u003Cselect id=\"selectByCondition\" resultType=\"com.example.entity.User\">\n    select * from `user`\n    \u003Cwhere>\n     \u003Cif test=\"name != null\">\n         name like concat('%', #{name}, '%')\n     \u003C\u002Fif>\n    \u003C\u002Fwhere>\n\u003C\u002Fselect>\n\n```\n\n\n\n在 sql 里写模糊查询逻辑\n\n![](https:\u002F\u002Fcdn.nlark.com\u002Fyuque\u002F0\u002F2025\u002Fpng\u002F751015\u002F1760517052010-686ad480-786c-446f-a179-a8b7533e3865.png)\n\n\n\n使用 apiPost 请求数据\n\n![](https:\u002F\u002Fcdn.nlark.com\u002Fyuque\u002F0\u002F2025\u002Fpng\u002F751015\u002F1760517382074-ac8b483a-b626-4707-94af-9f4a89fc428c.png)\n\n\n\n![](https:\u002F\u002Fcdn.nlark.com\u002Fyuque\u002F0\u002F2025\u002Fpng\u002F751015\u002F1760517582006-685f135d-9e7b-432c-81fa-1f8f9bc01a30.png)\n\n\n\n如果是 2 个或者更多的条件怎么办？\n\n这个作为同学们思考的内容\n\n","coding",1,131,1815,"2025-10-15 18:08:39","2026-05-03 22:49:02","一个视频带你学会Springboot+Vue实战开发","springboot-vue-video",{"project":18,"items":19},{"id":6,"title":15,"slug":16},[20,27,28],{"id":21,"uuid":22,"project_id":6,"title":23,"type":9,"status":10,"public_enabled":10,"views":24,"sort":25,"created_at":26,"updated_at":14,"project_title":15,"project_slug":16},895,"hjKZQzTE","01. 一个视频学会SpringBoot",256,1793,"2025-10-17 17:19:16",{"id":4,"uuid":5,"project_id":6,"title":7,"type":9,"status":10,"public_enabled":10,"views":11,"sort":12,"created_at":13,"updated_at":14,"project_title":15,"project_slug":16},{"id":29,"uuid":30,"project_id":6,"title":31,"type":9,"status":10,"public_enabled":10,"views":32,"sort":33,"created_at":34,"updated_at":14,"project_title":15,"project_slug":16},917,"aOkpnT10","03. 一个视频学会Vue3+Element-Plus",117,1828,"2025-10-17 17:17:50"]