简单的增删查改实现

发布于 2024-10-05
更新于 2025-12-30
约 1,341 字
7 分钟阅读
AI摘要

正在生成中...

项目概述

基于 SpringBoot、MySQL 的增删查改

新建项目

  1. 新建数据库以及表

新建 java 项目

创建项目:

选择 Spring Initializr,选择 java 和 Maven,填写项目名字

SDK 选择 1.8,Java 选择 8

下一步,选择以下的配置:

简单的增删查改实现-Springboot配置

配置 application.yml 文件

默认是application.properties,自己再新建一个application.yml即可

# 数据库地址
spring.datasource.url=jdbc:mysql://localhost:3306/springboot?serverTimezone=GMT%2b8
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# 自己的数据库名以及密码
spring.datasource.username=root
spring.datasource.password=root
# mybatis
# 对应的映射文件
mybatis.mapper-locations=classpath:mybatis/mapper/*.xml

架构

四个软件包:controllerservicemapperentity

以及一个主应用入口:Application

简单的增删查改实现-基础架构

  1. controller 对应控制器,用于对接接口的映射
  2. service 用于业务处理(当然目前比较简单,只作用于一个传递的功能)
  3. mapper 就是一些增删改查的接口
  4. entity 实体类,数据库中的每一张表对应于一个实体类(当然,可以有更详细的vo,bo之类的,只不过当前的demo比较简单,就一个数据库对应一个实体类啦)
  5. resource/mapper 用于编写实际sql的xml的地方

编写代码

先直接上所有文件

所有文件

编写实体类 User

在包entity下,创建User类,然后提供与数据库对应的字段作为属性,现在使用lombok提供的注解,省略了很多构造方法

package com.lanke.player_demo.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class User {
private int id;
private String name;
private String password;
private String sex;
private int age;
private String phone;
}
编写 mapper 接口

目前比较简单,只针对了一张表

package com.lanke.player_demo.mapper;
import com.lanke.player_demo.entity.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@Mapper
public interface UserMapper {
List<User> getAllUsers();
int addUser(User user);
int updUserById(User user);
User findUserById(@Param("id") int id);
int delUserById(@Param("id") int id);
}

编写mapper.xml

文件在 Resource 目录下

<!--记得修改com.lanke.player_demo,每个项目不一样的-->
<?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 namespace="com.lanke.player_demo.mapper.UserMapper">
<!-- public List<User> getAllUsers(); -->
<select id="getAllUsers" resultType="com.lanke.player_demo.entity.User">
select * from user
</select>
<!-- 添加用户方法 用户id为自增主键,所以这里我们不需要传入id值 -->
<insert id="addUser" >
insert into user
(name,password,sex,age,phone)
values (#{name},#{password},#{sex},#{age},#{phone})
</insert>
<!-- 根据用户id进行更新操作 -->
<update id="updUserById">
update user
set name = #{name},
sex = #{sex},
phone = #{phone},
age = #{age}
where id = #{id}
</update>
<!-- 根据用户id查询用户详情 -->
<select id="findUserById" resultType="com.lanke.player_demo.entity.User">
select * from user where id = #{id}
</select>
<!-- 根据id删除用户 -->
<delete id="delUserById">
delete from user where id = #{id}
</delete>
</mapper>

注意:

  1. namespace命名空间,要指定你的mapper接口的完整路径
  2. 增删改查分别对应于四个标签 insert delete update select
  3. 每个sql对应于你的mapper接口中的方法,我们需要通过id去指定你当前的sql是哪个接口方法的
  4. #{xxx} 这是mybatis提供的一种占位符,就是之前sql中学的 ? 占位符
  5. resultType 结果类型,如果是实体类的话也需要通过指定完整的类路径
编写 service
package com.lanke.player_demo.service;
import com.lanke.player_demo.entity.User;
import com.lanke.player_demo.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
public List<User> getAllUsers(){
return userMapper.getAllUsers();
}
public int addUser(User user){
return userMapper.addUser(user);
}
public int updUserById(User user){
return userMapper.updUserById(user);
}
public User findUserById(int id){
return userMapper.findUserById(id);
}
public int delUserById(int id){
return userMapper.delUserById(id);
}
}
编写 controller
package com.lanke.player_demo.controller;
import com.lanke.player_demo.entity.User;
import com.lanke.player_demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/list")
public List<User> getAllUsers(){
return userService.getAllUsers();
}
@PostMapping("/add")
public int addUser(@RequestBody User user){
return userService.addUser(user);
}
@PutMapping("/upd")
public int updUserById(@RequestBody User user){
return userService.updUserById(user);
}
@GetMapping("/find/{id}")
public User findUserById(@PathVariable("id") int id){
return userService.findUserById(id);
}
@DeleteMapping("/delete/{id}")
public int delUserById(@PathVariable("id") int id){
return userService.delUserById(id);
}
}

 @RestController 这个注解,可以将你的每个接口的返回值转换为一个json  @RequestMapping 用于指定接口的映射规则,这个的话,接着往下看就明白啦。

详情可以参阅:springbootWeb常用注解使用_springboot web 相关注解-CSDN博客

这样一个简单的增删查改就完成了。

但实际的后端开发仅仅这样是不够的,我们还需要写接口等等内容

Maven 配置
<?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>
<groupId>org.lanke</groupId>
<artifactId>player_demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>player_demo</name>
<description>player_demo</description>
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<spring-boot.version>2.7.6</spring-boot.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.3.0</version>
</dependency>
<!--热部署-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
<configuration>
<mainClass>org.lanke.player_demo.PlayerDemoApplication</mainClass>
<skip>true</skip>
</configuration>
<executions>
<execution>
<id>repackage</id>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
MySQL 代码
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` int NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`name` varchar(255) COMMENT '姓名',
`password` varchar(255) COMMENT '密码', -- 注意:通常密码不会以明文形式存储,这里仅作示例
`sex` enum('male', 'female', 'other') DEFAULT NULL COMMENT '性别', -- 使用ENUM类型限制性别输入
`age` int DEFAULT NULL COMMENT '年龄',
`phone` varchar(20) DEFAULT NULL COMMENT '电话', -- 电话号码通常不需要255个字符那么长
PRIMARY KEY (`id`) -- USING BTREE是多余的,InnoDB默认使用B-Tree索引
) ENGINE=InnoDB
AUTO_INCREMENT=1 -- 通常从1开始自增,除非有特定原因
CHARACTER SET=utf8mb4
COLLATE=utf8mb4_unicode_ci
COMMENT='用户信息表'
ROW_FORMAT=Dynamic;
-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES (1, '张三', '123456', '男', 25, '18888889999');
INSERT INTO `user` VALUES (3, 'robin', '123456', '男', 22, '14424567789');
SET FOREIGN_KEY_CHECKS = 1;

常见问题 :

出现依赖爆红错误

解决方法是选择/文件/使缓存失效,重启就可以了

简单的增删查改实现-缓存失效

参考资料

  1. springboot 如何编写增删改查后端接口,小白极速入门,附完整代码_教你写后端接口-CSDN博客
阅读量: --
评论数:--