1. 根本介绍博客最根本的性能就是让作者可能自在公布本人的文章,分享本人观点,记录学习的过程。Halo 为用户提供了公布文章和展现自定义页面的性能,上面咱们剖析一下这些性能的实现过程。
2. 管理员公布文章Halo 我的项目中,文章和页面的实体类别离为 Post 和 Sheet,二者都是 BasePost 的子类。BasePost 对应数据库中的 posts 表,posts 表既存储了文章的数据,又存储了页面的数据,那么我的项目中是如何辨别文章和页面的呢?上面是 BasePost 类的源码(仅展现局部代码):
@Data@Entity(name = "BasePost")@Table(name = "posts", indexes = { @Index(name = "posts_type_status", columnList = "type, status"), @Index(name = "posts_create_time", columnList = "create_time")})@DiscriminatorColumn(name = "type", discriminatorType = DiscriminatorType.INTEGER, columnDefinition = "int default 0")@ToString(callSuper = true)@EqualsAndHashCode(callSuper = true)public class BasePost extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY, generator = "custom-id") @GenericGenerator(name = "custom-id", strategy = "run.halo.app.model.entity.support" + ".CustomIdGenerator") private Integer id; /** * Post title. */ @Column(name = "title", nullable = false) private String title; /** * Post status. */ @Column(name = "status") @ColumnDefault("1") private PostStatus status; // 此处省略局部代码}咱们晓得,Halo 应用 JPA 来创立数据表、存储和获取表中的信息。上述代码中,注解 @DiscriminatorColumn 是之前文章中没有介绍过的,@DiscriminatorColumn 属于 JPA 注解,它的作用是当多个实体类对应同一个数据表时,可应用一个字段进行辨别。name 指定该字段的名称,discriminatorType 是该字段的类型,columnDefinition 设置该字段的默认值。由此可知,字段 type 是辨别文章和页面的根据,上面是 Post 类和 Sheet 类的源码:
...