首页 > 其他分享 >SpringBoot实现简单的增删改查(CURD)

SpringBoot实现简单的增删改查(CURD)

时间:2024-10-18 20:26:19浏览次数:1  
标签:SpringBoot int 改查 id stu CURD org class name

原文链接:SpringBoot实现简单的增删改查(CURD) – 每天进步一点点 (longkui.site)

 

前面一篇文章介绍了SpringBoot项目的创建: Spring Boot(1)—创建并运行项目

这篇文章简单介绍一下SpringBoot项目的增删改查。

所需工具:IDEA、java1.8、mysql

0.创建项目

我们通过IDEA创建项目。

点击”新建”—>”项目”

选择“Spring Initializr” 选择版本号1.8,然后点击“下一步”

然后填写必要信息。类型这个地方选择Maven(Generate a Maven based project archive),语言选择java,java版本我们这里选择8。其余信息自定义。

然后选择“web”,选择“Spring web”然后选择Spring Boot的版本号,这里线不建议选择3.0及以上版本,我们选择的是2.7.7,然后点击“下一步”。

然后点击“完成”

如果出现下面这样,表示正常

如果出现下面这样图,不正常,可以参考下面的两篇文章进行解决

参考解决办法:

IDEA配置maven主目录(maven home)不生效

Project ‘org.springframework.boot:spring-boot-starter-parent:2.7.7’ not found

1.添加必要依赖

因为要实现增删改查,所以要添加一些依赖,比如数据库等

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 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">     <modelVersion>4.0.0</modelVersion>     <parent>         <groupId>org.springframework.boot</groupId>         <artifactId>spring-boot-starter-parent</artifactId>         <version>2.7.7</version>         <relativePath/> <!-- lookup parent from repository -->     </parent>     <groupId>site.longkui</groupId>     <artifactId>app</artifactId>     <version>0.0.1-SNAPSHOT</version>     <name>app</name>     <description>Demo project for Spring Boot</description>     <properties>         <java.version>1.8</java.version>     </properties>     <dependencies>         <dependency>             <groupId>org.springframework.boot</groupId>             <artifactId>spring-boot-starter-web</artifactId>         </dependency>           <dependency>             <groupId>org.springframework.boot</groupId>             <artifactId>spring-boot-starter-test</artifactId>             <scope>test</scope>         </dependency>         <!-- mysql  -->         <dependency>             <groupId>mysql</groupId>             <artifactId>mysql-connector-java</artifactId>             <scope>runtime</scope>         </dependency>         <!--mybatis -->         <dependency>             <groupId>org.mybatis.spring.boot</groupId>             <artifactId>mybatis-spring-boot-starter</artifactId>             <version>2.1.4</version>         </dependency>     </dependencies>       <build>         <plugins>             <plugin>                 <groupId>org.springframework.boot</groupId>                 <artifactId>spring-boot-maven-plugin</artifactId>             </plugin>         </plugins>     </build>   </project>
2.创建数据库

参考下面这篇文章创建数据库表: mysql生成数据

DROP TABLE IF EXISTS `students`; CREATE TABLE `students` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `stu_name` varchar(20) NOT NULL , `stu_sex` varchar(10) NOT NULL , `class_id` int(10) NOT NULL , `age` int(10) NOT NULL DEFAULT 18, `create_time` datetime NULL DEFAULT CURRENT_TIMESTAMP, `update_time` datetime NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1000 DEFAULT CHARSET=utf8; insert into students (stu_name,stu_sex,class_id,age) values ('张三','男',1001,18), ('王晓红','女',2001,20), ('李清乐','男',1001,23), ('赵倚天','男',3001,23);
3.创建或修改配置文件

我们创建的springboot项目一般只有application.properties文件,如果没有xxx.yml文件,我们需要自己创建这个文件。

在这里,我们创建application.yml文件(或者也同步创建application-dev.yml文件,关于这两个文件的区别和优先级可以参考这篇文章:)

spring boot的application.yml和application-dev.yml

创建的application.yml内容参考如下:

server: port: 8082   # spring配置 spring: datasource: url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC username: root password: root driver-class-name: com.mysql.cj.jdbc.Driver   # mybaits配置 mybatis: # 配置mapper的扫描,找到所有的mapper.xml映射文件 mapper-locations: classpath*:mappers/**/*Mapper.xml # 搜索指定包别名 type-aliases-package: site.longkui.**.entity

我们参考上面图片新建五个文件夹,controller、entity、mapper、service、mappers。注意各自的位置,我们扫描包的时候需要用到位置。

这个地方主要说明的是

1.mysql的相关部分:

自己参考上面的脚本创建数据库和表,数据库连接和用户名密码等不要写错了。

2.mybatis的配置部分:

mapper-locations主要表示要映射的xml文件。按照上面的图片的配置文件,mapper-locations可以写成classpath*:mappers/*Mapper.xml这个地市之所以写成classpath*:mappers/**/*Mapper.xml这样主要是为了以后扩展,包括下面的type-aliases-package也是这个想法。

4.编写xml和mapper层

我们创建访问数据库的增删改查的xml文件,注意要在resources/mappers下面创建,而且创建的文件名称一定要是 xxxMapper.xml。这是因为我们配置文件定义的这种格式,如果你写的xml文件命名为abc.xml,根据上面的配置,spring就无法扫描到这个文件,也就不能执行这个文件中的sql。

(注:为了方(tou)便(lan),我们不创建实体类,不写resultMap,直接用数据库字段一一对应)

我们创建的xml文件参考如下

<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!--必须和mapper里面一一对应--> <mapper namespace="site.longkui.app.mapper.StudentsMapper">   <!--查询 --> <select id="getList" resultType="java.util.HashMap"> SELECT * from students </select>   <!--删除 --> <delete id="delById"> delete from students where id =#{id}; </delete> <!--新增--> <insert id="insertStudent"> INSERT INTO `students` (`stu_name`, `stu_sex`, `class_id`, `age`) VALUES ( #{stu_name}, #{stu_sex}, #{class_id}, #{age}); </insert> <!--更新--> <update id="updateStudent"> update students set stu_name=#{stu_name}, stu_sex=#{stu_sex}, class_id=#{class_id}, age=#{age} where id=#{id}; </update>   </mapper>

然后Mapper层如下:

package site.longkui.app.mapper;   import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Repository; import java.util.HashMap; import java.util.List;   @Repository public interface StudentsMapper { //查询所有 List<HashMap<HashMap,HashMap>> getList(); //删除一个 Boolean delById(@Param("id") int id); //新增一个 Boolean insertStudent(@Param("stu_name") String stu_name, @Param("stu_sex") String stu_sex, @Param("class_id") int class_id, @Param("age") int age); //更新 Boolean updateStudent(@Param("id") int id, @Param("stu_name") String stu_name, @Param("stu_sex") String stu_sex, @Param("class_id") int class_id, @Param("age") int age); }
5.service层

这个地方需要说明一下,本来这个层级关系一般是sevice层,然后写service的实现层(impl),在实现层里去访问Mapper层的代码,但是这个demo没有太复杂的逻辑,所以偷懒了一下,直接在service层去访问Mapper层的代码。

package site.longkui.app.service;   import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import site.longkui.app.mapper.StudentsMapper;   import java.util.HashMap; import java.util.List;   @Service public class StudentsService { @Autowired private StudentsMapper studentsMapper;     //查询所有 public List<HashMap<HashMap,HashMap>> getList(){ return studentsMapper.getList(); } //删除一个 public Boolean delById(int id){ return studentsMapper.delById(id); } //新增一个 public Boolean insertStudent(String stu_name,String stu_sex,int class_id,int age){ return studentsMapper.insertStudent(stu_name, stu_sex, class_id, age); } //修改一个 public Boolean updateStudent(int id,String stu_name,String stu_sex,int class_id,int age){ return studentsMapper.updateStudent(id, stu_name, stu_sex, class_id, age); } }
6.controller层
package site.longkui.app.controller;   import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; import site.longkui.app.service.StudentsService;   import java.util.HashMap; import java.util.List;   @RestController @RequestMapping("/students") public class StudentsController { @Autowired private StudentsService studentsService;   //查询所有 @GetMapping("/getList") public List<HashMap<HashMap,HashMap>> getList(){ try { List<HashMap<HashMap,HashMap>>res = studentsService.getList(); return res; }catch (Exception e){ e.toString(); return null; } } //删除一个 @GetMapping("/del/{id}") public Boolean delById(@PathVariable int id){ return studentsService.delById(id); } //新增一个 @GetMapping("/add/{stu_name}/{stu_sex}/{class_id}/{age}") public Boolean insertStudent(@PathVariable String stu_name, @PathVariable String stu_sex, @PathVariable int class_id, @PathVariable int age){ return studentsService.insertStudent(stu_name, stu_sex, class_id, age); } //更新一个 @GetMapping("/update/{id}/{stu_name}/{stu_sex}/{class_id}/{age}") public Boolean updateStudent(@PathVariable int id, @PathVariable String stu_name, @PathVariable String stu_sex, @PathVariable int class_id, @PathVariable int age){ return studentsService.updateStudent(id,stu_name, stu_sex, class_id, age); } }

需要说明的是,

  1. getList这个方法的返回值类型
 List<HashMap<HashMap,HashMap>>

一般来说,我们都会用实体类来接受返回的数据,但是,本文这里又偷懒了,没有写实体类对应,直接用比较万能的方式接收返回的数据,实际开发中并不建议这样用。

2. 非常明显的可以看出,这里的增删改查操作都是用的get方法,实际开发中一般是不允许这么干的,一般来说,只有查询数据的时候用get方法,其余的用POST和PUT,本文只是为了偷懒,测试方便所以用的全都是get方法。

7.修改启动类

我们找到启动类的位置,加上MapperScan

package site.longkui.app;   import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;   @SpringBootApplication @MapperScan("site.longkui.**.mapper") public class AppApplication {   public static void main(String[] args) { SpringApplication.run(AppApplication.class, args); } }

一开始因为没有加,导致启动报错:Field studentsMapper in site.longkui.app.service.StudentsService required a bean of type ‘site.longkui.app.mapper.StudentsMapper’ that could not be found.

8.测试增删改查

如果出现了:Whitelabel Error Page 报500,可以参考下面这篇文章尝试一下:

Whitelabel Error Page

1.查询所有数据:

URL:http://localhost:8082/students/getList

2.删除一个学生数据:

URL:http://localhost:8082/students/del/1000

然后去数据库里查看,确实没有了编号是1000的学生信息了。

3.新增一个学生:

URL: http://localhost:8080/studets/add/王老虎/男/5/19

这里没有用API工具,因为这样传中文会有问题,我们用浏览器代替

上面这个请求就会转换成:http://localhost:8082/students/add/%E7%8E%8B%E8%80%81%E8%99%8E/%E7%94%B7/5/19

然后,数据库里也正常有数据了

4.更新一个学生

我们把王老虎的性别改成女

URL: http://localhost:8080/studets/update/1005/王老虎/女/5/19

浏览器会转换成:

http://localhost:8082/students/update/1005/%E7%8E%8B%E8%80%81%E8%99%8E/%E5%A5%B3/5/19

然后去数据库里查询,发现王老虎的性别已经被修改了。

9.总结

本来觉得原理都懂,手搓一遍应该很简单,但是做和说是两码事,真正试一试就能看出很多小问题了。

 

标签:SpringBoot,int,改查,id,stu,CURD,org,class,name
From: https://www.cnblogs.com/longkui-site/p/18474976

相关文章

  • 基于Java+Springboot+Vue开发的鲜牛奶订购管理系统
    项目简介该项目是基于Java+Springboot+Vue开发的鲜牛奶订购管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的鲜牛奶订购管理系统项目,大学生可以在实践中学......
  • 基于nodejs+vue基于SpringBoot共享单车管理信息平台[开题+源码+程序+论文]计算机毕业
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容一、选题背景关于共享单车管理信息平台的研究,现有研究主要以共享单车的运营模式、市场竞争等为主。专门针对基于SpringBoot框架构建共享单车管理信息平台的研究较少......
  • 基于nodejs+vue基于springboot高校毕业生信息管理系统[开题+源码+程序+论文]计算机毕
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容一、选题背景关于高校毕业生信息管理系统的研究,现有研究主要以传统管理模式为主,专门针对基于springboot技术构建高校毕业生信息管理系统的研究较少。在国内外,高校的......
  • 基于nodejs+vue基于SpringBoot动漫电影网站[开题+源码+程序+论文]计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容一、选题背景关于动漫电影网站的研究,现有研究主要以通用视频网站或单纯动漫网站的构建为主,专门针对结合动漫电影以及手办商城等多功能于一体的SpringBoot动漫电影网......
  • 基于SpringBoot+Vue的学生宿舍管理系统的设计与实现(带文档)
    基于SpringBoot+Vue的学生宿舍管理系统的设计与实现(带文档)开发语言:Java数据库:MySQL技术:SpringBoot+MyBatis+Vue等工具:IDEA/Ecilpse、Navicat、Maven学生宿舍管理系统主要分为三个角色:管理员、宿管员和学生。每个角色都有其独特的功能模块,以满足不同用户的需求。管理......
  • 基于SpringBoot+Vue的蜗牛兼职网的设计与实现(带文档)
    基于SpringBoot+Vue的蜗牛兼职网的设计与实现(带文档)开发语言:Java数据库:MySQL技术:SpringBoot+MyBatis+Vue等工具:IDEA/Ecilpse、Navicat、Maven该系统主要分为三个角色:管理员、用户和企业,每个角色都有其独特的功能模块,以满足不同用户的需求。管理员角色的核心功能模块......
  • springboot科研项目验收管理系统(11722)
     有需要的同学,源代码和配套文档领取,加文章最下方的名片哦一、项目演示项目演示视频二、资料介绍完整源代码(前后端源代码+SQL脚本)配套文档(LW+PPT+开题报告)远程调试控屏包运行三、技术介绍Java语言SSM框架SpringBoot框架Vue框架JSP页面Mysql数据库IDEA/Eclipse开发四、项......
  • springboot高校专业实习管理系统的设计和开发(11738)
     有需要的同学,源代码和配套文档领取,加文章最下方的名片哦一、项目演示项目演示视频二、资料介绍完整源代码(前后端源代码+SQL脚本)配套文档(LW+PPT+开题报告)远程调试控屏包运行三、技术介绍Java语言SSM框架SpringBoot框架Vue框架JSP页面Mysql数据库IDEA/Eclipse开发四、项......
  • 【Java后端】SpringBoot 自动配置原理解析
    为什么就这一个注解,就可以让SpringBoot自动配置呢?为了更清晰地阐述SpringBoot自动配置的底层原理,我们将结合源码进行更深入的分析,并加入一些关键步骤的代码片段。 注意:按住Ctrl键不松,点击相应注解,即可进入对应源码1. @SpringBootApplication 注解的秘密:开启自动配置......
  • 基于SpringBoot框架的网上购书系统的设计与实现
    源码获取:点我!!!文章目录前言一、背景及意义选题背景选题目的二、系统设计主要功能运行环境三、系统实现部分页面截图展示部分代码展示前言提示:这里可以添加本文要记录的大概内容:二十一世纪是网络化,信息化的时代,为了满足广大读者的需求,设计并开发了适应于当前经......