简单的增删查改实现

24年10月5日 星期六 (已编辑)
1371 字
7 分钟
AI 摘要

正在生成中...

项目概述

基于 SpringBoot、MySQL 的增删查改

新建项目

  1. 新建数据库以及表

新建 java 项目

创建项目:

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

SDK 选择 1.8,Java 选择 8

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

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

配置 application.yml 文件

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

java
# 数据库地址
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提供的注解,省略了很多构造方法

java
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 接口

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

java
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 目录下

xml
<!--记得修改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
java
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
java
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
<?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 代码
shell
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博客

文章标题:简单的增删查改实现

文章作者:Lanke

文章链接:https://blog.blueke.top/posts/987295[复制]

最后修改时间:


商业转载请联系站长获得授权,非商业转载请注明本文出处及文章链接,您可以自由地在任何媒体以任何形式复制和分发作品,也可以修改和创作,但是分发衍生作品时必须采用相同的许可协议。
本文采用CC BY-NC-SA 4.0进行许可。

1 / 1