news 2026/9/5 8:01:29

Springboot3+MyBatis_Plus学习项目(一)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Springboot3+MyBatis_Plus学习项目(一)

从零创建后端项目,实现CRUD接口

目标:从零创建后端项目,实现用户 CRUD 接口
环境:JDK17、Maven、IDEA、MySQL8、SpringBoot3

一、创建 SpringBoot 项目

IDEA 新建项目

1.文件 → 新建 → 项目,选择Spring Initializr
2.项目元信息

  • 组:com.example
  • 工件:secd_new
  • java版本:17(和本机jdk版本一致)

3.选择依赖

  • Spring Web(web 开发,写接口用)
  • MyBatis‑Plus Spring Boot Starter(mybatis‑plus 简化数据库操作)
  • MySQL Driver(mysql 数据库驱动)
  • Lombok(简化实体类,省去手写 get、set、toString)

原理:
Spring Initializr 帮我们生成 Maven 项目骨架,自动把依赖写到pom.xml
pom.xml是 Maven 配置文件,所有 jar 包都在这里管理,不需要手动下载 jar。
Lombok:编译阶段自动生成 get/set,代码更简洁;IDEA 必须安装 Lombok 插件,否则代码报错。

项目目录结构讲解

src └── main ├── java/com/example/secd_new# Java源代码│ ├── SecdNewApplication.java# 项目启动类,main方法,整个程序入口│ ├── controller# 控制器:接收浏览器/前端请求│ ├── entity# 实体类:和数据库表一一对应│ ├── mapper# Mapper接口:数据库交互│ └──service# 业务层(后面写)└── resources └── application.yml# 项目配置文件,数据库、mybatis‑plus配置

原理:

  1. SecdNewApplication上面有@SpringBootApplication,代表这是 SpringBoot 启动入口,运行 main 方法就启动整个 web 服务。
  2. SpringBoot 默认自动扫描启动类同包以及子包下面所有类,所以 controller、entity、mapper 必须放在启动类的子包下面,否则组件不生效

创建数据库和表

打开 Navicat,新建数据库,例如demo_db
执行建表 SQL

createtablet_user(idbigintprimarykeyauto_increment,namevarchar(50),ageint);--插入测试数据insertintot_user(name,age)values('小明',18),('小红',24),('小李',28),('小周',17),('小张',22);

原理:

  • bigint对应 Java 的Long,不能用 Integer,类型不匹配查询报错。
  • auto_increment:主键自增,新增数据不用手动传 id,数据库自动生成。

修改 application.yml 配置文件

把默认的application.properties删掉,新建application.yml

spring:datasource:driver-class-name:com.mysql.cj.jdbc.Driverurl:jdbc:mysql://127.0.0.1:3306/demo_db?useSSL=false&serverTimezone=Asia/Shanghaiusername:rootpassword:你的mysql密码mybatis-plus:configuration:map-underscore-to-camel-case:true#下划线转驼峰 t_user → tUser

原理:

  1. spring.datasource:告诉 SpringBoot 如何连接 MySQL 数据库:地址、库名、账号密码。
  2. map‑underscore‑to‑camel‑case:数据库字段带下划线,Java 实体驼峰命名自动映射,不用手动写映射。
  3. yml 格式注意:冒号后面必须有空格,缩进严格,缩进错配置直接失效。

编写 Entity 实体类 entity/User.java

packagecom.example.secd_new.entity;importcom.baomidou.mybatisplus.annotation.IdType;importcom.baomidou.mybatisplus.annotation.TableId;importcom.baomidou.mybatisplus.annotation.TableName;importlombok.Data;@Data@TableName("t_user")//绑定数据库哪一张表publicclassUser{@TableId(type=IdType.AUTO)//主键自增privateLongid;privateStringname;privateIntegerage;}
  1. @Data:lombok 注解,编译自动生成 get、set、toString。
  2. @TableName("t_user"):指定对应数据库表名;如果实体类名和表名完全一致可以省略。
  3. @TableId(type = IdType.AUTO):标记主键,告诉数据库主键自增。
  4. id 用Long,数据库 bigint 必须对应 Long。

Mapper 接口 Mapper/UserMapper.java

packagecom.example.secd_new.mapper;importcom.baomidou.mybatisplus.core.mapper.BaseMapper;importcom.example.secd_new.entity.User;importorg.apache.ibatis.annotations.Mapper;@MapperpublicinterfaceUserMapperextendsBaseMapper<User>{}

原理(MyBatis‑Plus 核心)

  1. @Mapper:告诉 MyBatis 这是 mapper 接口,用来操作数据库。
  2. 继承BaseMapper<User>,直接拥有内置方法:selectById、selectList、insert、updateById、deleteById不用自己写 SQL 语句
    MyBatis 原生需要写 xml 写 SQL;MyBatis‑Plus 封装通用 CRUD,单表操作不用写 SQL。

Controller 控制器 UserController.java

  • 接收前端请求,调用 mapper 操作数据库,返回结果。
    • 注意:SpringBoot3 + JDK17,@PathVariable("id")必须写括号里面的名字,不能省略,省略直接 500 报错
packagecom.example.secd_new.controller;importcom.baomidou.mybatisplus.core.mapper.BaseMapper;importcom.example.secd_new.entity.User;importcom.example.secd_new.mapper.UserMapper;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.web.bind.annotation.*;importjava.util.List;@RestController//标记这是接口控制器,返回JSON/字符串,不是返回页面@RequestMapping("/user")//统一接口前缀,所有接口地址前面带上 /userpublicclassUserController{//把mapper注入进来@AutowiredprivateUserMapperuserMapper;//1. 查询全部用户 GET请求@GetMapping("/list")publicList<User>getAll(){returnuserMapper.selectList(null);}//2. 根据id查询单个用户 GET@GetMapping("/{id}")publicStringgetById(@PathVariable("id")Longid){Useruser=userMapper.selectById(id);if(user==null){return"查无此人";}return"id:"+user.getId()+" name:"+user.getName()+" age:"+user.getAge();}//3. 新增用户 POST@PostMapping("/add")publicStringadd(@RequestBodyUseruser){userMapper.insert(user);return"新增成功";}//4. 修改用户 PUT@PutMapping("/update")publicStringupdate(@RequestBodyUseruser){userMapper.updateById(user);return"修改成功";}//5. 删除用户 DELETE@DeleteMapping("/del/{id}")publicStringdel(@PathVariable("id")Longid){userMapper.deleteById(id);return"删除成功";}}

注解原理

  1. @RestController=@Controller + @ResponseBody,方法返回值直接输出给前端,不是跳转网页。
  2. @RequestMapping("/user")统一接口前缀。
  3. @GetMapping:接收 GET 请求;浏览器地址栏访问就是 GET。
  4. @PostMapping / @PutMapping / @DeleteMapping:POST/PUT/DELETE 请求,浏览器地址栏无法直接发起。
  5. @PathVariable("id"):从 url 路径获取参数,例如/user/3,3 赋值给 id 变量。
  6. @RequestBody:接收前端传过来的 JSON 格式数据。
  7. @Autowired:Spring 自动把 Mapper 对象注入进来,不用自己 new 对象。

启动项目 & 浏览器测试开头

运行启动类SecdNewApplication的 main 方法。
控制台输出Started SecdNewApplication,代表项目启动成功,默认端口8080

打开浏览器输入地址:
http://localhost:8080/user/list

可以看到全部用户 JSON 数据,代表整套流程跑通。

再测试单查
http://localhost:8080/user/3

浏览器局限:
浏览器地址栏只能发送 GET 请求。
新增、修改、删除是 POST/PUT/DELETE,浏览器地址栏做不到,需要 IDEA 的 http 文件或者 Postman 测试。

后续待拓展

  1. 抽离 Service 层,把业务逻辑从 Controller 拿出来,Controller 只负责接收请求。
  2. 统一返回 JSON 格式,不再返回普通字符串。
  3. 参数校验、全局异常处理。
  4. http 文件测试 POST/PUT/DELETE 接口。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/5 7:56:48

项目改造日记:再次的选择

提示词&#xff1a;我在做pdf转excel,excel再转成excel标准模版。因为每份pdf差异较大&#xff0c;我计划为每个pdf写一个专用的方法&#xff0c;比如&#xff1a;1001 样式的pdf, 调用"1001 " 方法。但pdf模板较多同时,我不知道未来的新模板&#xff0c;我计划当增加…

作者头像 李华
网站建设 2026/9/5 7:53:01

电感滤波与串联谐振:从频率阻抗特性到工程应用

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/5 7:52:54

MLP图像生成技术:从基础原理到DJ维尼尔与提琴家角色创作实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/5 7:51:20

Hubble开源笔记应用:AI时代的人机协同知识管理解决方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/5 7:49:45

Qwen3.8-27B 量化:16GB显存也能轻松跑!性价比甜点区Q4详解

Qwen3.8-27B 之所以受关注是因为它把相当强的 Coding、Agent、长上下文和多模态能力放进了一个仍然有机会在消费级硬件上运行的 27B dense 模型里。 01.硬件不同&#xff0c;不同的部署方式硬件建议16GB 显存尝试 3-bit / 较低量化24GB 显存优先考虑 Q432GB Apple 统一内存Q4 是…

作者头像 李华