Halo源码 -- ② Option功能

  • 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格式提交数据内容

有许多操作不一一列举了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值