学习记录之附上GitHub 代码 swagger实现增删查改详细(包括建立数据库开始)

源代码链接https://github.com/leasonlan/crud
数据库


```sql

DROP TABLE IF EXISTS `myuser`;
CREATE TABLE `myuser` (
  `id` int(32) NOT NULL AUTO_INCREMENT,
  `username` varchar(32) DEFAULT NULL,
  `password` varchar(32) DEFAULT NULL,
  `name` varchar(32) DEFAULT NULL,
  `classnum` varchar(10) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of myuser
-- ----------------------------
INSERT INTO `myuser` VALUES ('1', '1001', '123456', '张三', '1');
INSERT INTO `myuser` VALUES ('2', '1002', '123456', '李四', '2');
INSERT INTO `myuser` VALUES ('3', '1003', '123456', '王五', '1');
INSERT INTO `myuser` VALUES ('4', '1004', '123456', '陈六', '2');
INSERT INTO `myuser` VALUES ('5', '1005', '123456', '刘七', '3');


在这里插入图片描述

实体类


```java
package com.example.crud.entity;

/**
 * @author desheng.lan
 * @version 1.0
 * @date 2019/12/6 0006 上午 9:19
 */
public class Myuser {
    
    private int id;
    private String username;
    private String password;
    private String name;
    private String classNum;

    public Myuser(){
        /*
        * 构造函数*/
    }
    public Myuser(int id,String username){
        super();
        this.id=id;
        this.username=username;
    }
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }


    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getClassNum() {
        return classNum;
    }

    public void setClassNum(String classNum) {
        this.classNum = classNum;
    }

    @Override
    public String toString() {
        return "Myuser{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", name='" + name + '\'' +
                ", classNum='" + classNum + '\'' +
                '}';
    }
}

mapper

package com.example.crud.mapper;

import com.example.crud.entity.Myuser;

import java.util.List;
import java.util.Map;

/**
 * @author desheng.lan
 * @version 1.0
 * @date 2019/12/5 0005 下午 3:54
 */
//@Mapper
// 在启动器上加了@MapperScan("com.example.crud.mapper")这里就没必要写上面那句
//    用的依赖是<dependency>
//			<groupId>org.mybatis.spring.boot</groupId>
//			<artifactId>mybatis-spring-boot-starter</artifactId>
//			<version>1.3.0</version>
//		</dependency>
public interface MyuserMapper {
    /*
    * 查询统计班级人数
    * */
    public int getuserCount(Map<String, Object> params);
    /*
    * 查询用户详细信息
    * */
    public List<Map<String,Object>> getUserInfo(Map<String,Object> mpa);
    /*
    *增加用户
    * */
    public boolean addUser(Myuser myuser);
    /*
    *删除用户
    * */
    public int deleteUser(Map<String,Object> map);
    /*
    * 修改用户
    * */
    public void update(Myuser myuser);
}

package com.example.crud.service;

import com.example.crud.dto.Rsp;
import com.example.crud.entity.Myuser;
import com.example.crud.mapper.MyuserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

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

/**
 * @author desheng.lan
 * @version 1.0
 * @date 2019/12/5 0005 下午 4:08
 */
@Service
public class MyuserService {
    @Value("dev")
    private String dataShow;

    @Autowired MyuserMapper myuserMapper;
    /*
    *
    * 根据班级号统计人数
    * 根据id查询用户详细信息
    *
    * */
    public Object getuserCount(String classNumTotal){
        Map<String, Object> pam = new HashMap<String, Object>();
        pam.put("classNumTotal",classNumTotal);
        pam.put("dataShow", dataShow);
        return myuserMapper.getuserCount(pam);
    }
    public Object getUserInfo(int id){
        Map<String,Object> pam=new HashMap<String, Object>();
        pam.put("id",id);
        pam.put("dataShow",dataShow);
        return myuserMapper.getUserInfo(pam);
    }
    /*
    * 增加新用户信息
    * */
    public Object addUser(Myuser myuser){
        try {
            myuserMapper.addUser(myuser);
        }
        catch (Exception e){
            System.out.println("新增失败!");
            e.printStackTrace();
            return false;
        }
        return Rsp.succ("添加用户成功!", true);
    }
    /*
    *
    *根据id删除用户信息
    * */
    public Object deleteUser(int id){
        Map<String,Object> map=new HashMap<String, Object>();
        map.put("id",id);
        map.put("dataShow",dataShow);
        return myuserMapper.deleteUser(map);
    }
    /*
    * 修改用户信息
    * */
    public Object updateUser(Myuser myuser){
/*      boolean flag=false;
        try {
            myuserMapper.updateUser(id,myuser);
            flag=true;
        }
        catch (Exception e){
            System.out.println("修改失败!");
            e.printStackTrace();
        }
        return flag;*/
        try{
            myuserMapper.update(myuser);
        }catch (Exception e){
            System.out.println("修改失败!");
            e.printStackTrace();
            return false;
        }
        return true;
    }
}

package com.example.crud.controller;

import com.example.crud.dto.Rsp;
import com.example.crud.entity.Myuser;
import com.example.crud.service.MyuserService;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * @author desheng.lan
 * @version 1.0
 * @date 2019/12/5 0005 下午 4:21
 */
@RestController
@RequestMapping("/myuser")
public class MyuserController {

    @Autowired
    MyuserService myuserService;

    @ApiOperation(value ="查询同一个班级人数",notes="查询同一个班级人数")
    @ApiImplicitParam(name = "classNumTotal",value = "班级号", required = true, dataType = "String", paramType = "query")

    @RequestMapping(value = "/getuserCount",method = RequestMethod.GET)
    Object getuserCount(@RequestParam String classNumTotal){
        System.out.println("传入班级为"+classNumTotal);
        return Rsp.succ("查询成功!", myuserService.getuserCount(classNumTotal));
    }

    @ApiOperation(value ="查询用户详细信息",notes="查询用户详细信息")
    @ApiImplicitParam(name = "id",value = "id", required = true, dataType = "Integer", paramType = "query")
    @RequestMapping(value = "/getUserInfo",method = RequestMethod.GET)
    Object getUserInfo(int id){
        System.out.println("传入班级为"+id);
        return Rsp.succ("查询成功!", myuserService.getUserInfo(id));
    }

    @ApiOperation(value ="添加用户信息",notes="添加用户信息")
    @ApiImplicitParam(name = "myuser",value = "新用户实体类", required = true, dataType = "Myuser")

    @RequestMapping(value = "addUser",method = RequestMethod.POST)
    public Object addUser(@RequestBody Myuser myuser){
        System.out.println("controller传入用户对象为"+myuser.toString());
        return myuserService.addUser(myuser);
    }

    @ApiOperation(value ="删除用户信息",notes="删除用户信息")
    @ApiImplicitParam(name = "id",value = "输入id", required = true,dataType = "Integer",paramType = "query")
    @RequestMapping(value = "/deleteUser",method = RequestMethod.DELETE)
    Object deleteUser(int id){
        return Rsp.succ("删除成功!",myuserService.deleteUser(id));
    }



    @ApiOperation(value ="修改用户信息",notes="修改用户信息")
    @ApiImplicitParam(name = "myuser",value = "修改用户实体类", required = true, dataType = "Myuser")
    @RequestMapping(value = "updateUser",method = RequestMethod.PUT)
    Object updateUser(@RequestBody Myuser myuser) {
        return myuserService.updateUser(myuser);
    }
}

<?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.example.crud.mapper.MyuserMapper">

	<select id="getuserCount" parameterType="java.util.Map" resultType="java.lang.Integer">
		<if test="dataShow == 'dev'">
			select count(*) from myuser m
			where 1 = 1
			<if test="classNumTotal!=null and classNumTotal!=''">
			AND m.`classnum`=#{classNumTotal}
			</if>
		</if>
	</select>

	<select id="getUserInfo" parameterType="java.util.Map" resultType="java.util.Map">
		select * from myuser m
		where 1 = 1
		<if test="id!=null and id!=''">
			AND m.`id`=#{id}
		</if>
	</select>

	<insert id="addUser" parameterType="com.example.crud.entity.Myuser">
		insert into
		myuser
		<trim prefix="(" suffix=")" suffixOverrides=",">
				<if test="username!=null">
				  username,
				</if>
				<if test="password!=null">
				  password,
				</if>
				<if test="name!=null">
				  name,
				</if>
				<if test="classNum!=null">
					classNum,
				</if>
		</trim>
		<trim prefix="values(" suffix=")" suffixOverrides=",">
				<if test="username!=null">
					#{username},
				</if>
				<if test="password!=null">
					#{password},
				</if>
				<if test="name!=null">
					#{name},
				</if>
				<if test="classNum!=null">
					#{classNum},
				</if>
		</trim>
	</insert>

	<delete id="deleteUser"  parameterType="java.util.Map" >
		delete from
			myuser
			where
			myuser.id=#{id}
	</delete>

	<update id="update" parameterType="com.example.crud.entity.Myuser">
		<if test="id!=null and id!=''">
		update myuser m
		<set>
			<if test="username!=null and username!=''">
				username=#{username},
			</if>
			<if test="password!=null and password!=''">
				password=#{password},
			</if>
			<if test="name!=null and name!=''">
				name=#{name},
			</if>
			<if test="classNum!=null and classNum!=''">
				classnum=#{classNum},
			</if>
		</set>
		where m.id=#{id}
		</if>
	</update>
</mapper>


在这里插入图片描述
查询
在这里插入图片描述
修改
在这里插入图片描述
@ApiImplicitParams、ApiImplicitParam的使用

@ApiImplicitParam:
作用在方法上,表示单独的请求参数 
参数: 
1. name :参数名。 
2. value : 参数的具体意义,作用,解释。 
3. required : 参数是否必填。 
4. dataType :参数的数据类型。(String、int) 
5. paramType :查询参数类型,这里有几种形式:

类型 作用
path 以地址的形式提交数据
query 直接跟参数完成自动映射赋值
body 以流的形式提交 仅支持POST
header 参数在request headers 里边提交
form 以form表单的形式提交 仅支持POST
这个参数和SpringMvc中的@RequestBody冲突,索性我就去掉了paramType,对接口测试并没有影响。

@ApiImplicitParams:
用于方法,包含多个 @ApiImplicitParam: 
例:

@ApiOperation("查询测试")
@GetMapping("select")
//@ApiImplicitParam(name="name",value="用户名",dataType="String", paramType = "query")
@ApiImplicitParams({
@ApiImplicitParam(name="name",value="用户名",dataType="string", paramType = "query",example="xingguo"),
@ApiImplicitParam(name="id",value="用户id",dataType="long", paramType = "query")})
public void select(){
}
 

paramType 示例详解
path
@RequestMapping(value = "/findById1/{id}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)

@PathVariable(name = "id") Long id
body
@ApiImplicitParams({ @ApiImplicitParam(paramType = "body", dataType = "MessageParam", name = "param", value = "信息参数", required = true) })
@RequestMapping(value = "/findById3", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_UTF8_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)

@RequestBody MessageParam param

提交的参数是这个对象的一个json,然后会自动解析到对应的字段上去,也可以通过流的形式接收当前的请求数据,但是这个和上面的接收方式仅能使用一个(用@RequestBody之后流就会关闭了)
header
@ApiImplicitParams({ @ApiImplicitParam(paramType = "header", dataType = "Long", name = "id", value = "信息id", required = true) })

String idstr = request.getHeader("id");
if (StringUtils.isNumeric(idstr)) {
id = Long.parseLong(idstr);
}
Form
@ApiImplicitParams({ @ApiImplicitParam(paramType = "form", dataType = "Long", name = "id", value = "信息id", required = true) })
@RequestMapping(value = "/findById5", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_UTF8_VALUE, consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
总结:
 
(1)对于@ApiImplicitParam的paramType:query、form域中的值需要使用@RequestParam获取, header域中的值需要使用@RequestHeader来获取,path域中的值需要使用@PathVariable来获取,body域中的值使用@RequestBody来获取,否则可能出错;而且如果paramType是body,name就不能是body,否则有问题,与官方文档中的“If paramType is "body", the name should be "body"不符。

@ApiImplicitParams:用在方法上包含一组参数说明
@ApiImplicitParam:用在@ApiImplicitParams注解中,指定一个请求参数的各个方面
paramType:参数放在哪个地方
header-->请求参数的获取:@RequestHeader
query-->请求参数的获取:@RequestParam
path(用于restful接口)-->请求参数的获取:@PathVariable
body(不常用)
form(不常用)
name:参数名
dataType:参数类型
required:参数是否必须传
value:参数的意思
defaultValue:参数的默认值
@ApiResponses:用于表示一组响应
@ApiResponse:用在@ApiResponses中,一般用于表达一个错误的响应信息
code:数字,例如400
message:信息,例如"请求参数没填好"
response:抛出异常的类
以上这些就是最常用的几个注解了。

发布了32 篇原创文章 · 获赞 13 · 访问量 1509

猜你喜欢

转载自blog.csdn.net/weixin_38068605/article/details/103427039
今日推荐