过了十月一就是冬季,我这个人比较喜欢夏季,不喜欢冬季。夏季再热有空调就行,冬季冷了有暖气也不会感到舒服。转眼
废话不多说,我们直奔主题,首先我们使用的开发工具是Idea 2021,新建项目步骤如下
下一步,我们勾选Spring Web选项
勾选Mybatis框架和mysql驱动
点击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就建好了,看一下运行效果
一个简单的api就这样完成了,接下来我们看一下操作数据库的例子。
首先我们在mysql新建一个数据库,叫personalsite,里面有一张表叫techarticlereview,我们造一些测试数据,如下
数据造好以后,我们开始写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
Swagger已经生成好了,我们测试一个查询看看
我们再试一下创建评论的api,在swagger tryout
请求结果显示已经创建成功,并且id已经给我们返回了最新插入的自增值
ok,我们查一下mysql看数据是否插入了数据,我们发现数据已经插进去了
最后,看一下项目结构,很简单。
上一篇 2.静态AOP实现-装饰器模式