接我上一篇博客,这一部分主要是代码的编写。查看上一篇博客请点击
二、各层代码编写
- 这部分主要是一些之后会用到的自己编写的工具类。
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);
}
}