Java 系统学习 | Springboot 实现增删改查

本篇使用 Springboot3 框架,IDEA2022 编辑器,java17 版本。


新建 package,创建好目录

创建的目录结构如下

image


pom.xml 添加依赖包

  • soringboot web 依赖

  • 连接 mysql 数据库用到的 mybatis 依赖和 mysql 驱动依赖

  • lombok 依赖,可以在编译时自动添加 get、set、toString、构造器等方法

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>hello</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
    </properties>

    <parent>
        <artifactId>spring-boot-starter-parent</artifactId>
        <groupId>org.springframework.boot</groupId>
        <version>3.1.3</version>
    </parent>

    <dependencies>
        <!-- web 依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!-- mybatis 依赖 -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>3.0.0</version>
        </dependency>

        <!-- mysql 驱动依赖 -->
        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
        </dependency>

        <!-- lombok 依赖 -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>

</project>

添加依赖包后记得刷新 maven


项目入口程序 TestApplication.java

package com.holly;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class TestApplication {
    public static void main(String[] args) {
        SpringApplication.run(TestApplication.class, args);
    }
}

配置数据库 application.yml

前提是把本地安装的 mysql 服务启动

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/test
    username: root
    password: root

创建表 user

我这里直接用命令行创建

CREATE TABLE user (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(255) NOT NULL,
    password VARCHAR(255) NOT NULL,
    nickname VARCHAR(255),
    email VARCHAR(100),
    user_pic VARCHAR(255),
    create_time TIMESTAMP,
    update_time TIMESTAMP
);

编辑器右侧点击【Database】,添加 mysql 数据库连接,可以直接查看数据库信息

image


创建 user 类,/pojo/User.java

  • 添加 @Data 注解,利用 lombok 依赖自动添加 get、set 等方法

  • 实例中不再使用表字段的下划线格式,改为小驼峰方式

package com.holly.pojo;

import lombok.Data;

import java.time.LocalDateTime;

@Data
public class User {
    private int id;
    private String username;
    private String password;
    private String nickname;
    private String email;
    private String userPic;
    private LocalDateTime createTime;
    private LocalDateTime updateTime;
}

创建 user 控制器 /controller/UserController.java

  • 添加控制器注解 @RestController

  • 添加请求路由注解 @RequestMapping("/user")

  • 注解自动注入 userService

  • 每个方法添加路由注解

package com.holly.controller;

import com.holly.pojo.User;
import com.holly.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;

    // 添加
    @PostMapping
    public String add(User user) {
        userService.add(user);

        return "添加成功";
    }

    // 删除
    @DeleteMapping
    public String delete(int id) {
        userService.del(id);

        return "删除成功";
    }

    // 更新
    @PutMapping
    public String update(User user) {
        userService.update(user);

        return "编辑成功";
    }

    // 查询
    @GetMapping
    public User detail(int id) {
        User user = userService.detail(id);

        return user;
    }
}

创建 service 接口 /service/UserService.java

  • 编写控制器时,调用了 userService 的方法,根据错误提示补充完整 service 接口。无需手动写入。
package com.holly.service;

import com.holly.pojo.User;

public interface UserService {

    void add(User user);

    void del(int id);

    void update(User user);

    User detail(int id);
}

创建 service 实现类 /service/impl/UserServiceImpl.java

  • 实现了 service 接口,可根据错误提示补充文件内容

  • 添加 service 注解 @Service

  • 自动注入 userMapper

package com.holly.service.impl;

import com.holly.mapper.UserMapper;
import com.holly.pojo.User;
import com.holly.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    UserMapper userMapper;

    @Override
    public void add(User user) {
        user.setCreateTime(LocalDateTime.now());
        user.setUpdateTime(LocalDateTime.now());

        userMapper.add(user);
    }

    @Override
    public void del(int id) {
        userMapper.del(id);
    }

    @Override
    public void update(User user) {
        user.setUpdateTime(LocalDateTime.now());

        userMapper.update(user);
    }

    @Override
    public User detail(int id) {
        User user = userMapper.detail(id);

        return user;
    }
}

创建 mapper 接口 /mapper/UserMapper.java

  • 添加 mapper 注解 @Mapper
package com.holly.mapper;

import com.holly.pojo.User;
import org.apache.ibatis.annotations.*;

@Mapper
public interface UserMapper {

    @Insert("insert into user(username, password, nickname, email, user_pic, create_time, update_time) " +
            "values(#{username}, #{password}, #{nickname}, #{email}, #{userPic}, #{createTime}, #{updateTime})")
    void add(User user);

    @Delete("delete from user where id = #{id}")
    void del(int id);

    @Update("update user set username = #{username}, password = #{password}, nickname = #{nickname}, email = #{email}, " +
            "user_pic = #{userPic}, update_time = #{updateTime} where id = #{id}")
    void update(User user);

    @Select("select * from user where id = #{id}")
    User detail(int id);
}

启动项目

image


测试

使用接口测试工具,选择请求方式,填写请求路径,请求参数,得到请求返回结果

添加

image

返回添加成功的提示,去数据表中确认

image


编辑

image

返回编辑成功,数据表中确认

image


删除

image

返回删除成功,表中确认 id 为 1 的数据被删除

image


查询

image

返回用户信息,但是后面三个字段没有查到

因为表字段名和 user 实例中的属性名不匹配,一个是下划线,一个是小驼峰。

此时需要在 application.yml 中补充以下配置

mybatis:
  configuration:
    map-underscore-to-camel-case: true

image

配置完重新启动项目,再次测试查询,发现可以正常取到每个字段的数据了

image


至此,最基本的 CURD 实现啦。

不过还很简陋,比如密码没有加密,比如数据没有校验,比如返回结果简单等等,后面再慢慢补充。

posted @ 2024-01-25 15:23  菜乌  阅读(1203)  评论(0编辑  收藏  举报