Browse Source

新增媒体类型枚举;新增文件信息及相关的数据库TypeHandler

woody 2 years ago
parent
commit
ed5d8bef10

+ 30 - 0
framework-base/src/main/java/com/chelvc/framework/base/model/File.java

@@ -0,0 +1,30 @@
+package com.chelvc.framework.base.model;
+
+import java.io.Serializable;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.SuperBuilder;
+
+/**
+ * 文件信息
+ *
+ * @author Woody
+ * @date 2023/7/17
+ */
+@Data
+@SuperBuilder
+@NoArgsConstructor
+@AllArgsConstructor
+public class File implements Serializable {
+    /**
+     * 媒体类型
+     */
+    private Media media;
+
+    /**
+     * 资源地址
+     */
+    private String url;
+}

+ 31 - 0
framework-base/src/main/java/com/chelvc/framework/base/model/Media.java

@@ -0,0 +1,31 @@
+package com.chelvc.framework.base.model;
+
+import lombok.Getter;
+
+/**
+ * 媒体类型枚举
+ *
+ * @author Woody
+ * @date 2023/7/17
+ */
+@Getter
+public enum Media implements Enumerable {
+    /**
+     * 文件
+     */
+    FILE("文件"),
+
+    /**
+     * 视频
+     */
+    VIDEO("视频");
+
+    /**
+     * 媒体描述
+     */
+    private final String description;
+
+    Media(String description) {
+        this.description = description;
+    }
+}

+ 45 - 0
framework-database/src/main/java/com/chelvc/framework/database/interceptor/FileTypeHandler.java

@@ -0,0 +1,45 @@
+package com.chelvc.framework.database.interceptor;
+
+import java.sql.CallableStatement;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Types;
+
+import com.chelvc.framework.base.context.JacksonContextHolder;
+import com.chelvc.framework.base.model.File;
+import org.apache.ibatis.type.BaseTypeHandler;
+import org.apache.ibatis.type.JdbcType;
+
+/**
+ * 文件信息字段类型处理实现
+ *
+ * @author Woody
+ * @date 2023/7/17
+ */
+public class FileTypeHandler extends BaseTypeHandler<File> {
+    @Override
+    public void setNonNullParameter(PreparedStatement ps, int i, File parameter, JdbcType jdbcType)
+            throws SQLException {
+        if (parameter == null) {
+            ps.setNull(i, Types.VARCHAR);
+        } else {
+            ps.setString(i, JacksonContextHolder.serialize(parameter));
+        }
+    }
+
+    @Override
+    public File getNullableResult(ResultSet rs, String columnName) throws SQLException {
+        return JacksonContextHolder.deserialize(rs.getString(columnName), File.class);
+    }
+
+    @Override
+    public File getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
+        return JacksonContextHolder.deserialize(rs.getString(columnIndex), File.class);
+    }
+
+    @Override
+    public File getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
+        return JacksonContextHolder.deserialize(cs.getString(columnIndex), File.class);
+    }
+}

+ 54 - 0
framework-database/src/main/java/com/chelvc/framework/database/interceptor/FilesTypeHandler.java

@@ -0,0 +1,54 @@
+package com.chelvc.framework.database.interceptor;
+
+import java.sql.CallableStatement;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Types;
+import java.util.List;
+
+import com.chelvc.framework.base.context.JacksonContextHolder;
+import com.chelvc.framework.base.model.File;
+import com.fasterxml.jackson.core.type.TypeReference;
+import org.apache.ibatis.type.BaseTypeHandler;
+import org.apache.ibatis.type.JdbcType;
+import org.springframework.util.CollectionUtils;
+
+/**
+ * 文件信息列表字段类型处理实现
+ *
+ * @author Woody
+ * @date 2023/7/17
+ */
+public class FilesTypeHandler extends BaseTypeHandler<List<File>> {
+    /**
+     * 类型引用实例
+     */
+    private static final TypeReference<List<File>> REFERENCE = new TypeReference<List<File>>() {
+    };
+
+    @Override
+    public void setNonNullParameter(PreparedStatement ps, int i, List<File> parameter, JdbcType jdbcType)
+            throws SQLException {
+        if (CollectionUtils.isEmpty(parameter)) {
+            ps.setNull(i, Types.VARCHAR);
+        } else {
+            ps.setString(i, JacksonContextHolder.serialize(parameter));
+        }
+    }
+
+    @Override
+    public List<File> getNullableResult(ResultSet rs, String columnName) throws SQLException {
+        return JacksonContextHolder.deserialize(rs.getString(columnName), REFERENCE);
+    }
+
+    @Override
+    public List<File> getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
+        return JacksonContextHolder.deserialize(rs.getString(columnIndex), REFERENCE);
+    }
+
+    @Override
+    public List<File> getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
+        return JacksonContextHolder.deserialize(cs.getString(columnIndex), REFERENCE);
+    }
+}

+ 6 - 1
framework-database/src/main/java/com/chelvc/framework/database/interceptor/ModificationTypeHandler.java

@@ -4,6 +4,7 @@ import java.sql.CallableStatement;
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.sql.SQLException;
+import java.sql.Types;
 
 import com.chelvc.framework.base.context.JacksonContextHolder;
 import com.chelvc.framework.base.model.Modification;
@@ -20,7 +21,11 @@ public class ModificationTypeHandler extends BaseTypeHandler<Modification> {
     @Override
     public void setNonNullParameter(PreparedStatement ps, int i, Modification parameter, JdbcType jdbcType)
             throws SQLException {
-        ps.setString(i, JacksonContextHolder.serialize(parameter));
+        if (parameter == null) {
+            ps.setNull(i, Types.VARCHAR);
+        } else {
+            ps.setString(i, JacksonContextHolder.serialize(parameter));
+        }
     }
 
     @Override