1.概要
同用户信息管理一样,对文章分页的管理也大致分为三步:
1.映射类(Mapper)是与数据库直接交互的层面,通过定义SQL语句和Java方法的映射来执行具体的数据库操作。
2.业务层接口(Service)定义了应用程序的业务操作,而业务层实现类(ServiceImpl)则提供了这些接口的具体实现,它们通常包含业务逻辑并调用映射类的方法来完成数据库操作。
3.控制层(Controller)作为客户端和服务器之间的接口,处理HTTP请求,调用业务层的方法,并返回响应给客户端。
2.创建Java对象
文件地址:org/example/entity/Category.java
使用了Lombok库来简化Java对象的创建。
这个类名为Category
,是一个数据传输对象(DTO),用于映射到数据库中的一个表。
package org.example.entity;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.LocalDateTime;
//映射类,用户与数据库的表对应
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Category {
private int id;
private String categoryName;
private String categoryAlias;
private int createUser;
@JsonFormat(pattern = "yyyy-mm-dd MM:mm:ss")
private LocalDateTime createTime;
@JsonFormat(pattern = "yyyy-mm-dd MM:mm:ss")
private LocalDateTime updateTime;
}
3.新增文章分类(增)
3.1 映射类CategoryMapper
文件地址:org/example/mapper/CategoryMapper.java
package org.example.mapper;
import org.apache.ibatis.annotations.*;
import org.example.entity.Category;
import java.util.List;
@Mapper
public interface CategoryMapper {//新增文章分类
@Insert("insert into category(category_name,category_alias,create_user,create_time,update_time)"+
"values (#{categoryName},#{categoryAlias},#{createUser},#{createTime},#{updateTime})")
void insert(Category category);
}
3.2 业务层接口CategoryService
3.2.1 创建接口
文件地址:org/example/service/CategoryService.java
package org.example.service;
import org.example.entity.Category;
import java.util.List;
public interface CategoryService {//添加分类
void add(Category category);
}
3.2.2 实现接口
文件地址:org/example/service/impl/CategoryServiceImpl.java
package org.example.service.impl;
import org.example.entity.Category;
import org.example.mapper.CategoryMapper;
import org.example.service.CategoryService;
import org.example.utils.ThreadLocalUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.List;
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());
//从线程池中获得用户的id值
Map<String,Object> map = ThreadLocalUtil.get();
Integer userId = (Integer)map.get("id");
//补充用户id值
category.setCreateUser(userId);
categoryMapper.insert(category);
}
}
3.3 控制层CategoryController
文件地址:org/example/controller/CategoryController.java
@Autowired:依赖注入,会自动找到接口的实现类,将实现类构建成对象,赋予接口引用。
那么调用接口引入的方法,就相当于调用了实现类的方法。
@RequestBody:可自动转换并赋值
@Validated:校验
package org.example.controller;
import org.example.entity.Category;
import org.example.entity.Result;
import org.example.service.CategoryService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
@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();
}
}
3.4 实现效果:
4.获取文章分类信息(查)
4.1 映射类CategoryMapper
Integer与int:
int
的默认值是 0
。Integer
的默认值是 null
,因为它是对象
Integer
是包装类,它是对象类型,可以用来封装一个 int
值,因此比int多了一些功能与方法。
Integer
对象在堆上分配内存,除了存储 int
值之外,还存储对象头信息,因此占用的内存更多。
package org.example.mapper;
import ...
@Mapper
public interface CategoryMapper {
//新增文章分类
...
//根据文章序号获取文章分类详情
@Select("select * from category where id = #{id}")
Category selectCategoryById(Integer id);
//根据用户id获取文章分类列表
@Select("select * from category where create_user =#{id}")
List<Category> selectCategoryByCreateUserId(Integer id);
}
4.2 业务层接口CategoryService
4.2.1 创建接口
文件地址:org/example/service/CategoryService.java
package org.example.service;
import ...
public interface CategoryService {
//添加分类
...
//根据文章id查询文件分类
Category findCategoryById(Integer id);
//根据用户id获取文章分类列表
List<Category> findCategoryByCreateUserId();
}
4.2.2 实现接口
文件地址:org/example/service/impl/CategoryServiceImpl.java
package org.example.service.impl;
import ...
@Service
public class CategoryServiceImpl implements CategoryService {
@Autowired
private CategoryMapper categoryMapper;
//添加分类
...
//根据文章id查询文件分类
@Override
public Category findCategoryById(Integer id) {
return categoryMapper.selectCategoryById(id);
}
//根据用户id获取文章分类列表
@Override
public List<Category> findCategoryByCreateUserId() {
Map<String,Object> map = ThreadLocalUtil.get();
Integer userId = (Integer)map.get("id");
return categoryMapper.selectCategoryByCreateUserId(userId);
}
}
4.3 控制层CategoryController
文件地址:org/example/controller/CategoryController.java
package org.example.controller;
import ...
@RestController
@RequestMapping("/category")
public class CategoryController {
@Autowired
private CategoryService categoryService;
//添加分类
...
//根据文章id查询文件分类
@GetMapping("/detail")
public Result<Category> detail(Integer id) {
Category category = categoryService.findCategoryById(id);
return Result.success(category);
}
//根据用户id获取文章分类列表
@GetMapping("/list")
public Result<List<Category>> list(){
List<Category> list = categoryService.findCategoryByCreateUserId();
return Result.success(list);
}
}
4.4 实现效果:
5.更改文章分类信息(改/删)
5.1 映射类CategoryMapper
文件地址:org/example/mapper/CategoryMapper.java
package org.example.mapper;
import ...
@Mapper
public interface CategoryMapper {
//新增文章分类/获取文章分类详情/根据用户id获取文章分类列表
...
//更改文章分类
@Update("UPDATE category SET category_name = #{categoryName},category_alias = #{categoryAlias},create_user = #{createUser}," +
"create_time = #{createTime},update_time = #{updateTime} WHERE id = #{id}")
void updateCategory(Category category);
//删除文章分类
@Delete("DELETE FROM category WHERE id = #{id}")
void deleteCategoryById(Integer id);
}
5.2 业务层接口CategoryService
5.2.1 创建接口
文件地址:org/example/service/CategoryService.java
package org.example.service;
import ...
public interface CategoryService {
//添加分类/根据id查询文件分类/根据用户id获取文章分类列表
...
//更改文章分类
void update(Category category);
//删除文章分类
void delete(Integer id);
}
5.2.2 实现接口
文件地址:org/example/service/impl/CategoryServiceImpl.java
package org.example.service.impl;
import ...
@Service
public class CategoryServiceImpl implements CategoryService {
@Autowired
private CategoryMapper categoryMapper;
//添加分类/根据id查询文件分类/根据用户id获取文章分类列表
...
//更改文章分类
@Override
public void update(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);
categoryMapper.updateCategory(category);
}
//删除文章分类
@Override
public void delete(Integer id) {
categoryMapper.deleteCategoryById(id);
}
}
5.3 控制层CategoryController
文件地址:org/example/controller/CategoryController.java
Delete不知道怎么跑出来的,但就是能跑
package org.example.controller;
import ...
@RestController
@RequestMapping("/category")
public class CategoryController {
@Autowired
private CategoryService categoryService;
//添加分类/根据id查询文件分类/根据用户id获取文章分类列表
...
//更改文章分类
@PostMapping("/update")
public Result update(@RequestBody @Validated Category category) {
categoryService.update(category);
return Result.success();
}
//删除文章分类
@DeleteMapping("/delete")
public Result delete(@RequestBody Map<String, Object> payload) {
Integer id = (Integer) payload.get("id");
categoryService.delete(id);
return Result.success();
}
}