- Options的主要功能 --> 对博客的option(选项)和property(属性)提供的查询、更新、删除等功能,需要对数据库进行操作所以涉及到Repository层
- 从底层往上看
一、OptionRepository
- 这个接口继承了BaseRepository和JpaSpecificationExecutor两个接口
- BaseRepository中规定了一些基本的查询方法
// 按id查找
List<D> findAllByIdIn(@NonNull Collection<I> ids, @NonNull Sort sort);
// 按id域查找
Page<D> findAllByIdIn(@NonNull Collection<I> ids, @NonNull Pageable pageable);
// 按id删除
long deleteByIdIn(@NonNull Collection<I> ids);
- OptionRepository该接口自己定义的方法只有两个
Optional<Option> findByKey(String key);
void deleteByKey(String key);
- JpaSpecificationExecutor属于org.springframework.data.jpa.repository包,主要方法也是一些基本的查询
二、OptionService
1. 变量
// 设置默认查询/提交的页面大小
int DEFAULT_POST_PAGE_SIZE = 10;
int DEFAULT_ARCHIVES_PAGE_SIZE = 10;
int DEFAULT_COMMENT_PAGE_SIZE = 10;
int DEFAULT_RSS_PAGE_SIZE = 20;
String OPTIONS_KEY = "options";
2. 主要方法
(1)void save(…)
- 主要功能 --> 根据option,在数据库中新建数据,
- 支持事务(@Transactional),有多个重载方法
(2) void update(…)
- 主要功能 --> 根据option,更新数据库中数据
(3)void saveProperty()
- 主要功能 --> 保存博客属性
- 支持事务
剩下的方法主要功能都是对option和property的查询、更新、删除等操作
还有一些像getBirthday()、getBlogTitle()等查询固定信息的方法;
三、OptionServiceImpl
说明:该类继承了抽象类AbstractCrudService(这个抽象类将crud的一些公共方法提取出来),实现了OptionService接口
1. 涉及到的接口
private final OptionRepository optionRepository; // 数据库操作
private final ApplicationContext applicationContext;
private final AbstractStringCacheStore cacheStore; // 缓存操作
private final Map<String, PropertyEnum> propertyEnumMap;
private final ApplicationEventPublisher eventPublisher;
2. 主要方法
(1) public void save(Map<String, Object> optionMap)
- 支持事务
- 将map中的option选项分为已经存在的/不存在的两个list,对已经存在的调用updataInBatch进行更新,对不存在的调用createInBatch进行创建。
- 其他save功能全部转化为map,然后调用该方法
(2) public void update(Integer optionId, OptionParam optionParam)
- 更新option选项
(3)public void saveProperties(Map<? extends PropertyEnum, String> properties)
- 保存属性
- 最终调用的还是save()方法传入map作为参数
还有很多方法不一一列举,主要功能都是CRUD
四、OptionController("/api/admin/options")
- 只调用了OptionService接口
- 使用RestController注解返回查询到的内容实例(不进行页面跳转等操作),用于给前端显示查询、更新/修改/删除等操作的结果
- 接收前端数据使用@RequestBody,前端用post方法以json格式提交数据内容
有许多操作不一一列举了。