SpringBoot+SpringMVC实现增删改查

创建数据库表:

/*
 Navicat Premium Data Transfer

 Source Server         : localhost
 Source Server Type    : MySQL
 Source Server Version : 50738
 Source Host           : localhost:3306
 Source Schema         : mydemo

 Target Server Type    : MySQL
 Target Server Version : 50738
 File Encoding         : 65001

 Date: 10/09/2023 16:07:36
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`  (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `phone` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,
  `username` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,
  `create_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `update_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP(0),
  `status` int(11) NOT NULL DEFAULT 1,
  `pwd` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 16 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;

common:

package com.walk.any.common;

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;

import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Date;

/**
 *
 * Description
 * Date : Create 2023/08/03
 */
@Component
@Slf4j
public class TimeObjectHandler implements MetaObjectHandler {

    // 时间无法匹配添加时间
    Date todayDate = new Date();

    LocalDateTime dateTime = todayDate.toInstant()
            .atZone(ZoneId.systemDefault())
            .toLocalDateTime();

    @Override
    public void insertFill(MetaObject metaObject) {
        log.info("公共字段填充[insert]........");
        log.info(metaObject.toString());

        metaObject.setValue("createTime", dateTime);
        metaObject.setValue("updateTime", dateTime);
    }

    @Override
    public void updateFill(MetaObject metaObject) {

        log.info("公共字段填充[update]........");
        log.info(metaObject.toString());

        metaObject.setValue("updateTime", dateTime);
    }
}

config:

package com.walk.any.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

@Configuration
@EnableSwagger2
public class SwaggerConfig {

    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.walk.any"))
                .paths(PathSelectors.any())
                .build();
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("Spring Boot使用Swagger2构建 Restful Api")
                .termsOfServiceUrl("www")
                .version("1.0.0")
                .build();
    }


}

Restful Api:

package com.walk.any.utils;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.HashMap;
import java.util.Map;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class RestData {

    // 状态码
    private Integer code;
    // 信息表示
    private String message;
    // 业务数据
    private Map<String, Object> data = new HashMap<>();

    /**
     * 返回成功
     */
    public static RestData Success(){
        RestData restData = new RestData();
        restData.setCode(ResultCodeEnum.SUCCESS.getCode());
        return restData;
    }
    /**
     * 返回失败
     */
    public static RestData error(){
        RestData restData = new RestData();
        restData.setCode(ResultCodeEnum.ERROR.getCode());
        restData.setMessage(ResultCodeEnum.ERROR.getMessage());
        return restData;
    }
    /**
     * 特定返回结果
     */
    public static RestData setResult(ResultCodeEnum  resultCodeEnum){
        RestData restData = new RestData();
        restData.setCode(resultCodeEnum.getCode());
        restData.setMessage(resultCodeEnum.getMessage());
        return restData;
    }

    /**
     * 设置特定响应消息
     */
    public RestData message(String message){
        this.setMessage(message);
        return this;
    }

    /**
     * 设置特定响应状态码
     */
    public RestData code(Integer code){
        this.setCode(code);
        return this;
    }
    /**
     * 返回数据
     */
    public RestData data(String key, Object value){
        this.data.put(key, value);
        return this;
    }
}

Restful枚举:

package com.walk.any.utils;

import lombok.*;

/**
 * 35328
 *
 * @since create 2023-09-05
 */
@Getter
@ToString
@NoArgsConstructor
@AllArgsConstructor
public enum ResultCodeEnum {

    SUCCESS(200,"操作成功"),
    ERROR(201,"操作失败"),
    SEARCH_ERROR(202,"查询异常"),
    CHECK_ERROR(400,"校验异常"),
    OPERATION_ERROR(500,"请联系开发人员");

    /**
     * 返回的状态码
     */
    private Integer code ;

    /**
     * 返回状态码对应的信息
     */
    private String message;
}

entity:

package com.walk.any.entity;
import java.time.LocalDateTime;
import java.util.Date;
import java.io.Serializable;

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import com.baomidou.mybatisplus.annotation.TableName;

/**
 * (User)实体类
 *
 * @author makejava
 * @since 2023-09-10 09:41:23
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@TableName("user")
@ApiModel("用户实体类")
public class User implements Serializable {

    @ApiModelProperty(value = "id",hidden=true)
    private Long id;
    @ApiModelProperty(value = "用户名",position=1)
    private String username;
    @ApiModelProperty(value = "用户密码",position=2)
    private String pwd;

    @ApiModelProperty(value = "手机号",position=3)
    private String phone;

    @ApiModelProperty(value = "用户状态",hidden=true)
    private Integer status;

    @ApiModelProperty(value = "创建时间",hidden=true)
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;

    @ApiModelProperty(value = "更新时间",hidden=true)
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
}

mapper层:

package com.walk.any.mapper;

import com.walk.any.entity.User;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.mybatis.spring.annotation.MapperScan;

import java.util.List;

/**
 * <p>
 *  Mapper 接口
 * </p>
 *
 * @author WaLinead
 * @since 2023-09-10
 */
@Mapper
public interface UserMapper extends BaseMapper<User> {
    // 新增
    public int insert(User user);
    // 根据 名称 查询
    public User findByName(String name);
}

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 namespace="com.walk.any.mapper.UserMapper">

    <!-- insert user 其中keyProperty=user中的id字段-->
    <insert id = "insert"  useGeneratedKeys="true" keyProperty="id"  parameterType="User">
        INSERT INTO USER(phone,username,pwd) VALUES(#{phone},#{username},#{pwd});
    </insert>

    <!-- update user -->
    <update id="update" parameterType="User">
        UPDATE USER SET username=#{username} , pwd=#{pwd} , phone = #{phone} WHERE id=#{id}
    </update>

    <!-- find user by id-->
    <select id="findById" parameterType="int" resultType="User">
        SELECT * FROM USER WHERE id=#{id}
    </select>

    <!-- find user by name -->
    <select id="findByName" parameterType="String" resultType="User">
        SELECT * FROM USER WHERE username like #{name}
    </select>

    <!-- findAll user by name -->
    <select id="findAllName" parameterType="String" resultType="User">
        SELECT * FROM USER WHERE username like "%"#{name}"%"
    </select>

    <!-- find all user -->
    <select id="findAllUser" resultType="User">
        SELECT * FROM USER
    </select>

    <!-- delete user -->
    <delete id="deleteById" parameterType="int">
        DELETE FROM USER WHERE ID=#{id}
    </delete>

</mapper>

service接口:

package com.walk.any.service;

import com.walk.any.entity.User;
import com.baomidou.mybatisplus.extension.service.IService;
import com.walk.any.utils.RestData;

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author WaLinead
 * @since 2023-09-10
 */
public interface UserService extends IService<User> {

    public RestData register(User user);
    public RestData findByName(String name);

}

serviceImpl层:

package com.walk.any.service.impl;

import com.walk.any.entity.User;
import com.walk.any.mapper.UserMapper;
import com.walk.any.service.UserService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.walk.any.utils.RestData;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author WaLinead
 * @since 2023-09-10
 */
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {

    @Resource
    private UserMapper userMapper;

    /*
    * 用户注册
    * */
    @Override
    public RestData register(User user) {
        RestData resultServer = new RestData();
        if(user.getUsername()==null) {
            resultServer.setCode(401);
            resultServer.setMessage("姓名输入为空,请重新输入");
            return resultServer;
        }else if(user.getPwd()==null){
            resultServer.setCode(402);
            resultServer.setMessage("密码输入为空,请重新输入");
            return resultServer;
        }
        if(userMapper.findByName(user.getUsername())!=null) {
            resultServer.setCode(403);
            resultServer.setMessage("用户名已经注册,请重新输入");
            resultServer.data(user.getUsername(),null);
            return resultServer;
        }
        userMapper.insert(user);
        resultServer.setCode(200);
        resultServer.setMessage("注册成功");
        resultServer.data(user.getUsername(),user);
        return resultServer;
    }

    @Override
    public RestData findByName(String name) {
        RestData resultServer = new RestData();
        User user= userMapper.findByName(name);
        if(user!=null) {
            resultServer.setCode(200);
            resultServer.setMessage("查找成功");
            resultServer.data(user.getUsername(),user);
        }else {
            resultServer.setCode(400);
            resultServer.setMessage("您输入的name有误");
        }
        return resultServer;
    }
}

controller层:

package com.walk.any.controller;


import com.walk.any.entity.User;
import com.walk.any.service.UserService;
import com.walk.any.utils.RestData;
import io.swagger.annotations.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author WaLinead
 * @since 2023-09-10
 */
@Api(tags = "用户管理模块")
@RestController
@RequestMapping("/user")
public class UserController {
    @Resource
    private UserService userService;

    @ApiOperation("用户注册")
    @GetMapping("/register")
    public RestData register(User user) {
        return userService.register(user);
    }

    @ApiOperation("用户名查询")
    @PostMapping("/findByName/{name}")
    public RestData findByUser(@ApiParam("用户名称")@PathVariable("name") String name){
        return userService.findByName(name);
    }
}

依赖:

<?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>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.4.0</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <groupId>com.walk.any</groupId>
    <artifactId>online_take</artifactId>
    <version>1.0-SNAPSHOT</version>

    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    </properties>


    <dependencies>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <!--mybatis的依赖 -->
        <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-starter-web</artifactId>
            <scope>compile</scope>
        </dependency>

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.2</version>
        </dependency>

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.4.1</version>
        </dependency>
        <!--        velocity模板引擎,mybatis-plus代码生成器需要-->
        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity-engine-core</artifactId>
            <version>2.3</version>
        </dependency>

        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>2.3.28</version>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.20</version>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.76</version>
        </dependency>

        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.9</version>
        </dependency>

        <!-- JWT相关 -->
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt</artifactId>
            <version>0.7.0</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.23</version>
        </dependency>

        <!--page helper-->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.4.7</version>
        </dependency>

        <!-- swagger -->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.9.2</version>
            <exclusions>
                <exclusion>
                    <groupId>io.swagger</groupId>
                    <artifactId>swagger-annotations</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>io.swagger</groupId>
                    <artifactId>swagger-models</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.9.2</version>
        </dependency>
        <dependency>
            <groupId>io.swagger</groupId>
            <artifactId>swagger-annotations</artifactId>
            <version>1.5.21</version>
        </dependency>
        <dependency>
            <groupId>io.swagger</groupId>
            <artifactId>swagger-models</artifactId>
            <version>1.5.21</version>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.4.5</version>
            </plugin>
        </plugins>
    </build>

</project>

测试:

swagger测试:
在这里插入图片描述
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

殇彧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值