主页 > 其他  > 

SpringBoot速成(12)文章分类P15-P20

SpringBoot速成(12)文章分类P15-P20
1.新增文章分类

1.Postman登录不上,可以从头registe->login一个新的成员:注意,跳转多个url时,post/get/patch记得修改成controller类中对应方法上写的

2.postman运行成功:

但表中不更新:细节有问题:

c是小写

拼写错误

3.sql层报错,已运行到mapper层->controller层没有对参数校验

参数校验:

1.pojo层

2.controller层

运行后 :

代码展示:

pojo:

package com.itheima.springbootconfigfile.pojo; import jakarta.validation.constraints.NotEmpty; import lombok.Data; import java.time.LocalDateTime; @Data public class Category { private Integer id;//主键ID @NotEmpty private String categoryName;//分类名称 @NotEmpty private String categoryAlias;//分类别名 private Integer createUser;//创建人ID private LocalDateTime createTime;//创建时间 private LocalDateTime updateTime;//更新时间 @Override public String toString() { return "Category{" + "id=" + id + ", categoryName='" + categoryName + '\'' + ", categoryAlias='" + categoryAlias + '\'' + ", createUser=" + createUser + ", createTime=" + createTime + ", updateTime=" + updateTime + '}'; } public Category() { } public Category(Integer id, String categoryName, String categoryAlias, Integer createUser, LocalDateTime createTime, LocalDateTime updateTime) { this.id = id; this.categoryName = categoryName; this.categoryAlias = categoryAlias; this.createUser = createUser; this.createTime = createTime; this.updateTime = updateTime; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getCategoryName() { return categoryName; } public void setCategoryName(String categoryName) { this.categoryName = categoryName; } public String getCategoryAlias() { return categoryAlias; } public void setCategoryAlias(String categoryAlias) { this.categoryAlias = categoryAlias; } public Integer getCreateUser() { return createUser; } public void setCreateUser(Integer createUser) { this.createUser = createUser; } public LocalDateTime getCreateTime() { return createTime; } public void setCreateTime(LocalDateTime createTime) { this.createTime = createTime; } public LocalDateTime getUpdateTime() { return updateTime; } public void setUpdateTime(LocalDateTime updateTime) { this.updateTime = updateTime; } }

controller:

package com.itheima.springbootconfigfile.controller; import com.itheima.springbootconfigfile.pojo.Category; import com.itheima.springbootconfigfile.pojo.Result; import com.itheima.springbootconfigfile.service.CategoryService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; //文章分类 @RestController @RequestMapping("/category") public class CategoryController { @Autowired private CategoryService categoryService; //新增文章分类 @PostMapping("/add") public Result add(@RequestBody @Validated Category category){ categoryService.add(category); return Result.success(); } }

categoryServiceIMpl:

package com.itheima.springbootconfigfile.service.impl; import com.itheima.springbootconfigfile.mapper.CategoryMapper; import com.itheima.springbootconfigfile.pojo.Category; import com.itheima.springbootconfigfile.service.CategoryService; import com.itheima.springbootconfigfile.utils.ThreadLocalUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.time.LocalDateTime; import java.util.Map; @Service public class CategoryServiceImpl implements CategoryService { @Autowired private CategoryMapper categoryMapper; @Override public void add(Category category) { category.setCreateTime(LocalDateTime.now()); category.setUpdateTime(LocalDateTime.now()); Map<String,Object> map= ThreadLocalUtil.get(); Integer userId= (Integer) map.get("id"); category.setCreateUser(userId);//连接user表中的id,即userId=createUser=id categoryMapper.add(category); } }

categoryMapper:

package com.itheima.springbootconfigfile.mapper; import com.itheima.springbootconfigfile.pojo.Category; import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.Mapper; @Mapper public interface CategoryMapper { @Insert("insert into category (categoryName,categoryAlias,createUser,createTime,updateTime) values (#{categoryName},#{categoryAlias},#{createUser},now(),now())") void add(Category category); }


2.文章分类列表(显示当前用户已有的所有文章分类) 代码展示:

controller:

//文章分类列表 @GetMapping() public Result<List<Category>> list(){ List<Category> cs=categoryService.list(); return Result.success(cs); }

categoryServiceImpl:

@Override public List<Category> list() { Map<String,Object> map=ThreadLocalUtil.get(); Integer userId= (Integer) map.get("id"); return categoryMapper.list(userId); }

categoryMapper:

@Select("select * from category where createUser=#{userId}") List<Category> list(Integer userId);

 createUser和userId:

运行:

优化:时间表达不是常规表达

对属性的限制可加在controller类的方法的参数上 或 实体类上

修改:

@Data public class Category { private Integer id;//主键ID @NotEmpty private String categoryName;//分类名称 @NotEmpty private String categoryAlias;//分类别名 private Integer createUser;//创建人ID @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime createTime;//创建时间 @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime updateTime;//更新时间

运行:

回忆下User类对属性的注解: @Data public class User {     @NotNull     private Integer id;//主键ID     private String username;//用户名     @JsonIgnore     //当前对象转变为json字符串时,忽略password,最终的json 字符串就无password这个属性     private String password;//密码     @NotEmpty     @Pattern(regexp = "^\\S{1,10}$")     private String nickname;//昵称     @NotEmpty     @Email     private String email;//邮箱


3.获取文章分类详情  代码展示:

controller:

//获取文章详情 @GetMapping("/detail") public Result<Category> detail(Integer id){ Category c=categoryService.findById(id); return Result.success(c); }

categoryServiceImpl:

@Override public Category findById(Integer id) { Category c =categoryMapper.findById(id); return c; }

categoryMapper:

@Select("select * from category where id=#{id}") Category findById(Integer id);

运行: 

可优化:category表和user表是联通的,但该方法没要求必须是本用户才可以查询文章分类详情,即可以查到其他用户的文章分类

但若以文章分类是公共的,也可以不限制


4.更新文章分类  代码展示: //更新文章分类 @PutMapping("update") public Result update(@RequestBody @Validated Category category){ categoryService.update(category); return Result.success(); } @Override public void update(Category category) { category.setUpdateTime(LocalDateTime.now()); categoryMapper.update(category); }

@Update("update category set categoryName=#{categoryName},categoryAlias=#{categoryAlias},updateTime=#{updateTime} where id=#{id}") void update(Category category); @NotNull private Integer id;//主键ID

运行:

postman修改后,idea重新运行才会成功

可优化:createUser=userId

思考:

为什么不能这样写:

@PutMapping("update") public Result<Category> update(Integer id){ Category c= categoryService.update(id); return Result.success(c); }

 运行报错:

问题的核心在于 CategoryMapper.update 方法的返回类型不被 MyBatis 支持。MyBatis 对于 update、delete、insert 等操作的返回类型通常是 int,表示影响的行数,而不是返回一个 POJO 类型。 


5.BUG修改  bug描述:

第4中在category类增加了

再运行1.add,报错:

标签:

SpringBoot速成(12)文章分类P15-P20由讯客互联其他栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“SpringBoot速成(12)文章分类P15-P20