一、文章管理接口。
????????共有5個,分別為:
????????????????1.新增文章;
????????????????2.文章列表(條件分頁) ;
????????????????3.獲取文章詳情;
????????????????4.更新文章;
????????????????5.刪除文章。
二、詳解。
????????1.新增文章。
????????ArticleController.java:
@PostMappingpublic Result add(@RequestBody Article article){articleService.add(article);return Result.success();}
????????ArticleService.java:
//新增文章void add(Article article);
????????ArticleServiceInterface.java:
@Overridepublic void add(Article article) {//補充屬性值article.setCreateTime(LocalDateTime.now());article.setUpdateTime(LocalDateTime.now());Map<String,Object> map = ThreadLocalUtil.get();Integer UserId = (Integer) map.get("id");article.setCreateUser(UserId);articleMapper.add(article);}
????????ArticleMapper.java:
// 新增@Insert("insert into article(title,content,cover_img,state,category_id,create_user,create_time,update_time) " +"values(#{title},#{content},#{coverImg},#{state},#{categoryId},#{createUser},#{createTime},#{updateTime})")void add(Article article);
????????使用Postman運行測試:
**********************************************參數校驗****************************************************?? ? ? ? ?
???????? 實體類添加相關參數校驗的注解,并添加@Validated注解:??
????????當已有的注解不能滿足所有的校驗需求,特殊的情況需要自定義校驗(自定義校驗注解) 。
具體步驟為:
????????????????1.自定義注解State;
????????????????2. 自定義校驗數據的類StateValidation實現ConstraintValidator接囗
????????????????3.在需要校驗的地方使用自定義注解。? ? ?
????????對于參數state進行自定義參數校驗:
? ? ? ? 新建子包annotate,并新建注解State.java:
@Documented //元注解
@Target(ElementType.FIELD) //元注解
@Retention(RetentionPolicy.RUNTIME) //元注解
@Constraint(validatedBy = {StateValidation.class}) //指定提供校驗規則的類
public @interface State {//提供校驗失敗的提示信息String message() default "State參數的值只能為已發布或者草稿";//指定分組Class<?>[] groups() default {};//負載 獲取State注解的附加信息Class<? extends Payload>[] payload() default {};}
? ? ? ? 新建子包Validation,并新建自定義校驗數據的類StateValidation實現ConstraintValidator接囗:
public class StateValidation implements ConstraintValidator<State,String> {/**** @param value 將來要校驗的信息* @param constraintValidatorContext* @return false--> 校驗不通過 反之,通過*/@Overridepublic boolean isValid(String value, ConstraintValidatorContext constraintValidatorContext) {//提供校驗規則if(value == null){return false;}if(value.equals("已發布") || value.equals("草稿")){return true;}return false;}
}
? ? ? ? 最后在實體類Article上使用注解即可:
? ? ? ? 使用Postman測試:
????????
????????2.文章列表(條件分頁) 。
????????ArticleController.java:
@GetMappingpublic Result<PageBean<Article>> list(Integer pageNum,Integer pageSize,@RequestParam(required = false) Integer categoryId,@RequestParam(required = false) String state){PageBean<Article> pb = articleService.list(pageNum,pageSize,categoryId,state);return Result.success(pb);}
????????ArticleService.java:
//條件分頁列表查詢PageBean<Article> list(Integer pageNum, Integer pageSize, Integer categoryId, String state);
? ? ? ? pom.xml添加分頁插件PageHelper:
<!--PageHelper坐標--><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.4.6</version></dependency>
????????ArticleServiceInterface.java:
@Overridepublic PageBean<Article> list(Integer pageNum, Integer pageSize, Integer categoryId, String state) {//1.創建PageBean對象PageBean<Article> pb = new PageBean<>();//2.開啟分頁查詢 PageHelperPageHelper.startPage(pageNum,pageSize);//3.調用MapperMap<String,Object> map = ThreadLocalUtil.get();Integer userId = (Integer) map.get("id");List<Article> as = articleMapper.list(userId,categoryId,state);//Page中提供了方法,可以獲取PageHelper分頁查詢后 得到的總記錄條數和當前頁數據Page<Article> p = (Page<Article>) as;//將數據填充到PageBean對象中pb.setTotal(p.getTotal());pb.setItems(p.getResult());return pb;}
????????ArticleMapper.java:
List<Article> list(Integer userId, Integer categoryId, String state);
? ? ? ? 新建動態SQL文件,在resources目錄下新建與ArticleMapper.java所在位置同樣的文件路徑,并新建文件ArticleMapper.xml,命名與ArticleMapper必須相同:
? ? ?ArticleMapper.xml:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.azhyyi.mapper.ArticleMapper"><!--動態SQL--><select id="list" resultType="org.azhyyi.entity.Article">select * from article<where><if test="categoryId!= null">category_id=#{categoryId}</if><if test="state!= null">and state=#{state}</if>and create_user=#{userId}</where></select>
</mapper>
????????使用Postman運行測試:
????????????????
????????3.獲取文章詳情;
????????4.更新文章;
????????5.刪除文章。
????????ArticleController.java:
@GetMapping("/detail")public Result<Article> detail(Integer id){Article c = articleService.findById(id);return Result.success(c);}@PutMappingpublic Result update(@RequestBody @Validated Article article){articleService.update(article);return Result.success();}@DeleteMappingpublic Result delete(Integer id){articleService.deleteById(id);return Result.success();}
????????ArticleService.java:
????????ArticleServiceInterface.java:
@Overridepublic Article findById(Integer id) {Article a = articleMapper.findById(id);return a;}@Overridepublic void deleteById(Integer id) {articleMapper.deleteById(id);}@Overridepublic void update(Article article) {article.setUpdateTime(LocalDateTime.now());articleMapper.update(article);}
????????ArticleMapper.java:
//獲取文章詳情@Select("select * from article where id=#{id}")Article findById(Integer id);//刪除文章@Delete("delete from article where id=#{id}")void deleteById(Integer id);//更新文章@Update("update article set title=#{title},content=#{content},cover_img=#{coverImg}," +"state=#{state},category_id=#{categoryId},update_time=#{updateTime}" +"where id=#{id} ")void update(Article article);
????????使用Postman測試,這三個接口均通過測試。
????????至此,大事件的后端接口基本開發完畢。