2021年10月20日 21:58
原创作品,转载时请务必以超链接形式标明文章原始出处,否则将追究法律责任。

过了十月一就是冬季,我这个人比较喜欢夏季,不喜欢冬季。夏季再热有空调就行,冬季冷了有暖气也不会感到舒服。转眼

捕获.JPG

废话不多说,我们直奔主题,首先我们使用的开发工具是Idea 2021,新建项目步骤如下

image.png

下一步,我们勾选Spring Web选项

image.png

勾选Mybatis框架和mysql驱动

image.png

点击Finish,我们的项目就建好了。接着我们修改一下项目中的application.properties配置文件如下

server.port=8080
mybatis.type-aliases-package=com.example.demo.entity
mybatis.mapper-locations=classpath:mapper/*.xml
spring.datasource.url=jdbc:mysql://localhost:3306/personalsite
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=

这里是mybatis的一些配置主要是mapping文件的目录,映射实体所在的包。ok,接下来我们看一下api的开发步骤了,先搞个hello world api。

我们新建package controller,然后新建一个名为testController的控制器

package com.example.demo.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class testController{
    @RequestMapping(value = "hello",method = RequestMethod.GET)
    public String getHello(){
        return "hello world";
    }
}

这样我们一个api就建好了,看一下运行效果

image.png

一个简单的api就这样完成了,接下来我们看一下操作数据库的例子。

首先我们在mysql新建一个数据库,叫personalsite,里面有一张表叫techarticlereview,我们造一些测试数据,如下

image.png

数据造好以后,我们开始写api,首先我们创建entity如下

package com.example.demo.entity;

import java.util.Date;

public class TechArticleReview {
    private int id;
    private int articleID;
    private String content;
    private Date inDate;
    private int inUserID;

    public int getArticleID() {
        return articleID;
    }

    public void setArticleID(int articleID) {
        this.articleID = articleID;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    public Date getInDate() {
        return inDate;
    }

    public void setInDate(Date inDate) {
        this.inDate = inDate;
    }

    public int getInUserID() {
        return inUserID;
    }

    public void setInUserID(int inUser) {
        this.inUserID = inUser;
    }

    public int getId() {
        return id;
    }

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

接着我们创建mapper接口

package com.example.demo.mapper;

import com.example.demo.entity.TechArticleReview;
import org.springframework.stereotype.Component;

import java.util.List;

@Component
public interface TechArticleReviewMapper {
    List<TechArticleReview> getTechArticleReviewList();
    void createTechArticleReview(TechArticleReview review);
}

总共两个db操作,一个是查询评论,一个是创建评论,对应的mapper 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.example.demo.mapper.TechArticleReviewMapper">
    <resultMap id="techArticleMap" type="com.example.demo.entity.TechArticleReview">
        <result property="articleID" column="ArticleID" javaType="int"></result>
        <result property="content" column="Content" javaType="java.lang.String"></result>
        <result property="inDate" column="InDate" javaType="java.util.Date"></result>
    </resultMap>

    <select id="getTechArticleReviewList" resultMap="techArticleMap">
        select * from techarticlereview
    </select>

    <insert id="createTechArticleReview" parameterType="com.example.demo.entity.TechArticleReview">
        <selectKey resultType="int" order="AFTER" keyProperty="id">
            SELECT LAST_INSERT_ID() AS id
        </selectKey>
        insert into techarticlereview(ArticleId,Content,InDate,InUserID,Status)
        values (#{articleID},#{content},#{inDate},#{inUserID},'0')
    </insert>
</mapper>

查询没什么说的,insert这个完成以后会返回自增主键id,因此我们这有个selectKey的配置。ok,接下来就是service和controller,没什么说的直接上代码

package com.example.demo.service.implement;

import com.example.demo.entity.TechArticleReview;
import com.example.demo.mapper.TechArticleReviewMapper;
import com.example.demo.service.ITechArticleService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class TechArticleService implements ITechArticleService {

    @Autowired
    private TechArticleReviewMapper mapper;

    @Override
    public List<TechArticleReview> getTechArticleReviewList() {
        return mapper.getTechArticleReviewList();
    }

    @Override
    public void createTechArticleReview(TechArticleReview review) {
        mapper.createTechArticleReview(review);
    }
}

下面是我们的controller代码

package com.example.demo.controller;

import com.example.demo.entity.TechArticleReview;
import com.example.demo.model.TechArticleReviewResponse;
import com.example.demo.service.ITechArticleService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("techarticle")
@Api(tags = "Review Interface")
public class techArticleReviewController {

    private final String RESPONSE_CODE = "100100001";

    @Autowired
    ITechArticleService techArticleService;

    @GetMapping("review")
    @ApiOperation("获取所有评论")
    public List<TechArticleReview> getTechArticleReviewList() {
        return techArticleService.getTechArticleReviewList();
    }

    @PostMapping(value = "review",produces = "application/json;charset=utf-8")
    @ApiOperation("新增评论")
    public TechArticleReviewResponse createTechArticleReview(@RequestBody TechArticleReview review) {
        TechArticleReviewResponse response = new TechArticleReviewResponse(true);
        if (review == null) return response;
        if (review.getArticleID() <= 0) {
            response.setResponseCode(RESPONSE_CODE);
            response.setErrorMessage("文章ID必须大于0");
            return response;
        }

        if (review.getContent() == null || review.getContent().trim().equals("")) {
            response.setResponseCode(RESPONSE_CODE);
            response.setErrorMessage("评论内容不能为空");
            return response;
        }

        techArticleService.createTechArticleReview(review);
        response.setId(review.getId());
        return response;
    }
}

可能我写的api看起来有点烂,但是毕竟这只是个开头,只是学了两天实战个demo么。另外大家可能注意到我这里支持了swagger,关于swagger的支持网上一搜索一大堆,我就不再赘述。看一下运行效果,输入http://localhost:8080/swagger-ui.html

image.png

Swagger已经生成好了,我们测试一个查询看看

image.png

我们再试一下创建评论的api,在swagger tryout

image.png

请求结果显示已经创建成功,并且id已经给我们返回了最新插入的自增值

image.png

ok,我们查一下mysql看数据是否插入了数据,我们发现数据已经插进去了

image.png

最后,看一下项目结构,很简单。

image.png



发表评论
匿名  
用户评论
暂无评论