【Java】SSM+Swagger开发API(二)

接我上一篇博客,这一部分主要是代码的编写。查看上一篇博客请点击

二、各层代码编写
  • 这部分主要是一些之后会用到的自己编写的工具类。
import lombok.Data;

import java.io.Serializable;

@Data
public class Result implements Serializable {

    private int code;

    private String message;

    private Object data;

}
public enum ResultCode {
    SUCCESS(200),//成功
    FAIL(400),//失败
    UNAUTHORIZED(401),//未认证(签名错误)
    NOT_FOUND(404),//接口不存在
    INTERNAL_SERVER_ERROR(500);//服务器内部错误

    public int code;

    ResultCode(int code) {
        this.code = code;
    }
}
public class ResultGenerator {
    private static final String DEFAULT_SUCCESS_MESSAGE = "SUCCESS";

    public static Result genSuccessResult() {
        Result result=new Result();
        result.setData("");
        result.setCode(ResultCode.SUCCESS.code);
        result.setMessage(DEFAULT_SUCCESS_MESSAGE);
        return result;
    }

    public static Result genSuccessResult(Object data) {
        Result result=new Result();
        result.setCode(ResultCode.SUCCESS.code);
        result.setMessage(DEFAULT_SUCCESS_MESSAGE);
        result.setData(data==null?"":data);
        return result;
    }

    public static Result genFailResult(String message) {
        Result result=new Result();
        result.setCode(ResultCode.FAIL.code);
        result.setData("");
        result.setMessage(message);
        return result;
    }

}
  • 这部分是swagger配置类的编写。
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
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
@ComponentScan(basePackages = "com.lanou.controller")
public class Swagger2Config{

    /**
     * @Description:swagger2的配置文件,这里可以配置swagger2的一些基本的内容,比如扫描的包等等
     */
    @Bean
    public Docket createRestApi() {

        return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).select()
                .apis(RequestHandlerSelectors.basePackage("com.lanou.controller"))
                .paths(PathSelectors.any()).build();
    }

    /**
     * @Description: 构建api文档的信息
     */
    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                // 设置页面标题
                .title("考试系统API")
                // 定义版本号
                .version("ver 1.0").build();
    }

}
  • 这部分主要是实体类的编写,采用了Spring的参数验证功能。
import lombok.Data;
import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.Range;

import javax.validation.constraints.Email;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Pattern;
import java.util.Date;

@Data
public class Student {

    private long id;

    @NotBlank(message = "姓名不能为空")
    private String name;

    private int gender;

    private int age;

    private Date birth;

    @Length(min = 18, max = 18, message = "身份证号码格式错误")
    private String identify;

    private String headUrl;

    @Pattern(regexp = "^1[3456789]\\d{9}$", message = "手机号码格式错误")
    private String tel;

    @Email(message = "邮箱格式错误")
    private String email;

    private String addr;

}
  • 这部分主要是DAO层编写以及映射文件的编写。
import org.springframework.stereotype.Repository;

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

@Repository
public interface StudentDao {

   void addStudent(Student student);

   void deleteStudent(int[] idCollections);

   void updateStudent(Student student);

   int getCount();

   List<Student> findStudentByParam(Map<String,Object> param);

   List<Student> findStudentList(int start, int end);

}
<?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.lanou.dao.StudentDao">

  <resultMap id="BaseResultMap" type="com.lanou.entity.Student">
    <id column="id"  jdbcType="INTEGER" property="id" />
    <result column="name" jdbcType="VARCHAR" property="name" />
    <result column="gender" jdbcType="INTEGER" property="gender" />
    <result column="age" jdbcType="INTEGER" property="age" />
    <result column="birth" jdbcType="DATE" property="birth" />
    <result column="identify" jdbcType="VARCHAR" property="identify" />
    <result column="headUrl" jdbcType="VARCHAR" property="headUrl" />
    <result column="tel" jdbcType="VARCHAR" property="tel" />
    <result column="email" jdbcType="VARCHAR" property="email" />
    <result column="addr" jdbcType="VARCHAR" property="addr" />
  </resultMap>

  <insert id="addStudent" parameterType="com.lanou.entity.Student">
        insert into
            tb_student(name,gender,age,birth,identify,headUrl,tel,email,addr)
        value
            (#{name},#{gender},#{age},#{birth},#{identify},#{headUrl},#{tel},#{email},#{addr})
  </insert>

  <delete id="deleteStudent"  parameterType="int[]">
        delete from tb_student where 1>2 or id in
          <foreach collection="array" item="id" open="(" separator="," close=")">
                 #{id}
          </foreach>
  </delete>

  <update id="updateStudent" parameterType="com.lanou.entity.Student">
        update tb_student set
            name=#{name},
            gender=#{gender},
            age=#{gender},
            birth=#{birth},
            identify=#{identify},
            headUrl=#{headUrl},
            tel=#{tel},
            email=#{email},
            addr=#{addr}
        where id=#{id}
  </update>

  <select id="getCount" resultType="int">
        select count(*) from tb_student
  </select>

  <select id="findStudentByParam" parameterType="map" resultMap="BaseResultMap">
        select * from tb_student where 1=1
        <if test="name!=null and name!=''">
            and name like concat('%', #{name}, '%')
        </if>
        <if test="tel!=null and tel!=''">
           and tel like concat('%', #{tel}, '%')
        </if>
        <if test="addr!=null and addr!=''">
           and addr like concat('%', #{addr}, '%')
        </if>
  </select>

  <select id="findStudentList">
        select * from tb_student limit start, end
  </select>

</mapper>
  • 这部分主要是service层的编写,并没有什么技术可言。先定义接口,再完成其实现类。
import java.util.List;
import java.util.Map;

public interface IStudentService {

    public void addStudent(Student student);

    public void deleteStudent(int[] idCollections);

    public void updateStudent(Student student);

    public int getCount();

    public List<Student> findStudentByParam(Map<String, Object> param);

    public List<Student> findStudentList(int start, int end);

}
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

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

@Service
public class StudentService implements IStudentService {

    @Autowired
    private StudentDao  studentDao;

    @Override
    public void addStudent(Student student) {
        studentDao.addStudent(student);
    }

    @Override
    public void deleteStudent(int[] idCollections) {
        studentDao.deleteStudent(idCollections);
    }

    @Override
    public void updateStudent(Student student) {
        studentDao.updateStudent(student);
    }

    @Override
    public int getCount() {
        return studentDao.getCount();
    }

    @Override
    public List<Student> findStudentByParam(Map<String, Object> param) {
        return studentDao.findStudentByParam(param);
    }

    @Override
    public List<Student> findStudentList(int start, int end) {
        return studentDao.findStudentList(start, end);
    }

}
  • 接下来是controller部分。
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import javax.validation.Valid;
import java.util.List;
import java.util.Map;

@RestController
@Api(tags =  "学生基本操作")
public class StudentController {

    @Autowired
    private IStudentService studentService;

    @RequestMapping(value = "/student", method = RequestMethod.POST)
    @ApiOperation("添加学生信息")
    public Result addStudent(@Valid Student student, BindingResult bindingResult){
        if(bindingResult.hasErrors()){
            return ResultGenerator.genFailResult(bindingResult.getFieldError().getDefaultMessage());
        }
        studentService.addStudent(student);
        return ResultGenerator.genSuccessResult();
    }

    @RequestMapping(value = "/student", method = RequestMethod.DELETE)
    @ApiOperation("批量删除学生信息")
    public Result deleteStudent(int[] idCollections){
        if(idCollections == null){
            return ResultGenerator.genFailResult("删除失败,原因:id为空");
        }
        studentService.deleteStudent(idCollections);
        return ResultGenerator.genSuccessResult();
    }

    @RequestMapping(value = "/student", method = RequestMethod.PUT)
    @ApiOperation("更新学生信息")
    public Result updateStudent(@Valid Student student, BindingResult bindingResult){
        if(bindingResult.hasErrors()){
            return ResultGenerator.genFailResult(bindingResult.getFieldError().getDefaultMessage());
        }
        studentService.updateStudent(student);
        return ResultGenerator.genSuccessResult();
    }

    @RequestMapping(value = "/student_count", method = RequestMethod.GET)
    @ApiOperation("查询学生个数")
    public Result getCount(){
        return ResultGenerator.genSuccessResult(studentService.getCount());
    }

    @RequestMapping(value = "/student_query", method = RequestMethod.GET)
    @ApiOperation("学生信息模糊查询")
    public Result getStudentByParam(Map<String, Object> param){
        List<Student> studentList = studentService.findStudentByParam(param);
        if (null == studentList){
            return ResultGenerator.genFailResult("未查询到任何学生信息");
        }
        return ResultGenerator.genSuccessResult(studentList);
    }

    @RequestMapping(value = "/student", method = RequestMethod.GET)
    @ApiOperation("查询学生列表")
    public Result getStudent(int start, int end){
        List<Student> studentList = studentService.findStudentList(start, end);
        if( null == studentList ){
            return ResultGenerator.genFailResult("学生列表为空");
        }
        return ResultGenerator.genSuccessResult(studentList);
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值