diff --git a/src/main/java/com/pt/entity/Download.java b/src/main/java/com/pt/entity/Download.java
new file mode 100644
index 0000000..38b955a
--- /dev/null
+++ b/src/main/java/com/pt/entity/Download.java
@@ -0,0 +1,55 @@
+package com.pt.entity;
+
+import jakarta.persistence.Entity;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.GenerationType;
+import jakarta.persistence.Id;
+
+import java.time.LocalDateTime;
+
+@Entity
+public class Download {
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private int downloadId;
+
+    private String resourceId;
+    private String downloader;
+    private LocalDateTime downloadTime;
+
+    public Download() {
+    }
+
+    public Download(int downloadId, String resourceId, String downloader, LocalDateTime downloadTime) {
+        this.downloadId = downloadId;
+        this.resourceId = resourceId;
+        this.downloader = downloader;
+        this.downloadTime = downloadTime;
+    }
+
+    public int getDownloadId() {
+        return downloadId;
+    }
+    public void setDownloadId(int downloadId) {
+        this.downloadId = downloadId;
+    }
+    public String getResourceId() {
+        return resourceId;
+    }
+    public void setResourceId(String resourceId) {
+        this.resourceId = resourceId;
+    }
+    public String getDownloader() {
+        return downloader;
+    }
+    public void setDownloader(String downloader) {
+        this.downloader = downloader;
+    }
+    public LocalDateTime getDownloadTime() {
+        return downloadTime;
+    }
+    public void setDownloadTime(LocalDateTime downloadTime) {
+        this.downloadTime = downloadTime;
+    }
+}
diff --git a/src/main/java/com/pt/entity/Resource.java b/src/main/java/com/pt/entity/Resource.java
new file mode 100644
index 0000000..2d8567b
--- /dev/null
+++ b/src/main/java/com/pt/entity/Resource.java
@@ -0,0 +1,87 @@
+package com.pt.entity;
+
+import jakarta.persistence.Entity;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.GenerationType;
+import jakarta.persistence.Id;
+
+import java.time.LocalDateTime;
+
+@Entity
+public class Resource {
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private int resourceId;
+
+    private String name;
+    private double size;
+
+    private LocalDateTime publishTime;
+    private String author;
+
+    private String description;
+
+    public Resource() {
+    }
+
+    public Resource(int resourceId, String name, double size, LocalDateTime publishTime, String author) {
+        this.resourceId = resourceId;
+        this.name = name;
+        this.size = size;
+        this.publishTime = publishTime;
+        this.author = author;
+    }
+
+    public int getResourceId() {
+        return resourceId;
+    }
+    public void setResourceId(int resourceId) {
+        this.resourceId = resourceId;
+    }
+    public String getName() {
+        return name;
+    }
+    public void setName(String name) {
+        this.name = name;
+    }
+    public double getSize() {
+        return size;
+    }
+    public void setSize(double size) {
+        this.size = size;
+    }
+    public LocalDateTime getPublishTime() {
+        return publishTime;
+    }
+    public void setPublishTime(LocalDateTime publishTime) {
+        this.publishTime = publishTime;
+    }
+    public String getAuthor() {
+        return author;
+    }
+    public void setAuthor(String author) {
+        this.author = author;
+    }
+    public String getDescription() {
+        return description;
+    }
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    /*
+        * 重写toString方法，将资源信息以JSON字符串形式返回
+     */
+    @Override
+    public String toString() {
+        return "{" +
+                "\"resourceId\":" + resourceId +
+                ", \"name\":\"" + name + "\"" +
+                ", \"size\":" + size +
+                ", \"publishTime\":\"" + publishTime + "\"" +
+                ", \"author\":\"" + author + "\"" +
+                ", \"description\":\"" + description + "\"" +
+                '}';
+    }
+}
