创建数据库表:
/*
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测试: