diff --git a/2023/03/27/gitlab-shang-he-xiang-mu-da-cang-ku-shuo-zai-jian/index.html b/2023/03/27/gitlab-shang-he-xiang-mu-da-cang-ku-shuo-zai-jian/index.html index e201f7f..99e7e94 100644 --- a/2023/03/27/gitlab-shang-he-xiang-mu-da-cang-ku-shuo-zai-jian/index.html +++ b/2023/03/27/gitlab-shang-he-xiang-mu-da-cang-ku-shuo-zai-jian/index.html @@ -377,6 +377,10 @@

gitlab 上和项目大仓库说 BFG + + 杂项 + + @@ -385,8 +389,8 @@

gitlab 上和项目大仓库说
-
@@ -580,6 +584,10 @@

BFG + + 杂项 + + @@ -650,8 +658,8 @@

- - npm + + code @@ -661,14 +669,22 @@

- - tools - - npm-link + + code + + + + npm + + + + 前端 + + @@ -703,8 +719,8 @@

- - tools + + 杂项 @@ -727,6 +743,10 @@

BFG + + 杂项 + + @@ -907,7 +927,7 @@

 站点总字数: 8k + class="white-color">10.3k diff --git a/2023/04/02/npm-link-vuex-watch-zen-me-bu-sheng-xiao/index.html b/2023/04/02/npm-link-vuex-watch-zen-me-bu-sheng-xiao/index.html index d5c954f..68f5028 100644 --- a/2023/04/02/npm-link-vuex-watch-zen-me-bu-sheng-xiao/index.html +++ b/2023/04/02/npm-link-vuex-watch-zen-me-bu-sheng-xiao/index.html @@ -364,14 +364,22 @@

npm-link VUEX watch 怎么不生 @@ -380,8 +388,8 @@

npm-link VUEX watch 怎么不生
-
@@ -695,14 +703,22 @@

- - tools - - npm-link + + code + + + + npm + + + + 前端 + + @@ -773,8 +789,8 @@

- @@ -796,6 +812,10 @@

relogin + + code + + @@ -830,8 +850,8 @@

- @@ -853,6 +873,10 @@

BFG + + 杂项 + + @@ -1033,7 +1057,7 @@

 站点总字数: 8k + class="white-color">10.3k diff --git a/2023/04/10/spring-security-zhong-yu-jian-de-hao-shi-xiao-keng/index.html b/2023/04/10/spring-security-zhong-yu-jian-de-hao-shi-xiao-keng/index.html index 9ef3f8e..a653b7e 100644 --- a/2023/04/10/spring-security-zhong-yu-jian-de-hao-shi-xiao-keng/index.html +++ b/2023/04/10/spring-security-zhong-yu-jian-de-hao-shi-xiao-keng/index.html @@ -376,6 +376,10 @@

spring-security中遇见的耗 relogin + + code + + @@ -384,8 +388,8 @@

spring-security中遇见的耗
-
@@ -580,6 +584,10 @@

relogin + + code + + @@ -627,7 +635,7 @@

 上一篇 @@ -711,8 +723,8 @@

- @@ -722,14 +734,22 @@

- - tools - - npm-link + + code + + + + npm + + + + 前端 + + @@ -910,7 +930,7 @@

 站点总字数: 8k + class="white-color">10.3k diff --git a/2023/04/10/spring-boot-security-oauth2-ying-yong-shi-xian/index.html b/2023/04/11/spring-boot-security-oauth2-ying-yong-shi-xian/index.html similarity index 98% rename from 2023/04/10/spring-boot-security-oauth2-ying-yong-shi-xian/index.html rename to 2023/04/11/spring-boot-security-oauth2-ying-yong-shi-xian/index.html index e974cbe..4b10b1e 100644 --- a/2023/04/10/spring-boot-security-oauth2-ying-yong-shi-xian/index.html +++ b/2023/04/11/spring-boot-security-oauth2-ying-yong-shi-xian/index.html @@ -380,6 +380,10 @@

spring-boot-security OAuth2应 pre-security + + code + + @@ -388,8 +392,8 @@

spring-boot-security OAuth2应
-
@@ -401,7 +405,7 @@

spring-boot-security OAuth2应 @@ -728,7 +732,7 @@

- https://belugaliu.github.io/2023/04/10/spring-boot-security-oauth2-ying-yong-shi-xian/ + https://belugaliu.github.io/2023/04/11/spring-boot-security-oauth2-ying-yong-shi-xian/
@@ -782,6 +786,10 @@

pre-security + + code + +

@@ -852,8 +860,8 @@

- @@ -867,6 +875,10 @@

tools + + 选型 + + @@ -901,8 +913,8 @@

- @@ -924,6 +936,10 @@

relogin + + code + + @@ -1104,7 +1120,7 @@

 站点总字数: 8k + class="white-color">10.3k diff --git a/2023/05/18/json-gong-ju-wo-ying-gai-zen-me-xuan/index.html b/2023/05/18/json-gong-ju-wo-ying-gai-zen-me-xuan/index.html index c9d3c91..a816fbf 100644 --- a/2023/05/18/json-gong-ju-wo-ying-gai-zen-me-xuan/index.html +++ b/2023/05/18/json-gong-ju-wo-ying-gai-zen-me-xuan/index.html @@ -368,6 +368,10 @@

json 工具我应该怎么选? tools + + 选型 + + @@ -376,8 +380,8 @@

json 工具我应该怎么选?
-
@@ -501,6 +505,10 @@

tools + + 选型 + + @@ -571,8 +579,8 @@

- @@ -590,6 +598,10 @@

redis + + code + + @@ -601,7 +613,7 @@

@@ -831,7 +847,7 @@

 站点总字数: 8k + class="white-color">10.3k diff --git a/2024/01/31/redis-fen-bu-shi-suo-ni-xu-yue-liao-ma/index.html b/2024/01/31/redis-fen-bu-shi-suo-ni-xu-yue-liao-ma/index.html index 5e41b95..52927cd 100644 --- a/2024/01/31/redis-fen-bu-shi-suo-ni-xu-yue-liao-ma/index.html +++ b/2024/01/31/redis-fen-bu-shi-suo-ni-xu-yue-liao-ma/index.html @@ -376,6 +376,10 @@

Redis 分布式锁你续约了 redis + + code + + @@ -384,8 +388,8 @@

Redis 分布式锁你续约了
-
@@ -885,6 +889,10 @@

redis + + code + + @@ -928,18 +936,17 @@

-
+
-  本篇 -
+  上一篇
- @@ -1010,8 +1024,8 @@

- @@ -1025,6 +1039,10 @@

tools + + 选型 + +

@@ -1205,7 +1223,7 @@

 站点总字数: 8k + class="white-color">10.3k diff --git a/2024/02/18/zen-me-shi-xian-mybatis-zi-dong-she-zhi-chuang-jian-shi-jian-geng-xin-shi-jian/index.html b/2024/02/18/zen-me-shi-xian-mybatis-zi-dong-she-zhi-chuang-jian-shi-jian-geng-xin-shi-jian/index.html new file mode 100644 index 0000000..6958431 --- /dev/null +++ b/2024/02/18/zen-me-shi-xian-mybatis-zi-dong-she-zhi-chuang-jian-shi-jian-geng-xin-shi-jian/index.html @@ -0,0 +1,1468 @@ + + + + + + + + + + + + + + + + + + + + 怎么实现 mybatis 自动设置创建时间更新时间 | beluga + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+

怎么实现 mybatis 自动设置创建时间更新时间

+
+
+
+
+
+ + + + +
+ + +
+
+ +
+
+ +
+ + + + + + + + +
+
+

怎么实现 mybatis 自动设置创建时间更新时间

🔍 相对流行方案弊端

mybatis 提供 Interceptor 接口以插件方式提供扩展能力。互联网上大都是对数据表映射类对象中关于时间属性设置当前时间的解决方案。但这种方法无法解决 mapper.xml 写更新 SQL 或 @XXXProvider 拼 SQL 的方式插入或更新数据表。但是依托于数据表映射类本身没有问题,因为需要知道创建时间和更新时间对应的数据库字段信息,这是光拦截到 SQL 而无法判断时间相关的字段是否存在并赋值。

+

🎓 更好的选择

如果你项目中使用了 mybatis-plus 组件,恭喜你做这个决定你足够明智。 mybatis-plus 提供 MetaObjectHandler 抽象类实现公共字段自动写入能力。其大体思路是针对 @XXXProvider 拼 SQL 时将实体中标记需要自动填充的字段拼入 SQL 中,通过 metaObjectHandler 对实体属性字段填充相应值,最后带有自动填充字段的 PrepareStatement SQL 插入/更新数据表数据。

+

但,项目上使用自写 BaseMapper<E,ID> 接口和 @XXXProvider 注解实现 BaseMapperSqlSourceBuilder 类完成 SQL 拼接。但未提供对公用字段自动写入能力。

+

🍄 在现状上解决问题

Interceptor 拦截的位置是执行 SQL 之前,也就是 @Signature(type = Executor.class, method="update", args={MappedStatement.class, Object.class}) ,在 SQL 里拼接时间的字段和字段值。字段值可以直接设置的 now() 数据库函数,缺点是强依赖数据库。这个缺点需要通过 driver 信息找确切的数据库类型,切换时间函数。时间字段信息则是通过 BaseMapper<E,ID> 获取泛型 E 指向的 Class,通过属性名匹配(没办法老代码只能匹配属性名)或注解匹配找到时间字段。SQL 里拼接时间字段是通过包装 SqlSource 通过 SqlSource#getBoundSql 替换最终 SQL 和当前时间函数。

+
    +
  • mappedStatement#getId(),id 的值对应类全路径,从这个类全路径获取类信息并确定 BaseMapper<E,ID> E 指向的泛型
  • +
+
/**
+ * 表的创建时间和更新时间会随着表的更新或插入行为进行赋值. 因为需要确定表中是否有创建时间或更新时间且确定时间字段名,所以需要使用的地方
+ * 的 mapper 继承 {@link BaseMapper}<br>
+ * 思路,从 BaseMapper 的泛型 T 获取实体类,从实体类里面解析出创建时间和更新时间字段对应的数据库字段名,这里创建时间和更新时间是通过名称
+ * 匹配的,大小写不论包含匹配.针对插入行为会增加创建时间和更新时间,针对更新行为会更新更新时间.<br>
+ * <lu>
+ * <li>创建时间,dCjsj、cjsj、dtCjsj、dCjrq、cjrq、dtCjrq、createTime、dCreateTime、dtCreateTime</li>
+ * <li>更新时间,dGxsj, gxsj, dtGxsj, dXgsj, xgsj, dtXgsj, dZhxgsj、zhxgsj、dtZhxgsj、updateTime、dUpdateTime、dtUpdateTime</li>
+ * </lu>
+ *
+ * @author liulili
+ * @date 2024/1/25 11:24
+ */
+@Slf4j
+@Component
+@Intercepts(@Signature(type = Executor.class, method="update", args={MappedStatement.class, Object.class}))
+public class AutofillCreateOrUpdateTimeInterceptor implements Interceptor {
+
+    private final String[] CJSJ_COLUMN_NAMES = new String[] {"cjsj", "dCjsj", "dtCjsj", "cjrq", "dCjrq", "dtCjrq", "createTime", "dCreateTime", "dtCreateTime"};
+
+    private final String[] GXSJ_COLUMN_NAMES = new String[] {"gxsj", "dGxsj", "dtGxsj", "xgsj", "dXgsj", "dtXgsj", "zhxgsj", "dZhxgsj", "dtZhxgsj", "updateTime", "dUpdateTime", "dtUpdateTime"};
+    @Override
+    public Object intercept(Invocation invocation) throws Throwable {
+        Object[] args = invocation.getArgs();
+        MappedStatement mappedStatement = (MappedStatement) args[0];
+        StatementType statement = mappedStatement.getStatementType();
+        if (statement == StatementType.CALLABLE) {
+            log.debug("【自动填充创建或修改时间】不支持在存储过程类型业务");
+            return invocation.proceed();
+        }
+        SqlCommandType command = mappedStatement.getSqlCommandType();
+        String id = mappedStatement.getId();
+        String className = StringUtils.substring(id, 0, id.lastIndexOf("."));
+        Class mapperClazz = null;
+        try {
+            mapperClazz = Class.forName(className);
+        } catch (Throwable e) {
+            if (log.isDebugEnabled()) {
+                log.debug("className[{}]不是Class无法继续【自动填充创建或修改时间】的工作", className, e);
+            } else if (log.isInfoEnabled()) {
+                log.info("className[{}]不是Class无法继续【自动填充创建或修改时间】的工作", className);
+            }
+            return invocation.proceed();
+        }
+        Class entityClazz = findEntityClazz(mapperClazz);
+        if (Objects.isNull(entityClazz)) {
+            log.debug("class[{}]非接口/未继承BaseMapper接口", entityClazz);
+            return invocation.proceed();
+        }
+        CUTimeDTO cuTimeDTO = findCreateAndUpdateTimeColumn(entityClazz);
+        if (StringUtils.isBlank(cuTimeDTO.getUpdateTimeColumnName()) && StringUtils.isBlank(cuTimeDTO.getCreateTimeColumnName())) {
+            log.debug("class[{}]无匹配的创建时间和更新时间字段, 请参考 AutofillCreateOrUpdateTimeInterceptor#CJSJ_COLUMN_NAMES 和 AutofillCreateOrUpdateTimeInterceptor#GXSJ_COLUMN_NAMES", entityClazz);
+            return invocation.proceed();
+        }
+        if (command == SqlCommandType.INSERT) {
+            autofillInsert(mappedStatement, args[1], entityClazz, cuTimeDTO);
+        } else if (command == SqlCommandType.UPDATE) {
+            autofillUpdate(mappedStatement, args[1], entityClazz, cuTimeDTO);
+        }
+        return invocation.proceed();
+    }
+
+    private void autofillUpdate(MappedStatement mappedStatement, Object param, Class entityClazz, CUTimeDTO cuTimeDTO) {
+        String updateTimeColumn = cuTimeDTO.getUpdateTimeColumnName();
+        if (StringUtils.isBlank(updateTimeColumn)) {
+            return;
+        }
+        BoundSql boundSql = mappedStatement.getBoundSql(param);
+        String sql = boundSql.getSql();
+        if (StringUtils.containsIgnoreCase(sql, updateTimeColumn)) {
+            autofillUTime(param, cuTimeDTO, entityClazz);
+            return;
+        }
+        SqlSource sqlSource = mappedStatement.getSqlSource();
+        SqlSource decoderSqlSource = new AutoFillUTimeUpdateSqlSource(sqlSource, updateTimeColumn, "now()");
+        BeanUtil.setProperty(mappedStatement, "sqlSource", decoderSqlSource);
+    }
+
+    private void autofillInsert(MappedStatement mappedStatement, Object param, Class entityClazz, CUTimeDTO cuTimeDTO) {
+        String createColumnName = cuTimeDTO.getCreateTimeColumnName();
+        String updateColumnName = cuTimeDTO.getUpdateTimeColumnName();
+        BoundSql boundSql = mappedStatement.getBoundSql(param);
+        String sql = boundSql.getSql();
+        List<String> addColumn = new ArrayList<>(2);
+        if (StringUtils.isNotBlank(createColumnName) && !StringUtils.containsIgnoreCase(sql, createColumnName)) {
+            addColumn.add(createColumnName);
+        }
+        if (StringUtils.isNotBlank(updateColumnName) && !StringUtils.containsIgnoreCase(sql, updateColumnName)) {
+            addColumn.add(updateColumnName);
+        }
+        if (CollectionUtils.isEmpty(addColumn)) {
+            autofillCUTime(param, cuTimeDTO, entityClazz);
+            return;
+        }
+        String columnName = addColumn.stream().collect(Collectors.joining(","));
+        String columnValue = addColumn.stream().map(column -> "now()").collect(Collectors.joining(","));
+        SqlSource sqlSource = mappedStatement.getSqlSource();
+        SqlSource decoderSqlSource = new AutoFillCUTimeInsertSqlSource(sqlSource, columnName, columnValue);
+        BeanUtil.setProperty(mappedStatement, "sqlSource", decoderSqlSource);
+    }
+
+    private void autofillCUTime(Object param, CUTimeDTO cuTimeDTO, Class entityClazz) {
+        if (Objects.isNull(param)) {
+            return;
+        }
+        if (param.getClass().isAssignableFrom(entityClazz)) {
+            Optional.ofNullable(cuTimeDTO.getCreateTimePropertyName())
+                    .ifPresent(createColumnName -> BeanUtil.setProperty(param, createColumnName, Calendar.getInstance().getTime()));
+            Optional.ofNullable(cuTimeDTO.getUpdateTimePropertyName())
+                    .ifPresent(updateColumnName -> BeanUtil.setProperty(param, updateColumnName, Calendar.getInstance().getTime()));
+            return;
+        }
+        if (param instanceof Collection) {
+            Collection paramColl = (Collection) param;
+            paramColl.stream().forEach(sparam -> autofillCUTime(sparam, cuTimeDTO, entityClazz));
+            return;
+        }
+        if (param instanceof Map) {
+            Map paramMap = (Map) param;
+            Set<Map.Entry> entries = paramMap.entrySet();
+            entries.stream().forEach(entry -> autofillCUTime(entry.getValue(), cuTimeDTO, entityClazz));
+            return;
+        }
+        if (param.getClass().isPrimitive() || param.getClass().isEnum()) {
+            return;
+        }
+        if (param.getClass().isArray()) {
+            Object[] paramArr = (Object[]) param;
+            Arrays.stream(paramArr).forEach(obj -> autofillCUTime(obj, cuTimeDTO, entityClazz));
+            return;
+        }
+        Field[] fields = param.getClass().getDeclaredFields();
+        Arrays.stream(fields).forEach(field -> {
+            Object property = null;
+            try {
+                property = BeanUtil.getProperty(param, field.getName());
+            } catch (Exception e) {
+                log.debug("param[{}]属性【{}】获取属性值失败", param, field.getName(), e);
+            }
+            autofillCUTime(property, cuTimeDTO, entityClazz);
+        });
+    }
+
+    private void autofillUTime(Object param, CUTimeDTO cuTimeDTO, Class entityClazz) {
+        if (Objects.isNull(param) || param.getClass().isPrimitive() || param.getClass().isEnum()) {
+            return;
+        }
+        if (param.getClass().isAssignableFrom(entityClazz)) {
+            Optional.ofNullable(cuTimeDTO.getUpdateTimePropertyName()).ifPresent(updateColumnName -> BeanUtil.setProperty(param, updateColumnName, Calendar.getInstance().getTime()));
+            return;
+        }
+        if (param instanceof Collection) {
+            Collection paramColl = (Collection) param;
+            paramColl.stream().forEach(sparam -> autofillUTime(sparam, cuTimeDTO, entityClazz));
+            return;
+        }
+        if (param instanceof Map) {
+            Map paramMap = (Map) param;
+            Set<Map.Entry> entries = paramMap.entrySet();
+            entries.stream().forEach(entry -> autofillUTime(entry.getValue(), cuTimeDTO, entityClazz));
+            return;
+        }
+        if (param.getClass().isArray()) {
+            Object[] paramArr = (Object[]) param;
+            Arrays.stream(paramArr).forEach(obj -> autofillUTime(obj, cuTimeDTO, entityClazz));
+            return;
+        }
+        Field[] fields = param.getClass().getDeclaredFields();
+        Arrays.stream(fields).forEach(field -> {
+            Object property = null;
+            try {
+                property = BeanUtil.getProperty(param, field.getName());
+            } catch (Exception e) {
+                log.debug("param[{}]属性【{}】获取属性值失败", param, field.getName(), e);
+            }
+            autofillUTime(property, cuTimeDTO, entityClazz);
+        });
+    }
+
+    private CUTimeDTO findCreateAndUpdateTimeColumn(Class entityClazz) {
+        Field[] fields = entityClazz.getDeclaredFields();
+        Map<String, Field> fieldMap = Arrays.stream(fields).collect(Collectors.toMap(Field::getName, field -> field));
+        Set<String> fieldKeys = fieldMap.keySet();
+        CUTimeDTO CUTimeDTO = new CUTimeDTO();
+        Optional<String> cjsjFieldNameOptional = fieldKeys.stream().filter(fieldKey -> Arrays.stream(CJSJ_COLUMN_NAMES)
+                .anyMatch(columnName -> StringUtils.equalsIgnoreCase(columnName, fieldKey))).findFirst();
+        cjsjFieldNameOptional.ifPresent(cjsjFieldName -> CUTimeDTO.setCreateTimePropertyName(cjsjFieldName));
+        CUTimeDTO.setCreateTimeColumnName(getColumnNameByColumnAnno(cjsjFieldNameOptional, fieldMap));
+        Optional<String> gxsjFieldNameOptional = fieldKeys.stream().filter(fieldKey -> Arrays.stream(GXSJ_COLUMN_NAMES)
+                .anyMatch(columnName -> StringUtils.equalsIgnoreCase(columnName, fieldKey))).findFirst();
+        gxsjFieldNameOptional.ifPresent(gxsjFieldName -> CUTimeDTO.setUpdateTimePropertyName(gxsjFieldName));
+        CUTimeDTO.setUpdateTimeColumnName(getColumnNameByColumnAnno(gxsjFieldNameOptional, fieldMap));
+        return CUTimeDTO;
+    }
+
+    private String getColumnNameByColumnAnno(Optional<String> fieldNameOptional, Map<String, Field> fieldMap) {
+        String columnName = null;
+        if (fieldNameOptional.isPresent()) {
+            String fieldName = fieldNameOptional.get();
+            Field field = fieldMap.get(fieldName);
+            Column column = field.getAnnotation(Column.class);
+            columnName = column.name();
+        }
+        return columnName;
+    }
+
+    private Class findEntityClazz(Class mapperClazz) {
+        if (!mapperClazz.isInterface()) {
+            return null;
+        }
+        Type[] interfaces = mapperClazz.getGenericInterfaces();
+        if (Objects.isNull(interfaces)) {
+            return null;
+        }
+        Optional<ParameterizedType> baseMapperTypeOptional = Arrays.stream(interfaces)
+                .filter(iface -> iface instanceof ParameterizedType)
+                .map(iface -> (ParameterizedType) iface)
+                .filter(iface -> ((Class) iface.getRawType()).isAssignableFrom(BaseMapper.class))
+                .findFirst();
+        if (!baseMapperTypeOptional.isPresent()) {
+            return null;
+        }
+        ParameterizedType baseMapperType = baseMapperTypeOptional.get();
+        return (Class) baseMapperType.getActualTypeArguments()[0];
+    }
+
+    @Override
+    public Object plugin(Object target) {
+        return Plugin.wrap(target, this);
+    }
+
+    @Override
+    public void setProperties(Properties properties) {
+    }
+
+}
+ +

设计的 DTO 用于确定属性对应的创建时间字段属性和更新时间字段属性。

+
@Getter
+@Setter
+@Accessors(chain = true)
+@NoArgsConstructor
+public class CUTimeDTO {
+
+    private String createTimePropertyName;
+
+    private String updateTimePropertyName;
+
+    private String createTimeColumnName;
+
+    private String updateTimeColumnName;
+}
+ +

包装对应的 SqlSource 在获取最后的 SQL (SqlSource#getBoundSql)中拼接创建和更新时间脚本。不在具体的 SqlSource 里面完成字段拼接加上预处理字段,是因为 mybatis 支持多种 SqlSource 包含 StaticSqlSourceProviderSqlSourceRawSqlSourceDynamicSqlSource,且他们可以组合出现,可见还是有一定的复杂度的。所以才选择用包装类完成字段填充。这种是不建议自动填充那种包含不同值的字段的,因为这样会让预处理 SQL 没有发挥作用。

+
@AllArgsConstructor
+public class AutoFillUTimeUpdateSqlSource implements SqlSource {
+
+    private SqlSource sqlSource;
+
+    private String columnName;
+
+    private String columnValue;
+
+
+    @Override
+    public BoundSql getBoundSql(Object parameterObject) {
+        BoundSql boundSql = this.sqlSource.getBoundSql(parameterObject);
+        replaceBoundSql(boundSql);
+        return boundSql;
+    }
+    private void replaceBoundSql(BoundSql boundSql) {
+        String sql = boundSql.getSql();
+        String newSql = StringUtils.replaceIgnoreCase(sql, "set ", "set " + columnName + "=" + columnValue + ",");
+        BeanUtil.setProperty(boundSql, "sql", newSql);
+    }
+}
+ +
@AllArgsConstructor
+public class AutoFillCUTimeInsertSqlSource implements SqlSource  {
+
+    private SqlSource sqlSource;
+
+    private String columnName;
+
+    private String columnValue;
+
+    @Override
+    public BoundSql getBoundSql(Object parameterObject) {
+        BoundSql boundSql = this.sqlSource.getBoundSql(parameterObject);
+        replaceBoundSql(boundSql);
+        return boundSql;
+    }
+
+    private void replaceBoundSql(BoundSql boundSql) {
+        String sql = boundSql.getSql();
+        Pattern pattern = Pattern.compile("\\(");
+        Matcher matcher = pattern.matcher(sql);
+        String newSql = sql;
+        if (matcher.find()) {
+            int index = matcher.start();
+            newSql = sql.substring(0, index + 1) + columnName + "," + sql.substring(index + 1);
+        }
+
+        int index = StringUtils.indexOfIgnoreCase(newSql, "values");
+        int index1 = index + "values".length();
+        while(index1 < newSql.length() && index1 > 0) {
+            index1 = index1 + 1;
+            char next = newSql.charAt(index1);
+            if (next == ' ' || next == '\\' || next == 'n') {
+                continue;
+            }
+            if (next == '(') {
+                break;
+            }
+            index1 = StringUtils.indexOfIgnoreCase(newSql, "values", index1);
+        }
+        if (index1 == -1) {
+            return;
+        }
+        String replace = StringUtils.substring(newSql, index, index1 + 1);
+        newSql = newSql.replace(replace, replace + columnValue + ",");
+        BeanUtil.setProperty(boundSql, "sql", newSql);
+    }
+}
+ +

猜测你会有这样的疑问

为什么不让项目直接集成 mybatis-plus 修改 pojo 就能快速解决问题,不用这么复杂。当然我统一这个思路,但这个思路适合于 pojo 少,且使用 @Table@Column 等数据库型的注解的项目。否则,在大项目中还是工作量及风险还是比较高。但这不影响我推荐使用 mybatis-plus。

+ + +
+
+ + + +
+ +
+ + + 文章作者: + + + + beluga + +
+ +
+ + + 版权声明: + + + + 本博客所有文章除特別声明外,均采用 + CC BY 4.0 + 许可协议。转载请注明来源 + beluga + ! + +
+ +
+ + + + + +
+ +
+ +
+ + + + + + + + +
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
  目录
+
+
+
+
+ + + + + + + + + + + +
+ + + + +
+ + +
+
+ Copyright © + + 2019-2024 + + beluga + | Powered by Hexo + | Theme Matery + + | 繁/简: + +
+ +   站点总字数: 10.3k + + + + + + + +  |  总访问量:  + + + + + +  |  总访问人数:  + + + +
+ + + +
+ +
+ +
+
+ +
+ + + + + + + + +
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/404/index.html b/404/index.html index 94658f1..6836556 100644 --- a/404/index.html +++ b/404/index.html @@ -388,7 +388,7 @@
  站点总字数: 8k + class="white-color">10.3k diff --git a/about/index.html b/about/index.html index 5d04aa3..6f8bc7b 100644 --- a/about/index.html +++ b/about/index.html @@ -395,21 +395,21 @@
- 6 + 7 文章
- 4 + 3 分类
- 11 + 19 标签
@@ -425,21 +425,21 @@
- 6 + 7 文章
- 4 + 3 分类
- 11 + 19 标签
@@ -583,7 +583,7 @@ name: '文章篇数', type: 'line', color: ['#6772e5'], - data: [0,1,3,1,0,0,0,0,0,0,0,1,0], + data: [0,1,3,1,0,0,0,0,0,0,0,1,1], markPoint: { symbolSize: 45, color: ['#fa755a','#3ecf8e','#82d3f4'], @@ -625,7 +625,7 @@ type: 'pie', radius: '50%', color: ['#6772e5', '#ff9e0f', '#fa755a', '#3ecf8e', '#82d3f4', '#ab47bc', '#525f7f', '#f51c47', '#26A69A'], - data: [{"name":"tools","value":2},{"name":"npm","value":1},{"name":"spring-security","value":2},{"name":"分布式锁","value":1}], + data: [{"name":"code","value":5},{"name":"杂项","value":1},{"name":"选型","value":1}], itemStyle: { emphasis: { shadowBlur: 10, @@ -649,7 +649,7 @@ xAxis: [ { type: 'category', - data: ["tools","spring-security","cas","gitlab","BFG","npm-link","relogin","oauth2","pre-security","分布式锁"] + data: ["code","tools","spring-security","cas","gitlab","BFG","npm-link","relogin","oauth2","pre-security"] } ], yAxis: [ @@ -662,7 +662,7 @@ type: 'bar', color: ['#82d3f4'], barWidth : 18, - data: [3,2,2,1,1,1,1,1,1,1], + data: [5,2,2,2,1,1,1,1,1,1], markPoint: { symbolSize: 45, data: [{ @@ -849,6 +849,54 @@ + + + code + + + + + + 杂项 + + + + + + 选型 + + + + + + npm + + + + + + 前端 + + + + + + mybatis + + + + + + mybatis-plus + + + + + + 自动填充 + + +
@@ -928,7 +976,7 @@
  站点总字数: 8k + class="white-color">10.3k diff --git a/archives/2023/03/index.html b/archives/2023/03/index.html index c641370..ee7cbaf 100644 --- a/archives/2023/03/index.html +++ b/archives/2023/03/index.html @@ -430,7 +430,7 @@ }, calendar: [{ left: 'center', - range: ["2023-02-01", "2024-02-01"], + range: ["2023-02-18", "2024-02-18"], cellSize: [13, 13], splitLine: { show: false @@ -457,7 +457,7 @@ type: 'heatmap', coordinateSystem: 'calendar', calendarIndex: 0, - data: [["2023-02-01", 0], ["2023-02-02", 0], ["2023-02-03", 0], ["2023-02-04", 0], ["2023-02-05", 0], ["2023-02-06", 0], ["2023-02-07", 0], ["2023-02-08", 0], ["2023-02-09", 0], ["2023-02-10", 0], ["2023-02-11", 0], ["2023-02-12", 0], ["2023-02-13", 0], ["2023-02-14", 0], ["2023-02-15", 0], ["2023-02-16", 0], ["2023-02-17", 0], ["2023-02-18", 0], ["2023-02-19", 0], ["2023-02-20", 0], ["2023-02-21", 0], ["2023-02-22", 0], ["2023-02-23", 0], ["2023-02-24", 0], ["2023-02-25", 0], ["2023-02-26", 0], ["2023-02-27", 0], ["2023-02-28", 0], ["2023-03-01", 0], ["2023-03-02", 0], ["2023-03-03", 0], ["2023-03-04", 0], ["2023-03-05", 0], ["2023-03-06", 0], ["2023-03-07", 0], ["2023-03-08", 0], ["2023-03-09", 0], ["2023-03-10", 0], ["2023-03-11", 0], ["2023-03-12", 0], ["2023-03-13", 0], ["2023-03-14", 0], ["2023-03-15", 0], ["2023-03-16", 0], ["2023-03-17", 0], ["2023-03-18", 0], ["2023-03-19", 0], ["2023-03-20", 0], ["2023-03-21", 0], ["2023-03-22", 0], ["2023-03-23", 0], ["2023-03-24", 0], ["2023-03-25", 0], ["2023-03-26", 0], ["2023-03-27", 1], ["2023-03-28", 0], ["2023-03-29", 0], ["2023-03-30", 0], ["2023-03-31", 0], ["2023-04-01", 0], ["2023-04-02", 1], ["2023-04-03", 0], ["2023-04-04", 0], ["2023-04-05", 0], ["2023-04-06", 0], ["2023-04-07", 0], ["2023-04-08", 0], ["2023-04-09", 0], ["2023-04-10", 2], ["2023-04-11", 0], ["2023-04-12", 0], ["2023-04-13", 0], ["2023-04-14", 0], ["2023-04-15", 0], ["2023-04-16", 0], ["2023-04-17", 0], ["2023-04-18", 0], ["2023-04-19", 0], ["2023-04-20", 0], ["2023-04-21", 0], ["2023-04-22", 0], ["2023-04-23", 0], ["2023-04-24", 0], ["2023-04-25", 0], ["2023-04-26", 0], ["2023-04-27", 0], ["2023-04-28", 0], ["2023-04-29", 0], ["2023-04-30", 0], ["2023-05-01", 0], ["2023-05-02", 0], ["2023-05-03", 0], ["2023-05-04", 0], ["2023-05-05", 0], ["2023-05-06", 0], ["2023-05-07", 0], ["2023-05-08", 0], ["2023-05-09", 0], ["2023-05-10", 0], ["2023-05-11", 0], ["2023-05-12", 0], ["2023-05-13", 0], ["2023-05-14", 0], ["2023-05-15", 0], ["2023-05-16", 0], ["2023-05-17", 0], ["2023-05-18", 1], ["2023-05-19", 0], ["2023-05-20", 0], ["2023-05-21", 0], ["2023-05-22", 0], ["2023-05-23", 0], ["2023-05-24", 0], ["2023-05-25", 0], ["2023-05-26", 0], ["2023-05-27", 0], ["2023-05-28", 0], ["2023-05-29", 0], ["2023-05-30", 0], ["2023-05-31", 0], ["2023-06-01", 0], ["2023-06-02", 0], ["2023-06-03", 0], ["2023-06-04", 0], ["2023-06-05", 0], ["2023-06-06", 0], ["2023-06-07", 0], ["2023-06-08", 0], ["2023-06-09", 0], ["2023-06-10", 0], ["2023-06-11", 0], ["2023-06-12", 0], ["2023-06-13", 0], ["2023-06-14", 0], ["2023-06-15", 0], ["2023-06-16", 0], ["2023-06-17", 0], ["2023-06-18", 0], ["2023-06-19", 0], ["2023-06-20", 0], ["2023-06-21", 0], ["2023-06-22", 0], ["2023-06-23", 0], ["2023-06-24", 0], ["2023-06-25", 0], ["2023-06-26", 0], ["2023-06-27", 0], ["2023-06-28", 0], ["2023-06-29", 0], ["2023-06-30", 0], ["2023-07-01", 0], ["2023-07-02", 0], ["2023-07-03", 0], ["2023-07-04", 0], ["2023-07-05", 0], ["2023-07-06", 0], ["2023-07-07", 0], ["2023-07-08", 0], ["2023-07-09", 0], ["2023-07-10", 0], ["2023-07-11", 0], ["2023-07-12", 0], ["2023-07-13", 0], ["2023-07-14", 0], ["2023-07-15", 0], ["2023-07-16", 0], ["2023-07-17", 0], ["2023-07-18", 0], ["2023-07-19", 0], ["2023-07-20", 0], ["2023-07-21", 0], ["2023-07-22", 0], ["2023-07-23", 0], ["2023-07-24", 0], ["2023-07-25", 0], ["2023-07-26", 0], ["2023-07-27", 0], ["2023-07-28", 0], ["2023-07-29", 0], ["2023-07-30", 0], ["2023-07-31", 0], ["2023-08-01", 0], ["2023-08-02", 0], ["2023-08-03", 0], ["2023-08-04", 0], ["2023-08-05", 0], ["2023-08-06", 0], ["2023-08-07", 0], ["2023-08-08", 0], ["2023-08-09", 0], ["2023-08-10", 0], ["2023-08-11", 0], ["2023-08-12", 0], ["2023-08-13", 0], ["2023-08-14", 0], ["2023-08-15", 0], ["2023-08-16", 0], ["2023-08-17", 0], ["2023-08-18", 0], ["2023-08-19", 0], ["2023-08-20", 0], ["2023-08-21", 0], ["2023-08-22", 0], ["2023-08-23", 0], ["2023-08-24", 0], ["2023-08-25", 0], ["2023-08-26", 0], ["2023-08-27", 0], ["2023-08-28", 0], ["2023-08-29", 0], ["2023-08-30", 0], ["2023-08-31", 0], ["2023-09-01", 0], ["2023-09-02", 0], ["2023-09-03", 0], ["2023-09-04", 0], ["2023-09-05", 0], ["2023-09-06", 0], ["2023-09-07", 0], ["2023-09-08", 0], ["2023-09-09", 0], ["2023-09-10", 0], ["2023-09-11", 0], ["2023-09-12", 0], ["2023-09-13", 0], ["2023-09-14", 0], ["2023-09-15", 0], ["2023-09-16", 0], ["2023-09-17", 0], ["2023-09-18", 0], ["2023-09-19", 0], ["2023-09-20", 0], ["2023-09-21", 0], ["2023-09-22", 0], ["2023-09-23", 0], ["2023-09-24", 0], ["2023-09-25", 0], ["2023-09-26", 0], ["2023-09-27", 0], ["2023-09-28", 0], ["2023-09-29", 0], ["2023-09-30", 0], ["2023-10-01", 0], ["2023-10-02", 0], ["2023-10-03", 0], ["2023-10-04", 0], ["2023-10-05", 0], ["2023-10-06", 0], ["2023-10-07", 0], ["2023-10-08", 0], ["2023-10-09", 0], ["2023-10-10", 0], ["2023-10-11", 0], ["2023-10-12", 0], ["2023-10-13", 0], ["2023-10-14", 0], ["2023-10-15", 0], ["2023-10-16", 0], ["2023-10-17", 0], ["2023-10-18", 0], ["2023-10-19", 0], ["2023-10-20", 0], ["2023-10-21", 0], ["2023-10-22", 0], ["2023-10-23", 0], ["2023-10-24", 0], ["2023-10-25", 0], ["2023-10-26", 0], ["2023-10-27", 0], ["2023-10-28", 0], ["2023-10-29", 0], ["2023-10-30", 0], ["2023-10-31", 0], ["2023-11-01", 0], ["2023-11-02", 0], ["2023-11-03", 0], ["2023-11-04", 0], ["2023-11-05", 0], ["2023-11-06", 0], ["2023-11-07", 0], ["2023-11-08", 0], ["2023-11-09", 0], ["2023-11-10", 0], ["2023-11-11", 0], ["2023-11-12", 0], ["2023-11-13", 0], ["2023-11-14", 0], ["2023-11-15", 0], ["2023-11-16", 0], ["2023-11-17", 0], ["2023-11-18", 0], ["2023-11-19", 0], ["2023-11-20", 0], ["2023-11-21", 0], ["2023-11-22", 0], ["2023-11-23", 0], ["2023-11-24", 0], ["2023-11-25", 0], ["2023-11-26", 0], ["2023-11-27", 0], ["2023-11-28", 0], ["2023-11-29", 0], ["2023-11-30", 0], ["2023-12-01", 0], ["2023-12-02", 0], ["2023-12-03", 0], ["2023-12-04", 0], ["2023-12-05", 0], ["2023-12-06", 0], ["2023-12-07", 0], ["2023-12-08", 0], ["2023-12-09", 0], ["2023-12-10", 0], ["2023-12-11", 0], ["2023-12-12", 0], ["2023-12-13", 0], ["2023-12-14", 0], ["2023-12-15", 0], ["2023-12-16", 0], ["2023-12-17", 0], ["2023-12-18", 0], ["2023-12-19", 0], ["2023-12-20", 0], ["2023-12-21", 0], ["2023-12-22", 0], ["2023-12-23", 0], ["2023-12-24", 0], ["2023-12-25", 0], ["2023-12-26", 0], ["2023-12-27", 0], ["2023-12-28", 0], ["2023-12-29", 0], ["2023-12-30", 0], ["2023-12-31", 0], ["2024-01-01", 0], ["2024-01-02", 0], ["2024-01-03", 0], ["2024-01-04", 0], ["2024-01-05", 0], ["2024-01-06", 0], ["2024-01-07", 0], ["2024-01-08", 0], ["2024-01-09", 0], ["2024-01-10", 0], ["2024-01-11", 0], ["2024-01-12", 0], ["2024-01-13", 0], ["2024-01-14", 0], ["2024-01-15", 0], ["2024-01-16", 0], ["2024-01-17", 0], ["2024-01-18", 0], ["2024-01-19", 0], ["2024-01-20", 0], ["2024-01-21", 0], ["2024-01-22", 0], ["2024-01-23", 0], ["2024-01-24", 0], ["2024-01-25", 0], ["2024-01-26", 0], ["2024-01-27", 0], ["2024-01-28", 0], ["2024-01-29", 0], ["2024-01-30", 0], ["2024-01-31", 1], ["2024-02-01", 0]] + data: [["2023-02-18", 0], ["2023-02-19", 0], ["2023-02-20", 0], ["2023-02-21", 0], ["2023-02-22", 0], ["2023-02-23", 0], ["2023-02-24", 0], ["2023-02-25", 0], ["2023-02-26", 0], ["2023-02-27", 0], ["2023-02-28", 0], ["2023-03-01", 0], ["2023-03-02", 0], ["2023-03-03", 0], ["2023-03-04", 0], ["2023-03-05", 0], ["2023-03-06", 0], ["2023-03-07", 0], ["2023-03-08", 0], ["2023-03-09", 0], ["2023-03-10", 0], ["2023-03-11", 0], ["2023-03-12", 0], ["2023-03-13", 0], ["2023-03-14", 0], ["2023-03-15", 0], ["2023-03-16", 0], ["2023-03-17", 0], ["2023-03-18", 0], ["2023-03-19", 0], ["2023-03-20", 0], ["2023-03-21", 0], ["2023-03-22", 0], ["2023-03-23", 0], ["2023-03-24", 0], ["2023-03-25", 0], ["2023-03-26", 0], ["2023-03-27", 1], ["2023-03-28", 0], ["2023-03-29", 0], ["2023-03-30", 0], ["2023-03-31", 0], ["2023-04-01", 0], ["2023-04-02", 1], ["2023-04-03", 0], ["2023-04-04", 0], ["2023-04-05", 0], ["2023-04-06", 0], ["2023-04-07", 0], ["2023-04-08", 0], ["2023-04-09", 0], ["2023-04-10", 1], ["2023-04-11", 1], ["2023-04-12", 0], ["2023-04-13", 0], ["2023-04-14", 0], ["2023-04-15", 0], ["2023-04-16", 0], ["2023-04-17", 0], ["2023-04-18", 0], ["2023-04-19", 0], ["2023-04-20", 0], ["2023-04-21", 0], ["2023-04-22", 0], ["2023-04-23", 0], ["2023-04-24", 0], ["2023-04-25", 0], ["2023-04-26", 0], ["2023-04-27", 0], ["2023-04-28", 0], ["2023-04-29", 0], ["2023-04-30", 0], ["2023-05-01", 0], ["2023-05-02", 0], ["2023-05-03", 0], ["2023-05-04", 0], ["2023-05-05", 0], ["2023-05-06", 0], ["2023-05-07", 0], ["2023-05-08", 0], ["2023-05-09", 0], ["2023-05-10", 0], ["2023-05-11", 0], ["2023-05-12", 0], ["2023-05-13", 0], ["2023-05-14", 0], ["2023-05-15", 0], ["2023-05-16", 0], ["2023-05-17", 0], ["2023-05-18", 1], ["2023-05-19", 0], ["2023-05-20", 0], ["2023-05-21", 0], ["2023-05-22", 0], ["2023-05-23", 0], ["2023-05-24", 0], ["2023-05-25", 0], ["2023-05-26", 0], ["2023-05-27", 0], ["2023-05-28", 0], ["2023-05-29", 0], ["2023-05-30", 0], ["2023-05-31", 0], ["2023-06-01", 0], ["2023-06-02", 0], ["2023-06-03", 0], ["2023-06-04", 0], ["2023-06-05", 0], ["2023-06-06", 0], ["2023-06-07", 0], ["2023-06-08", 0], ["2023-06-09", 0], ["2023-06-10", 0], ["2023-06-11", 0], ["2023-06-12", 0], ["2023-06-13", 0], ["2023-06-14", 0], ["2023-06-15", 0], ["2023-06-16", 0], ["2023-06-17", 0], ["2023-06-18", 0], ["2023-06-19", 0], ["2023-06-20", 0], ["2023-06-21", 0], ["2023-06-22", 0], ["2023-06-23", 0], ["2023-06-24", 0], ["2023-06-25", 0], ["2023-06-26", 0], ["2023-06-27", 0], ["2023-06-28", 0], ["2023-06-29", 0], ["2023-06-30", 0], ["2023-07-01", 0], ["2023-07-02", 0], ["2023-07-03", 0], ["2023-07-04", 0], ["2023-07-05", 0], ["2023-07-06", 0], ["2023-07-07", 0], ["2023-07-08", 0], ["2023-07-09", 0], ["2023-07-10", 0], ["2023-07-11", 0], ["2023-07-12", 0], ["2023-07-13", 0], ["2023-07-14", 0], ["2023-07-15", 0], ["2023-07-16", 0], ["2023-07-17", 0], ["2023-07-18", 0], ["2023-07-19", 0], ["2023-07-20", 0], ["2023-07-21", 0], ["2023-07-22", 0], ["2023-07-23", 0], ["2023-07-24", 0], ["2023-07-25", 0], ["2023-07-26", 0], ["2023-07-27", 0], ["2023-07-28", 0], ["2023-07-29", 0], ["2023-07-30", 0], ["2023-07-31", 0], ["2023-08-01", 0], ["2023-08-02", 0], ["2023-08-03", 0], ["2023-08-04", 0], ["2023-08-05", 0], ["2023-08-06", 0], ["2023-08-07", 0], ["2023-08-08", 0], ["2023-08-09", 0], ["2023-08-10", 0], ["2023-08-11", 0], ["2023-08-12", 0], ["2023-08-13", 0], ["2023-08-14", 0], ["2023-08-15", 0], ["2023-08-16", 0], ["2023-08-17", 0], ["2023-08-18", 0], ["2023-08-19", 0], ["2023-08-20", 0], ["2023-08-21", 0], ["2023-08-22", 0], ["2023-08-23", 0], ["2023-08-24", 0], ["2023-08-25", 0], ["2023-08-26", 0], ["2023-08-27", 0], ["2023-08-28", 0], ["2023-08-29", 0], ["2023-08-30", 0], ["2023-08-31", 0], ["2023-09-01", 0], ["2023-09-02", 0], ["2023-09-03", 0], ["2023-09-04", 0], ["2023-09-05", 0], ["2023-09-06", 0], ["2023-09-07", 0], ["2023-09-08", 0], ["2023-09-09", 0], ["2023-09-10", 0], ["2023-09-11", 0], ["2023-09-12", 0], ["2023-09-13", 0], ["2023-09-14", 0], ["2023-09-15", 0], ["2023-09-16", 0], ["2023-09-17", 0], ["2023-09-18", 0], ["2023-09-19", 0], ["2023-09-20", 0], ["2023-09-21", 0], ["2023-09-22", 0], ["2023-09-23", 0], ["2023-09-24", 0], ["2023-09-25", 0], ["2023-09-26", 0], ["2023-09-27", 0], ["2023-09-28", 0], ["2023-09-29", 0], ["2023-09-30", 0], ["2023-10-01", 0], ["2023-10-02", 0], ["2023-10-03", 0], ["2023-10-04", 0], ["2023-10-05", 0], ["2023-10-06", 0], ["2023-10-07", 0], ["2023-10-08", 0], ["2023-10-09", 0], ["2023-10-10", 0], ["2023-10-11", 0], ["2023-10-12", 0], ["2023-10-13", 0], ["2023-10-14", 0], ["2023-10-15", 0], ["2023-10-16", 0], ["2023-10-17", 0], ["2023-10-18", 0], ["2023-10-19", 0], ["2023-10-20", 0], ["2023-10-21", 0], ["2023-10-22", 0], ["2023-10-23", 0], ["2023-10-24", 0], ["2023-10-25", 0], ["2023-10-26", 0], ["2023-10-27", 0], ["2023-10-28", 0], ["2023-10-29", 0], ["2023-10-30", 0], ["2023-10-31", 0], ["2023-11-01", 0], ["2023-11-02", 0], ["2023-11-03", 0], ["2023-11-04", 0], ["2023-11-05", 0], ["2023-11-06", 0], ["2023-11-07", 0], ["2023-11-08", 0], ["2023-11-09", 0], ["2023-11-10", 0], ["2023-11-11", 0], ["2023-11-12", 0], ["2023-11-13", 0], ["2023-11-14", 0], ["2023-11-15", 0], ["2023-11-16", 0], ["2023-11-17", 0], ["2023-11-18", 0], ["2023-11-19", 0], ["2023-11-20", 0], ["2023-11-21", 0], ["2023-11-22", 0], ["2023-11-23", 0], ["2023-11-24", 0], ["2023-11-25", 0], ["2023-11-26", 0], ["2023-11-27", 0], ["2023-11-28", 0], ["2023-11-29", 0], ["2023-11-30", 0], ["2023-12-01", 0], ["2023-12-02", 0], ["2023-12-03", 0], ["2023-12-04", 0], ["2023-12-05", 0], ["2023-12-06", 0], ["2023-12-07", 0], ["2023-12-08", 0], ["2023-12-09", 0], ["2023-12-10", 0], ["2023-12-11", 0], ["2023-12-12", 0], ["2023-12-13", 0], ["2023-12-14", 0], ["2023-12-15", 0], ["2023-12-16", 0], ["2023-12-17", 0], ["2023-12-18", 0], ["2023-12-19", 0], ["2023-12-20", 0], ["2023-12-21", 0], ["2023-12-22", 0], ["2023-12-23", 0], ["2023-12-24", 0], ["2023-12-25", 0], ["2023-12-26", 0], ["2023-12-27", 0], ["2023-12-28", 0], ["2023-12-29", 0], ["2023-12-30", 0], ["2023-12-31", 0], ["2024-01-01", 0], ["2024-01-02", 0], ["2024-01-03", 0], ["2024-01-04", 0], ["2024-01-05", 0], ["2024-01-06", 0], ["2024-01-07", 0], ["2024-01-08", 0], ["2024-01-09", 0], ["2024-01-10", 0], ["2024-01-11", 0], ["2024-01-12", 0], ["2024-01-13", 0], ["2024-01-14", 0], ["2024-01-15", 0], ["2024-01-16", 0], ["2024-01-17", 0], ["2024-01-18", 0], ["2024-01-19", 0], ["2024-01-20", 0], ["2024-01-21", 0], ["2024-01-22", 0], ["2024-01-23", 0], ["2024-01-24", 0], ["2024-01-25", 0], ["2024-01-26", 0], ["2024-01-27", 0], ["2024-01-28", 0], ["2024-01-29", 0], ["2024-01-30", 0], ["2024-01-31", 1], ["2024-02-01", 0], ["2024-02-02", 0], ["2024-02-03", 0], ["2024-02-04", 0], ["2024-02-05", 0], ["2024-02-06", 0], ["2024-02-07", 0], ["2024-02-08", 0], ["2024-02-09", 0], ["2024-02-10", 0], ["2024-02-11", 0], ["2024-02-12", 0], ["2024-02-13", 0], ["2024-02-14", 0], ["2024-02-15", 0], ["2024-02-16", 0], ["2024-02-17", 0], ["2024-02-18", 1]] }] }; @@ -520,8 +520,8 @@ - @@ -538,6 +538,8 @@ BFG + 杂项 + @@ -571,7 +573,7 @@
  站点总字数: 8k + class="white-color">10.3k diff --git a/archives/2023/04/index.html b/archives/2023/04/index.html index b2f57e6..2b07108 100644 --- a/archives/2023/04/index.html +++ b/archives/2023/04/index.html @@ -430,7 +430,7 @@ }, calendar: [{ left: 'center', - range: ["2023-02-01", "2024-02-01"], + range: ["2023-02-18", "2024-02-18"], cellSize: [13, 13], splitLine: { show: false @@ -457,7 +457,7 @@ type: 'heatmap', coordinateSystem: 'calendar', calendarIndex: 0, - data: [["2023-02-01", 0], ["2023-02-02", 0], ["2023-02-03", 0], ["2023-02-04", 0], ["2023-02-05", 0], ["2023-02-06", 0], ["2023-02-07", 0], ["2023-02-08", 0], ["2023-02-09", 0], ["2023-02-10", 0], ["2023-02-11", 0], ["2023-02-12", 0], ["2023-02-13", 0], ["2023-02-14", 0], ["2023-02-15", 0], ["2023-02-16", 0], ["2023-02-17", 0], ["2023-02-18", 0], ["2023-02-19", 0], ["2023-02-20", 0], ["2023-02-21", 0], ["2023-02-22", 0], ["2023-02-23", 0], ["2023-02-24", 0], ["2023-02-25", 0], ["2023-02-26", 0], ["2023-02-27", 0], ["2023-02-28", 0], ["2023-03-01", 0], ["2023-03-02", 0], ["2023-03-03", 0], ["2023-03-04", 0], ["2023-03-05", 0], ["2023-03-06", 0], ["2023-03-07", 0], ["2023-03-08", 0], ["2023-03-09", 0], ["2023-03-10", 0], ["2023-03-11", 0], ["2023-03-12", 0], ["2023-03-13", 0], ["2023-03-14", 0], ["2023-03-15", 0], ["2023-03-16", 0], ["2023-03-17", 0], ["2023-03-18", 0], ["2023-03-19", 0], ["2023-03-20", 0], ["2023-03-21", 0], ["2023-03-22", 0], ["2023-03-23", 0], ["2023-03-24", 0], ["2023-03-25", 0], ["2023-03-26", 0], ["2023-03-27", 1], ["2023-03-28", 0], ["2023-03-29", 0], ["2023-03-30", 0], ["2023-03-31", 0], ["2023-04-01", 0], ["2023-04-02", 1], ["2023-04-03", 0], ["2023-04-04", 0], ["2023-04-05", 0], ["2023-04-06", 0], ["2023-04-07", 0], ["2023-04-08", 0], ["2023-04-09", 0], ["2023-04-10", 2], ["2023-04-11", 0], ["2023-04-12", 0], ["2023-04-13", 0], ["2023-04-14", 0], ["2023-04-15", 0], ["2023-04-16", 0], ["2023-04-17", 0], ["2023-04-18", 0], ["2023-04-19", 0], ["2023-04-20", 0], ["2023-04-21", 0], ["2023-04-22", 0], ["2023-04-23", 0], ["2023-04-24", 0], ["2023-04-25", 0], ["2023-04-26", 0], ["2023-04-27", 0], ["2023-04-28", 0], ["2023-04-29", 0], ["2023-04-30", 0], ["2023-05-01", 0], ["2023-05-02", 0], ["2023-05-03", 0], ["2023-05-04", 0], ["2023-05-05", 0], ["2023-05-06", 0], ["2023-05-07", 0], ["2023-05-08", 0], ["2023-05-09", 0], ["2023-05-10", 0], ["2023-05-11", 0], ["2023-05-12", 0], ["2023-05-13", 0], ["2023-05-14", 0], ["2023-05-15", 0], ["2023-05-16", 0], ["2023-05-17", 0], ["2023-05-18", 1], ["2023-05-19", 0], ["2023-05-20", 0], ["2023-05-21", 0], ["2023-05-22", 0], ["2023-05-23", 0], ["2023-05-24", 0], ["2023-05-25", 0], ["2023-05-26", 0], ["2023-05-27", 0], ["2023-05-28", 0], ["2023-05-29", 0], ["2023-05-30", 0], ["2023-05-31", 0], ["2023-06-01", 0], ["2023-06-02", 0], ["2023-06-03", 0], ["2023-06-04", 0], ["2023-06-05", 0], ["2023-06-06", 0], ["2023-06-07", 0], ["2023-06-08", 0], ["2023-06-09", 0], ["2023-06-10", 0], ["2023-06-11", 0], ["2023-06-12", 0], ["2023-06-13", 0], ["2023-06-14", 0], ["2023-06-15", 0], ["2023-06-16", 0], ["2023-06-17", 0], ["2023-06-18", 0], ["2023-06-19", 0], ["2023-06-20", 0], ["2023-06-21", 0], ["2023-06-22", 0], ["2023-06-23", 0], ["2023-06-24", 0], ["2023-06-25", 0], ["2023-06-26", 0], ["2023-06-27", 0], ["2023-06-28", 0], ["2023-06-29", 0], ["2023-06-30", 0], ["2023-07-01", 0], ["2023-07-02", 0], ["2023-07-03", 0], ["2023-07-04", 0], ["2023-07-05", 0], ["2023-07-06", 0], ["2023-07-07", 0], ["2023-07-08", 0], ["2023-07-09", 0], ["2023-07-10", 0], ["2023-07-11", 0], ["2023-07-12", 0], ["2023-07-13", 0], ["2023-07-14", 0], ["2023-07-15", 0], ["2023-07-16", 0], ["2023-07-17", 0], ["2023-07-18", 0], ["2023-07-19", 0], ["2023-07-20", 0], ["2023-07-21", 0], ["2023-07-22", 0], ["2023-07-23", 0], ["2023-07-24", 0], ["2023-07-25", 0], ["2023-07-26", 0], ["2023-07-27", 0], ["2023-07-28", 0], ["2023-07-29", 0], ["2023-07-30", 0], ["2023-07-31", 0], ["2023-08-01", 0], ["2023-08-02", 0], ["2023-08-03", 0], ["2023-08-04", 0], ["2023-08-05", 0], ["2023-08-06", 0], ["2023-08-07", 0], ["2023-08-08", 0], ["2023-08-09", 0], ["2023-08-10", 0], ["2023-08-11", 0], ["2023-08-12", 0], ["2023-08-13", 0], ["2023-08-14", 0], ["2023-08-15", 0], ["2023-08-16", 0], ["2023-08-17", 0], ["2023-08-18", 0], ["2023-08-19", 0], ["2023-08-20", 0], ["2023-08-21", 0], ["2023-08-22", 0], ["2023-08-23", 0], ["2023-08-24", 0], ["2023-08-25", 0], ["2023-08-26", 0], ["2023-08-27", 0], ["2023-08-28", 0], ["2023-08-29", 0], ["2023-08-30", 0], ["2023-08-31", 0], ["2023-09-01", 0], ["2023-09-02", 0], ["2023-09-03", 0], ["2023-09-04", 0], ["2023-09-05", 0], ["2023-09-06", 0], ["2023-09-07", 0], ["2023-09-08", 0], ["2023-09-09", 0], ["2023-09-10", 0], ["2023-09-11", 0], ["2023-09-12", 0], ["2023-09-13", 0], ["2023-09-14", 0], ["2023-09-15", 0], ["2023-09-16", 0], ["2023-09-17", 0], ["2023-09-18", 0], ["2023-09-19", 0], ["2023-09-20", 0], ["2023-09-21", 0], ["2023-09-22", 0], ["2023-09-23", 0], ["2023-09-24", 0], ["2023-09-25", 0], ["2023-09-26", 0], ["2023-09-27", 0], ["2023-09-28", 0], ["2023-09-29", 0], ["2023-09-30", 0], ["2023-10-01", 0], ["2023-10-02", 0], ["2023-10-03", 0], ["2023-10-04", 0], ["2023-10-05", 0], ["2023-10-06", 0], ["2023-10-07", 0], ["2023-10-08", 0], ["2023-10-09", 0], ["2023-10-10", 0], ["2023-10-11", 0], ["2023-10-12", 0], ["2023-10-13", 0], ["2023-10-14", 0], ["2023-10-15", 0], ["2023-10-16", 0], ["2023-10-17", 0], ["2023-10-18", 0], ["2023-10-19", 0], ["2023-10-20", 0], ["2023-10-21", 0], ["2023-10-22", 0], ["2023-10-23", 0], ["2023-10-24", 0], ["2023-10-25", 0], ["2023-10-26", 0], ["2023-10-27", 0], ["2023-10-28", 0], ["2023-10-29", 0], ["2023-10-30", 0], ["2023-10-31", 0], ["2023-11-01", 0], ["2023-11-02", 0], ["2023-11-03", 0], ["2023-11-04", 0], ["2023-11-05", 0], ["2023-11-06", 0], ["2023-11-07", 0], ["2023-11-08", 0], ["2023-11-09", 0], ["2023-11-10", 0], ["2023-11-11", 0], ["2023-11-12", 0], ["2023-11-13", 0], ["2023-11-14", 0], ["2023-11-15", 0], ["2023-11-16", 0], ["2023-11-17", 0], ["2023-11-18", 0], ["2023-11-19", 0], ["2023-11-20", 0], ["2023-11-21", 0], ["2023-11-22", 0], ["2023-11-23", 0], ["2023-11-24", 0], ["2023-11-25", 0], ["2023-11-26", 0], ["2023-11-27", 0], ["2023-11-28", 0], ["2023-11-29", 0], ["2023-11-30", 0], ["2023-12-01", 0], ["2023-12-02", 0], ["2023-12-03", 0], ["2023-12-04", 0], ["2023-12-05", 0], ["2023-12-06", 0], ["2023-12-07", 0], ["2023-12-08", 0], ["2023-12-09", 0], ["2023-12-10", 0], ["2023-12-11", 0], ["2023-12-12", 0], ["2023-12-13", 0], ["2023-12-14", 0], ["2023-12-15", 0], ["2023-12-16", 0], ["2023-12-17", 0], ["2023-12-18", 0], ["2023-12-19", 0], ["2023-12-20", 0], ["2023-12-21", 0], ["2023-12-22", 0], ["2023-12-23", 0], ["2023-12-24", 0], ["2023-12-25", 0], ["2023-12-26", 0], ["2023-12-27", 0], ["2023-12-28", 0], ["2023-12-29", 0], ["2023-12-30", 0], ["2023-12-31", 0], ["2024-01-01", 0], ["2024-01-02", 0], ["2024-01-03", 0], ["2024-01-04", 0], ["2024-01-05", 0], ["2024-01-06", 0], ["2024-01-07", 0], ["2024-01-08", 0], ["2024-01-09", 0], ["2024-01-10", 0], ["2024-01-11", 0], ["2024-01-12", 0], ["2024-01-13", 0], ["2024-01-14", 0], ["2024-01-15", 0], ["2024-01-16", 0], ["2024-01-17", 0], ["2024-01-18", 0], ["2024-01-19", 0], ["2024-01-20", 0], ["2024-01-21", 0], ["2024-01-22", 0], ["2024-01-23", 0], ["2024-01-24", 0], ["2024-01-25", 0], ["2024-01-26", 0], ["2024-01-27", 0], ["2024-01-28", 0], ["2024-01-29", 0], ["2024-01-30", 0], ["2024-01-31", 1], ["2024-02-01", 0]] + data: [["2023-02-18", 0], ["2023-02-19", 0], ["2023-02-20", 0], ["2023-02-21", 0], ["2023-02-22", 0], ["2023-02-23", 0], ["2023-02-24", 0], ["2023-02-25", 0], ["2023-02-26", 0], ["2023-02-27", 0], ["2023-02-28", 0], ["2023-03-01", 0], ["2023-03-02", 0], ["2023-03-03", 0], ["2023-03-04", 0], ["2023-03-05", 0], ["2023-03-06", 0], ["2023-03-07", 0], ["2023-03-08", 0], ["2023-03-09", 0], ["2023-03-10", 0], ["2023-03-11", 0], ["2023-03-12", 0], ["2023-03-13", 0], ["2023-03-14", 0], ["2023-03-15", 0], ["2023-03-16", 0], ["2023-03-17", 0], ["2023-03-18", 0], ["2023-03-19", 0], ["2023-03-20", 0], ["2023-03-21", 0], ["2023-03-22", 0], ["2023-03-23", 0], ["2023-03-24", 0], ["2023-03-25", 0], ["2023-03-26", 0], ["2023-03-27", 1], ["2023-03-28", 0], ["2023-03-29", 0], ["2023-03-30", 0], ["2023-03-31", 0], ["2023-04-01", 0], ["2023-04-02", 1], ["2023-04-03", 0], ["2023-04-04", 0], ["2023-04-05", 0], ["2023-04-06", 0], ["2023-04-07", 0], ["2023-04-08", 0], ["2023-04-09", 0], ["2023-04-10", 1], ["2023-04-11", 1], ["2023-04-12", 0], ["2023-04-13", 0], ["2023-04-14", 0], ["2023-04-15", 0], ["2023-04-16", 0], ["2023-04-17", 0], ["2023-04-18", 0], ["2023-04-19", 0], ["2023-04-20", 0], ["2023-04-21", 0], ["2023-04-22", 0], ["2023-04-23", 0], ["2023-04-24", 0], ["2023-04-25", 0], ["2023-04-26", 0], ["2023-04-27", 0], ["2023-04-28", 0], ["2023-04-29", 0], ["2023-04-30", 0], ["2023-05-01", 0], ["2023-05-02", 0], ["2023-05-03", 0], ["2023-05-04", 0], ["2023-05-05", 0], ["2023-05-06", 0], ["2023-05-07", 0], ["2023-05-08", 0], ["2023-05-09", 0], ["2023-05-10", 0], ["2023-05-11", 0], ["2023-05-12", 0], ["2023-05-13", 0], ["2023-05-14", 0], ["2023-05-15", 0], ["2023-05-16", 0], ["2023-05-17", 0], ["2023-05-18", 1], ["2023-05-19", 0], ["2023-05-20", 0], ["2023-05-21", 0], ["2023-05-22", 0], ["2023-05-23", 0], ["2023-05-24", 0], ["2023-05-25", 0], ["2023-05-26", 0], ["2023-05-27", 0], ["2023-05-28", 0], ["2023-05-29", 0], ["2023-05-30", 0], ["2023-05-31", 0], ["2023-06-01", 0], ["2023-06-02", 0], ["2023-06-03", 0], ["2023-06-04", 0], ["2023-06-05", 0], ["2023-06-06", 0], ["2023-06-07", 0], ["2023-06-08", 0], ["2023-06-09", 0], ["2023-06-10", 0], ["2023-06-11", 0], ["2023-06-12", 0], ["2023-06-13", 0], ["2023-06-14", 0], ["2023-06-15", 0], ["2023-06-16", 0], ["2023-06-17", 0], ["2023-06-18", 0], ["2023-06-19", 0], ["2023-06-20", 0], ["2023-06-21", 0], ["2023-06-22", 0], ["2023-06-23", 0], ["2023-06-24", 0], ["2023-06-25", 0], ["2023-06-26", 0], ["2023-06-27", 0], ["2023-06-28", 0], ["2023-06-29", 0], ["2023-06-30", 0], ["2023-07-01", 0], ["2023-07-02", 0], ["2023-07-03", 0], ["2023-07-04", 0], ["2023-07-05", 0], ["2023-07-06", 0], ["2023-07-07", 0], ["2023-07-08", 0], ["2023-07-09", 0], ["2023-07-10", 0], ["2023-07-11", 0], ["2023-07-12", 0], ["2023-07-13", 0], ["2023-07-14", 0], ["2023-07-15", 0], ["2023-07-16", 0], ["2023-07-17", 0], ["2023-07-18", 0], ["2023-07-19", 0], ["2023-07-20", 0], ["2023-07-21", 0], ["2023-07-22", 0], ["2023-07-23", 0], ["2023-07-24", 0], ["2023-07-25", 0], ["2023-07-26", 0], ["2023-07-27", 0], ["2023-07-28", 0], ["2023-07-29", 0], ["2023-07-30", 0], ["2023-07-31", 0], ["2023-08-01", 0], ["2023-08-02", 0], ["2023-08-03", 0], ["2023-08-04", 0], ["2023-08-05", 0], ["2023-08-06", 0], ["2023-08-07", 0], ["2023-08-08", 0], ["2023-08-09", 0], ["2023-08-10", 0], ["2023-08-11", 0], ["2023-08-12", 0], ["2023-08-13", 0], ["2023-08-14", 0], ["2023-08-15", 0], ["2023-08-16", 0], ["2023-08-17", 0], ["2023-08-18", 0], ["2023-08-19", 0], ["2023-08-20", 0], ["2023-08-21", 0], ["2023-08-22", 0], ["2023-08-23", 0], ["2023-08-24", 0], ["2023-08-25", 0], ["2023-08-26", 0], ["2023-08-27", 0], ["2023-08-28", 0], ["2023-08-29", 0], ["2023-08-30", 0], ["2023-08-31", 0], ["2023-09-01", 0], ["2023-09-02", 0], ["2023-09-03", 0], ["2023-09-04", 0], ["2023-09-05", 0], ["2023-09-06", 0], ["2023-09-07", 0], ["2023-09-08", 0], ["2023-09-09", 0], ["2023-09-10", 0], ["2023-09-11", 0], ["2023-09-12", 0], ["2023-09-13", 0], ["2023-09-14", 0], ["2023-09-15", 0], ["2023-09-16", 0], ["2023-09-17", 0], ["2023-09-18", 0], ["2023-09-19", 0], ["2023-09-20", 0], ["2023-09-21", 0], ["2023-09-22", 0], ["2023-09-23", 0], ["2023-09-24", 0], ["2023-09-25", 0], ["2023-09-26", 0], ["2023-09-27", 0], ["2023-09-28", 0], ["2023-09-29", 0], ["2023-09-30", 0], ["2023-10-01", 0], ["2023-10-02", 0], ["2023-10-03", 0], ["2023-10-04", 0], ["2023-10-05", 0], ["2023-10-06", 0], ["2023-10-07", 0], ["2023-10-08", 0], ["2023-10-09", 0], ["2023-10-10", 0], ["2023-10-11", 0], ["2023-10-12", 0], ["2023-10-13", 0], ["2023-10-14", 0], ["2023-10-15", 0], ["2023-10-16", 0], ["2023-10-17", 0], ["2023-10-18", 0], ["2023-10-19", 0], ["2023-10-20", 0], ["2023-10-21", 0], ["2023-10-22", 0], ["2023-10-23", 0], ["2023-10-24", 0], ["2023-10-25", 0], ["2023-10-26", 0], ["2023-10-27", 0], ["2023-10-28", 0], ["2023-10-29", 0], ["2023-10-30", 0], ["2023-10-31", 0], ["2023-11-01", 0], ["2023-11-02", 0], ["2023-11-03", 0], ["2023-11-04", 0], ["2023-11-05", 0], ["2023-11-06", 0], ["2023-11-07", 0], ["2023-11-08", 0], ["2023-11-09", 0], ["2023-11-10", 0], ["2023-11-11", 0], ["2023-11-12", 0], ["2023-11-13", 0], ["2023-11-14", 0], ["2023-11-15", 0], ["2023-11-16", 0], ["2023-11-17", 0], ["2023-11-18", 0], ["2023-11-19", 0], ["2023-11-20", 0], ["2023-11-21", 0], ["2023-11-22", 0], ["2023-11-23", 0], ["2023-11-24", 0], ["2023-11-25", 0], ["2023-11-26", 0], ["2023-11-27", 0], ["2023-11-28", 0], ["2023-11-29", 0], ["2023-11-30", 0], ["2023-12-01", 0], ["2023-12-02", 0], ["2023-12-03", 0], ["2023-12-04", 0], ["2023-12-05", 0], ["2023-12-06", 0], ["2023-12-07", 0], ["2023-12-08", 0], ["2023-12-09", 0], ["2023-12-10", 0], ["2023-12-11", 0], ["2023-12-12", 0], ["2023-12-13", 0], ["2023-12-14", 0], ["2023-12-15", 0], ["2023-12-16", 0], ["2023-12-17", 0], ["2023-12-18", 0], ["2023-12-19", 0], ["2023-12-20", 0], ["2023-12-21", 0], ["2023-12-22", 0], ["2023-12-23", 0], ["2023-12-24", 0], ["2023-12-25", 0], ["2023-12-26", 0], ["2023-12-27", 0], ["2023-12-28", 0], ["2023-12-29", 0], ["2023-12-30", 0], ["2023-12-31", 0], ["2024-01-01", 0], ["2024-01-02", 0], ["2024-01-03", 0], ["2024-01-04", 0], ["2024-01-05", 0], ["2024-01-06", 0], ["2024-01-07", 0], ["2024-01-08", 0], ["2024-01-09", 0], ["2024-01-10", 0], ["2024-01-11", 0], ["2024-01-12", 0], ["2024-01-13", 0], ["2024-01-14", 0], ["2024-01-15", 0], ["2024-01-16", 0], ["2024-01-17", 0], ["2024-01-18", 0], ["2024-01-19", 0], ["2024-01-20", 0], ["2024-01-21", 0], ["2024-01-22", 0], ["2024-01-23", 0], ["2024-01-24", 0], ["2024-01-25", 0], ["2024-01-26", 0], ["2024-01-27", 0], ["2024-01-28", 0], ["2024-01-29", 0], ["2024-01-30", 0], ["2024-01-31", 1], ["2024-02-01", 0], ["2024-02-02", 0], ["2024-02-03", 0], ["2024-02-04", 0], ["2024-02-05", 0], ["2024-02-06", 0], ["2024-02-07", 0], ["2024-02-08", 0], ["2024-02-09", 0], ["2024-02-10", 0], ["2024-02-11", 0], ["2024-02-12", 0], ["2024-02-13", 0], ["2024-02-14", 0], ["2024-02-15", 0], ["2024-02-16", 0], ["2024-02-17", 0], ["2024-02-18", 1]] }] }; @@ -491,12 +491,12 @@
- 10 + 11
@@ -584,8 +586,8 @@ - @@ -602,6 +604,8 @@ relogin + code +
@@ -647,8 +651,8 @@ - @@ -659,10 +663,14 @@ @@ -696,7 +704,7 @@
  站点总字数: 8k + class="white-color">10.3k diff --git a/archives/2023/05/index.html b/archives/2023/05/index.html index bc80502..3cdb3ce 100644 --- a/archives/2023/05/index.html +++ b/archives/2023/05/index.html @@ -430,7 +430,7 @@ }, calendar: [{ left: 'center', - range: ["2023-02-01", "2024-02-01"], + range: ["2023-02-18", "2024-02-18"], cellSize: [13, 13], splitLine: { show: false @@ -457,7 +457,7 @@ type: 'heatmap', coordinateSystem: 'calendar', calendarIndex: 0, - data: [["2023-02-01", 0], ["2023-02-02", 0], ["2023-02-03", 0], ["2023-02-04", 0], ["2023-02-05", 0], ["2023-02-06", 0], ["2023-02-07", 0], ["2023-02-08", 0], ["2023-02-09", 0], ["2023-02-10", 0], ["2023-02-11", 0], ["2023-02-12", 0], ["2023-02-13", 0], ["2023-02-14", 0], ["2023-02-15", 0], ["2023-02-16", 0], ["2023-02-17", 0], ["2023-02-18", 0], ["2023-02-19", 0], ["2023-02-20", 0], ["2023-02-21", 0], ["2023-02-22", 0], ["2023-02-23", 0], ["2023-02-24", 0], ["2023-02-25", 0], ["2023-02-26", 0], ["2023-02-27", 0], ["2023-02-28", 0], ["2023-03-01", 0], ["2023-03-02", 0], ["2023-03-03", 0], ["2023-03-04", 0], ["2023-03-05", 0], ["2023-03-06", 0], ["2023-03-07", 0], ["2023-03-08", 0], ["2023-03-09", 0], ["2023-03-10", 0], ["2023-03-11", 0], ["2023-03-12", 0], ["2023-03-13", 0], ["2023-03-14", 0], ["2023-03-15", 0], ["2023-03-16", 0], ["2023-03-17", 0], ["2023-03-18", 0], ["2023-03-19", 0], ["2023-03-20", 0], ["2023-03-21", 0], ["2023-03-22", 0], ["2023-03-23", 0], ["2023-03-24", 0], ["2023-03-25", 0], ["2023-03-26", 0], ["2023-03-27", 1], ["2023-03-28", 0], ["2023-03-29", 0], ["2023-03-30", 0], ["2023-03-31", 0], ["2023-04-01", 0], ["2023-04-02", 1], ["2023-04-03", 0], ["2023-04-04", 0], ["2023-04-05", 0], ["2023-04-06", 0], ["2023-04-07", 0], ["2023-04-08", 0], ["2023-04-09", 0], ["2023-04-10", 2], ["2023-04-11", 0], ["2023-04-12", 0], ["2023-04-13", 0], ["2023-04-14", 0], ["2023-04-15", 0], ["2023-04-16", 0], ["2023-04-17", 0], ["2023-04-18", 0], ["2023-04-19", 0], ["2023-04-20", 0], ["2023-04-21", 0], ["2023-04-22", 0], ["2023-04-23", 0], ["2023-04-24", 0], ["2023-04-25", 0], ["2023-04-26", 0], ["2023-04-27", 0], ["2023-04-28", 0], ["2023-04-29", 0], ["2023-04-30", 0], ["2023-05-01", 0], ["2023-05-02", 0], ["2023-05-03", 0], ["2023-05-04", 0], ["2023-05-05", 0], ["2023-05-06", 0], ["2023-05-07", 0], ["2023-05-08", 0], ["2023-05-09", 0], ["2023-05-10", 0], ["2023-05-11", 0], ["2023-05-12", 0], ["2023-05-13", 0], ["2023-05-14", 0], ["2023-05-15", 0], ["2023-05-16", 0], ["2023-05-17", 0], ["2023-05-18", 1], ["2023-05-19", 0], ["2023-05-20", 0], ["2023-05-21", 0], ["2023-05-22", 0], ["2023-05-23", 0], ["2023-05-24", 0], ["2023-05-25", 0], ["2023-05-26", 0], ["2023-05-27", 0], ["2023-05-28", 0], ["2023-05-29", 0], ["2023-05-30", 0], ["2023-05-31", 0], ["2023-06-01", 0], ["2023-06-02", 0], ["2023-06-03", 0], ["2023-06-04", 0], ["2023-06-05", 0], ["2023-06-06", 0], ["2023-06-07", 0], ["2023-06-08", 0], ["2023-06-09", 0], ["2023-06-10", 0], ["2023-06-11", 0], ["2023-06-12", 0], ["2023-06-13", 0], ["2023-06-14", 0], ["2023-06-15", 0], ["2023-06-16", 0], ["2023-06-17", 0], ["2023-06-18", 0], ["2023-06-19", 0], ["2023-06-20", 0], ["2023-06-21", 0], ["2023-06-22", 0], ["2023-06-23", 0], ["2023-06-24", 0], ["2023-06-25", 0], ["2023-06-26", 0], ["2023-06-27", 0], ["2023-06-28", 0], ["2023-06-29", 0], ["2023-06-30", 0], ["2023-07-01", 0], ["2023-07-02", 0], ["2023-07-03", 0], ["2023-07-04", 0], ["2023-07-05", 0], ["2023-07-06", 0], ["2023-07-07", 0], ["2023-07-08", 0], ["2023-07-09", 0], ["2023-07-10", 0], ["2023-07-11", 0], ["2023-07-12", 0], ["2023-07-13", 0], ["2023-07-14", 0], ["2023-07-15", 0], ["2023-07-16", 0], ["2023-07-17", 0], ["2023-07-18", 0], ["2023-07-19", 0], ["2023-07-20", 0], ["2023-07-21", 0], ["2023-07-22", 0], ["2023-07-23", 0], ["2023-07-24", 0], ["2023-07-25", 0], ["2023-07-26", 0], ["2023-07-27", 0], ["2023-07-28", 0], ["2023-07-29", 0], ["2023-07-30", 0], ["2023-07-31", 0], ["2023-08-01", 0], ["2023-08-02", 0], ["2023-08-03", 0], ["2023-08-04", 0], ["2023-08-05", 0], ["2023-08-06", 0], ["2023-08-07", 0], ["2023-08-08", 0], ["2023-08-09", 0], ["2023-08-10", 0], ["2023-08-11", 0], ["2023-08-12", 0], ["2023-08-13", 0], ["2023-08-14", 0], ["2023-08-15", 0], ["2023-08-16", 0], ["2023-08-17", 0], ["2023-08-18", 0], ["2023-08-19", 0], ["2023-08-20", 0], ["2023-08-21", 0], ["2023-08-22", 0], ["2023-08-23", 0], ["2023-08-24", 0], ["2023-08-25", 0], ["2023-08-26", 0], ["2023-08-27", 0], ["2023-08-28", 0], ["2023-08-29", 0], ["2023-08-30", 0], ["2023-08-31", 0], ["2023-09-01", 0], ["2023-09-02", 0], ["2023-09-03", 0], ["2023-09-04", 0], ["2023-09-05", 0], ["2023-09-06", 0], ["2023-09-07", 0], ["2023-09-08", 0], ["2023-09-09", 0], ["2023-09-10", 0], ["2023-09-11", 0], ["2023-09-12", 0], ["2023-09-13", 0], ["2023-09-14", 0], ["2023-09-15", 0], ["2023-09-16", 0], ["2023-09-17", 0], ["2023-09-18", 0], ["2023-09-19", 0], ["2023-09-20", 0], ["2023-09-21", 0], ["2023-09-22", 0], ["2023-09-23", 0], ["2023-09-24", 0], ["2023-09-25", 0], ["2023-09-26", 0], ["2023-09-27", 0], ["2023-09-28", 0], ["2023-09-29", 0], ["2023-09-30", 0], ["2023-10-01", 0], ["2023-10-02", 0], ["2023-10-03", 0], ["2023-10-04", 0], ["2023-10-05", 0], ["2023-10-06", 0], ["2023-10-07", 0], ["2023-10-08", 0], ["2023-10-09", 0], ["2023-10-10", 0], ["2023-10-11", 0], ["2023-10-12", 0], ["2023-10-13", 0], ["2023-10-14", 0], ["2023-10-15", 0], ["2023-10-16", 0], ["2023-10-17", 0], ["2023-10-18", 0], ["2023-10-19", 0], ["2023-10-20", 0], ["2023-10-21", 0], ["2023-10-22", 0], ["2023-10-23", 0], ["2023-10-24", 0], ["2023-10-25", 0], ["2023-10-26", 0], ["2023-10-27", 0], ["2023-10-28", 0], ["2023-10-29", 0], ["2023-10-30", 0], ["2023-10-31", 0], ["2023-11-01", 0], ["2023-11-02", 0], ["2023-11-03", 0], ["2023-11-04", 0], ["2023-11-05", 0], ["2023-11-06", 0], ["2023-11-07", 0], ["2023-11-08", 0], ["2023-11-09", 0], ["2023-11-10", 0], ["2023-11-11", 0], ["2023-11-12", 0], ["2023-11-13", 0], ["2023-11-14", 0], ["2023-11-15", 0], ["2023-11-16", 0], ["2023-11-17", 0], ["2023-11-18", 0], ["2023-11-19", 0], ["2023-11-20", 0], ["2023-11-21", 0], ["2023-11-22", 0], ["2023-11-23", 0], ["2023-11-24", 0], ["2023-11-25", 0], ["2023-11-26", 0], ["2023-11-27", 0], ["2023-11-28", 0], ["2023-11-29", 0], ["2023-11-30", 0], ["2023-12-01", 0], ["2023-12-02", 0], ["2023-12-03", 0], ["2023-12-04", 0], ["2023-12-05", 0], ["2023-12-06", 0], ["2023-12-07", 0], ["2023-12-08", 0], ["2023-12-09", 0], ["2023-12-10", 0], ["2023-12-11", 0], ["2023-12-12", 0], ["2023-12-13", 0], ["2023-12-14", 0], ["2023-12-15", 0], ["2023-12-16", 0], ["2023-12-17", 0], ["2023-12-18", 0], ["2023-12-19", 0], ["2023-12-20", 0], ["2023-12-21", 0], ["2023-12-22", 0], ["2023-12-23", 0], ["2023-12-24", 0], ["2023-12-25", 0], ["2023-12-26", 0], ["2023-12-27", 0], ["2023-12-28", 0], ["2023-12-29", 0], ["2023-12-30", 0], ["2023-12-31", 0], ["2024-01-01", 0], ["2024-01-02", 0], ["2024-01-03", 0], ["2024-01-04", 0], ["2024-01-05", 0], ["2024-01-06", 0], ["2024-01-07", 0], ["2024-01-08", 0], ["2024-01-09", 0], ["2024-01-10", 0], ["2024-01-11", 0], ["2024-01-12", 0], ["2024-01-13", 0], ["2024-01-14", 0], ["2024-01-15", 0], ["2024-01-16", 0], ["2024-01-17", 0], ["2024-01-18", 0], ["2024-01-19", 0], ["2024-01-20", 0], ["2024-01-21", 0], ["2024-01-22", 0], ["2024-01-23", 0], ["2024-01-24", 0], ["2024-01-25", 0], ["2024-01-26", 0], ["2024-01-27", 0], ["2024-01-28", 0], ["2024-01-29", 0], ["2024-01-30", 0], ["2024-01-31", 1], ["2024-02-01", 0]] + data: [["2023-02-18", 0], ["2023-02-19", 0], ["2023-02-20", 0], ["2023-02-21", 0], ["2023-02-22", 0], ["2023-02-23", 0], ["2023-02-24", 0], ["2023-02-25", 0], ["2023-02-26", 0], ["2023-02-27", 0], ["2023-02-28", 0], ["2023-03-01", 0], ["2023-03-02", 0], ["2023-03-03", 0], ["2023-03-04", 0], ["2023-03-05", 0], ["2023-03-06", 0], ["2023-03-07", 0], ["2023-03-08", 0], ["2023-03-09", 0], ["2023-03-10", 0], ["2023-03-11", 0], ["2023-03-12", 0], ["2023-03-13", 0], ["2023-03-14", 0], ["2023-03-15", 0], ["2023-03-16", 0], ["2023-03-17", 0], ["2023-03-18", 0], ["2023-03-19", 0], ["2023-03-20", 0], ["2023-03-21", 0], ["2023-03-22", 0], ["2023-03-23", 0], ["2023-03-24", 0], ["2023-03-25", 0], ["2023-03-26", 0], ["2023-03-27", 1], ["2023-03-28", 0], ["2023-03-29", 0], ["2023-03-30", 0], ["2023-03-31", 0], ["2023-04-01", 0], ["2023-04-02", 1], ["2023-04-03", 0], ["2023-04-04", 0], ["2023-04-05", 0], ["2023-04-06", 0], ["2023-04-07", 0], ["2023-04-08", 0], ["2023-04-09", 0], ["2023-04-10", 1], ["2023-04-11", 1], ["2023-04-12", 0], ["2023-04-13", 0], ["2023-04-14", 0], ["2023-04-15", 0], ["2023-04-16", 0], ["2023-04-17", 0], ["2023-04-18", 0], ["2023-04-19", 0], ["2023-04-20", 0], ["2023-04-21", 0], ["2023-04-22", 0], ["2023-04-23", 0], ["2023-04-24", 0], ["2023-04-25", 0], ["2023-04-26", 0], ["2023-04-27", 0], ["2023-04-28", 0], ["2023-04-29", 0], ["2023-04-30", 0], ["2023-05-01", 0], ["2023-05-02", 0], ["2023-05-03", 0], ["2023-05-04", 0], ["2023-05-05", 0], ["2023-05-06", 0], ["2023-05-07", 0], ["2023-05-08", 0], ["2023-05-09", 0], ["2023-05-10", 0], ["2023-05-11", 0], ["2023-05-12", 0], ["2023-05-13", 0], ["2023-05-14", 0], ["2023-05-15", 0], ["2023-05-16", 0], ["2023-05-17", 0], ["2023-05-18", 1], ["2023-05-19", 0], ["2023-05-20", 0], ["2023-05-21", 0], ["2023-05-22", 0], ["2023-05-23", 0], ["2023-05-24", 0], ["2023-05-25", 0], ["2023-05-26", 0], ["2023-05-27", 0], ["2023-05-28", 0], ["2023-05-29", 0], ["2023-05-30", 0], ["2023-05-31", 0], ["2023-06-01", 0], ["2023-06-02", 0], ["2023-06-03", 0], ["2023-06-04", 0], ["2023-06-05", 0], ["2023-06-06", 0], ["2023-06-07", 0], ["2023-06-08", 0], ["2023-06-09", 0], ["2023-06-10", 0], ["2023-06-11", 0], ["2023-06-12", 0], ["2023-06-13", 0], ["2023-06-14", 0], ["2023-06-15", 0], ["2023-06-16", 0], ["2023-06-17", 0], ["2023-06-18", 0], ["2023-06-19", 0], ["2023-06-20", 0], ["2023-06-21", 0], ["2023-06-22", 0], ["2023-06-23", 0], ["2023-06-24", 0], ["2023-06-25", 0], ["2023-06-26", 0], ["2023-06-27", 0], ["2023-06-28", 0], ["2023-06-29", 0], ["2023-06-30", 0], ["2023-07-01", 0], ["2023-07-02", 0], ["2023-07-03", 0], ["2023-07-04", 0], ["2023-07-05", 0], ["2023-07-06", 0], ["2023-07-07", 0], ["2023-07-08", 0], ["2023-07-09", 0], ["2023-07-10", 0], ["2023-07-11", 0], ["2023-07-12", 0], ["2023-07-13", 0], ["2023-07-14", 0], ["2023-07-15", 0], ["2023-07-16", 0], ["2023-07-17", 0], ["2023-07-18", 0], ["2023-07-19", 0], ["2023-07-20", 0], ["2023-07-21", 0], ["2023-07-22", 0], ["2023-07-23", 0], ["2023-07-24", 0], ["2023-07-25", 0], ["2023-07-26", 0], ["2023-07-27", 0], ["2023-07-28", 0], ["2023-07-29", 0], ["2023-07-30", 0], ["2023-07-31", 0], ["2023-08-01", 0], ["2023-08-02", 0], ["2023-08-03", 0], ["2023-08-04", 0], ["2023-08-05", 0], ["2023-08-06", 0], ["2023-08-07", 0], ["2023-08-08", 0], ["2023-08-09", 0], ["2023-08-10", 0], ["2023-08-11", 0], ["2023-08-12", 0], ["2023-08-13", 0], ["2023-08-14", 0], ["2023-08-15", 0], ["2023-08-16", 0], ["2023-08-17", 0], ["2023-08-18", 0], ["2023-08-19", 0], ["2023-08-20", 0], ["2023-08-21", 0], ["2023-08-22", 0], ["2023-08-23", 0], ["2023-08-24", 0], ["2023-08-25", 0], ["2023-08-26", 0], ["2023-08-27", 0], ["2023-08-28", 0], ["2023-08-29", 0], ["2023-08-30", 0], ["2023-08-31", 0], ["2023-09-01", 0], ["2023-09-02", 0], ["2023-09-03", 0], ["2023-09-04", 0], ["2023-09-05", 0], ["2023-09-06", 0], ["2023-09-07", 0], ["2023-09-08", 0], ["2023-09-09", 0], ["2023-09-10", 0], ["2023-09-11", 0], ["2023-09-12", 0], ["2023-09-13", 0], ["2023-09-14", 0], ["2023-09-15", 0], ["2023-09-16", 0], ["2023-09-17", 0], ["2023-09-18", 0], ["2023-09-19", 0], ["2023-09-20", 0], ["2023-09-21", 0], ["2023-09-22", 0], ["2023-09-23", 0], ["2023-09-24", 0], ["2023-09-25", 0], ["2023-09-26", 0], ["2023-09-27", 0], ["2023-09-28", 0], ["2023-09-29", 0], ["2023-09-30", 0], ["2023-10-01", 0], ["2023-10-02", 0], ["2023-10-03", 0], ["2023-10-04", 0], ["2023-10-05", 0], ["2023-10-06", 0], ["2023-10-07", 0], ["2023-10-08", 0], ["2023-10-09", 0], ["2023-10-10", 0], ["2023-10-11", 0], ["2023-10-12", 0], ["2023-10-13", 0], ["2023-10-14", 0], ["2023-10-15", 0], ["2023-10-16", 0], ["2023-10-17", 0], ["2023-10-18", 0], ["2023-10-19", 0], ["2023-10-20", 0], ["2023-10-21", 0], ["2023-10-22", 0], ["2023-10-23", 0], ["2023-10-24", 0], ["2023-10-25", 0], ["2023-10-26", 0], ["2023-10-27", 0], ["2023-10-28", 0], ["2023-10-29", 0], ["2023-10-30", 0], ["2023-10-31", 0], ["2023-11-01", 0], ["2023-11-02", 0], ["2023-11-03", 0], ["2023-11-04", 0], ["2023-11-05", 0], ["2023-11-06", 0], ["2023-11-07", 0], ["2023-11-08", 0], ["2023-11-09", 0], ["2023-11-10", 0], ["2023-11-11", 0], ["2023-11-12", 0], ["2023-11-13", 0], ["2023-11-14", 0], ["2023-11-15", 0], ["2023-11-16", 0], ["2023-11-17", 0], ["2023-11-18", 0], ["2023-11-19", 0], ["2023-11-20", 0], ["2023-11-21", 0], ["2023-11-22", 0], ["2023-11-23", 0], ["2023-11-24", 0], ["2023-11-25", 0], ["2023-11-26", 0], ["2023-11-27", 0], ["2023-11-28", 0], ["2023-11-29", 0], ["2023-11-30", 0], ["2023-12-01", 0], ["2023-12-02", 0], ["2023-12-03", 0], ["2023-12-04", 0], ["2023-12-05", 0], ["2023-12-06", 0], ["2023-12-07", 0], ["2023-12-08", 0], ["2023-12-09", 0], ["2023-12-10", 0], ["2023-12-11", 0], ["2023-12-12", 0], ["2023-12-13", 0], ["2023-12-14", 0], ["2023-12-15", 0], ["2023-12-16", 0], ["2023-12-17", 0], ["2023-12-18", 0], ["2023-12-19", 0], ["2023-12-20", 0], ["2023-12-21", 0], ["2023-12-22", 0], ["2023-12-23", 0], ["2023-12-24", 0], ["2023-12-25", 0], ["2023-12-26", 0], ["2023-12-27", 0], ["2023-12-28", 0], ["2023-12-29", 0], ["2023-12-30", 0], ["2023-12-31", 0], ["2024-01-01", 0], ["2024-01-02", 0], ["2024-01-03", 0], ["2024-01-04", 0], ["2024-01-05", 0], ["2024-01-06", 0], ["2024-01-07", 0], ["2024-01-08", 0], ["2024-01-09", 0], ["2024-01-10", 0], ["2024-01-11", 0], ["2024-01-12", 0], ["2024-01-13", 0], ["2024-01-14", 0], ["2024-01-15", 0], ["2024-01-16", 0], ["2024-01-17", 0], ["2024-01-18", 0], ["2024-01-19", 0], ["2024-01-20", 0], ["2024-01-21", 0], ["2024-01-22", 0], ["2024-01-23", 0], ["2024-01-24", 0], ["2024-01-25", 0], ["2024-01-26", 0], ["2024-01-27", 0], ["2024-01-28", 0], ["2024-01-29", 0], ["2024-01-30", 0], ["2024-01-31", 1], ["2024-02-01", 0], ["2024-02-02", 0], ["2024-02-03", 0], ["2024-02-04", 0], ["2024-02-05", 0], ["2024-02-06", 0], ["2024-02-07", 0], ["2024-02-08", 0], ["2024-02-09", 0], ["2024-02-10", 0], ["2024-02-11", 0], ["2024-02-12", 0], ["2024-02-13", 0], ["2024-02-14", 0], ["2024-02-15", 0], ["2024-02-16", 0], ["2024-02-17", 0], ["2024-02-18", 1]] }] }; @@ -519,8 +519,8 @@ - @@ -533,6 +533,8 @@ tools + 选型 + @@ -566,7 +568,7 @@
  站点总字数: 8k + class="white-color">10.3k diff --git a/archives/2023/index.html b/archives/2023/index.html index 401c108..854a478 100644 --- a/archives/2023/index.html +++ b/archives/2023/index.html @@ -430,7 +430,7 @@ }, calendar: [{ left: 'center', - range: ["2023-02-01", "2024-02-01"], + range: ["2023-02-18", "2024-02-18"], cellSize: [13, 13], splitLine: { show: false @@ -457,7 +457,7 @@ type: 'heatmap', coordinateSystem: 'calendar', calendarIndex: 0, - data: [["2023-02-01", 0], ["2023-02-02", 0], ["2023-02-03", 0], ["2023-02-04", 0], ["2023-02-05", 0], ["2023-02-06", 0], ["2023-02-07", 0], ["2023-02-08", 0], ["2023-02-09", 0], ["2023-02-10", 0], ["2023-02-11", 0], ["2023-02-12", 0], ["2023-02-13", 0], ["2023-02-14", 0], ["2023-02-15", 0], ["2023-02-16", 0], ["2023-02-17", 0], ["2023-02-18", 0], ["2023-02-19", 0], ["2023-02-20", 0], ["2023-02-21", 0], ["2023-02-22", 0], ["2023-02-23", 0], ["2023-02-24", 0], ["2023-02-25", 0], ["2023-02-26", 0], ["2023-02-27", 0], ["2023-02-28", 0], ["2023-03-01", 0], ["2023-03-02", 0], ["2023-03-03", 0], ["2023-03-04", 0], ["2023-03-05", 0], ["2023-03-06", 0], ["2023-03-07", 0], ["2023-03-08", 0], ["2023-03-09", 0], ["2023-03-10", 0], ["2023-03-11", 0], ["2023-03-12", 0], ["2023-03-13", 0], ["2023-03-14", 0], ["2023-03-15", 0], ["2023-03-16", 0], ["2023-03-17", 0], ["2023-03-18", 0], ["2023-03-19", 0], ["2023-03-20", 0], ["2023-03-21", 0], ["2023-03-22", 0], ["2023-03-23", 0], ["2023-03-24", 0], ["2023-03-25", 0], ["2023-03-26", 0], ["2023-03-27", 1], ["2023-03-28", 0], ["2023-03-29", 0], ["2023-03-30", 0], ["2023-03-31", 0], ["2023-04-01", 0], ["2023-04-02", 1], ["2023-04-03", 0], ["2023-04-04", 0], ["2023-04-05", 0], ["2023-04-06", 0], ["2023-04-07", 0], ["2023-04-08", 0], ["2023-04-09", 0], ["2023-04-10", 2], ["2023-04-11", 0], ["2023-04-12", 0], ["2023-04-13", 0], ["2023-04-14", 0], ["2023-04-15", 0], ["2023-04-16", 0], ["2023-04-17", 0], ["2023-04-18", 0], ["2023-04-19", 0], ["2023-04-20", 0], ["2023-04-21", 0], ["2023-04-22", 0], ["2023-04-23", 0], ["2023-04-24", 0], ["2023-04-25", 0], ["2023-04-26", 0], ["2023-04-27", 0], ["2023-04-28", 0], ["2023-04-29", 0], ["2023-04-30", 0], ["2023-05-01", 0], ["2023-05-02", 0], ["2023-05-03", 0], ["2023-05-04", 0], ["2023-05-05", 0], ["2023-05-06", 0], ["2023-05-07", 0], ["2023-05-08", 0], ["2023-05-09", 0], ["2023-05-10", 0], ["2023-05-11", 0], ["2023-05-12", 0], ["2023-05-13", 0], ["2023-05-14", 0], ["2023-05-15", 0], ["2023-05-16", 0], ["2023-05-17", 0], ["2023-05-18", 1], ["2023-05-19", 0], ["2023-05-20", 0], ["2023-05-21", 0], ["2023-05-22", 0], ["2023-05-23", 0], ["2023-05-24", 0], ["2023-05-25", 0], ["2023-05-26", 0], ["2023-05-27", 0], ["2023-05-28", 0], ["2023-05-29", 0], ["2023-05-30", 0], ["2023-05-31", 0], ["2023-06-01", 0], ["2023-06-02", 0], ["2023-06-03", 0], ["2023-06-04", 0], ["2023-06-05", 0], ["2023-06-06", 0], ["2023-06-07", 0], ["2023-06-08", 0], ["2023-06-09", 0], ["2023-06-10", 0], ["2023-06-11", 0], ["2023-06-12", 0], ["2023-06-13", 0], ["2023-06-14", 0], ["2023-06-15", 0], ["2023-06-16", 0], ["2023-06-17", 0], ["2023-06-18", 0], ["2023-06-19", 0], ["2023-06-20", 0], ["2023-06-21", 0], ["2023-06-22", 0], ["2023-06-23", 0], ["2023-06-24", 0], ["2023-06-25", 0], ["2023-06-26", 0], ["2023-06-27", 0], ["2023-06-28", 0], ["2023-06-29", 0], ["2023-06-30", 0], ["2023-07-01", 0], ["2023-07-02", 0], ["2023-07-03", 0], ["2023-07-04", 0], ["2023-07-05", 0], ["2023-07-06", 0], ["2023-07-07", 0], ["2023-07-08", 0], ["2023-07-09", 0], ["2023-07-10", 0], ["2023-07-11", 0], ["2023-07-12", 0], ["2023-07-13", 0], ["2023-07-14", 0], ["2023-07-15", 0], ["2023-07-16", 0], ["2023-07-17", 0], ["2023-07-18", 0], ["2023-07-19", 0], ["2023-07-20", 0], ["2023-07-21", 0], ["2023-07-22", 0], ["2023-07-23", 0], ["2023-07-24", 0], ["2023-07-25", 0], ["2023-07-26", 0], ["2023-07-27", 0], ["2023-07-28", 0], ["2023-07-29", 0], ["2023-07-30", 0], ["2023-07-31", 0], ["2023-08-01", 0], ["2023-08-02", 0], ["2023-08-03", 0], ["2023-08-04", 0], ["2023-08-05", 0], ["2023-08-06", 0], ["2023-08-07", 0], ["2023-08-08", 0], ["2023-08-09", 0], ["2023-08-10", 0], ["2023-08-11", 0], ["2023-08-12", 0], ["2023-08-13", 0], ["2023-08-14", 0], ["2023-08-15", 0], ["2023-08-16", 0], ["2023-08-17", 0], ["2023-08-18", 0], ["2023-08-19", 0], ["2023-08-20", 0], ["2023-08-21", 0], ["2023-08-22", 0], ["2023-08-23", 0], ["2023-08-24", 0], ["2023-08-25", 0], ["2023-08-26", 0], ["2023-08-27", 0], ["2023-08-28", 0], ["2023-08-29", 0], ["2023-08-30", 0], ["2023-08-31", 0], ["2023-09-01", 0], ["2023-09-02", 0], ["2023-09-03", 0], ["2023-09-04", 0], ["2023-09-05", 0], ["2023-09-06", 0], ["2023-09-07", 0], ["2023-09-08", 0], ["2023-09-09", 0], ["2023-09-10", 0], ["2023-09-11", 0], ["2023-09-12", 0], ["2023-09-13", 0], ["2023-09-14", 0], ["2023-09-15", 0], ["2023-09-16", 0], ["2023-09-17", 0], ["2023-09-18", 0], ["2023-09-19", 0], ["2023-09-20", 0], ["2023-09-21", 0], ["2023-09-22", 0], ["2023-09-23", 0], ["2023-09-24", 0], ["2023-09-25", 0], ["2023-09-26", 0], ["2023-09-27", 0], ["2023-09-28", 0], ["2023-09-29", 0], ["2023-09-30", 0], ["2023-10-01", 0], ["2023-10-02", 0], ["2023-10-03", 0], ["2023-10-04", 0], ["2023-10-05", 0], ["2023-10-06", 0], ["2023-10-07", 0], ["2023-10-08", 0], ["2023-10-09", 0], ["2023-10-10", 0], ["2023-10-11", 0], ["2023-10-12", 0], ["2023-10-13", 0], ["2023-10-14", 0], ["2023-10-15", 0], ["2023-10-16", 0], ["2023-10-17", 0], ["2023-10-18", 0], ["2023-10-19", 0], ["2023-10-20", 0], ["2023-10-21", 0], ["2023-10-22", 0], ["2023-10-23", 0], ["2023-10-24", 0], ["2023-10-25", 0], ["2023-10-26", 0], ["2023-10-27", 0], ["2023-10-28", 0], ["2023-10-29", 0], ["2023-10-30", 0], ["2023-10-31", 0], ["2023-11-01", 0], ["2023-11-02", 0], ["2023-11-03", 0], ["2023-11-04", 0], ["2023-11-05", 0], ["2023-11-06", 0], ["2023-11-07", 0], ["2023-11-08", 0], ["2023-11-09", 0], ["2023-11-10", 0], ["2023-11-11", 0], ["2023-11-12", 0], ["2023-11-13", 0], ["2023-11-14", 0], ["2023-11-15", 0], ["2023-11-16", 0], ["2023-11-17", 0], ["2023-11-18", 0], ["2023-11-19", 0], ["2023-11-20", 0], ["2023-11-21", 0], ["2023-11-22", 0], ["2023-11-23", 0], ["2023-11-24", 0], ["2023-11-25", 0], ["2023-11-26", 0], ["2023-11-27", 0], ["2023-11-28", 0], ["2023-11-29", 0], ["2023-11-30", 0], ["2023-12-01", 0], ["2023-12-02", 0], ["2023-12-03", 0], ["2023-12-04", 0], ["2023-12-05", 0], ["2023-12-06", 0], ["2023-12-07", 0], ["2023-12-08", 0], ["2023-12-09", 0], ["2023-12-10", 0], ["2023-12-11", 0], ["2023-12-12", 0], ["2023-12-13", 0], ["2023-12-14", 0], ["2023-12-15", 0], ["2023-12-16", 0], ["2023-12-17", 0], ["2023-12-18", 0], ["2023-12-19", 0], ["2023-12-20", 0], ["2023-12-21", 0], ["2023-12-22", 0], ["2023-12-23", 0], ["2023-12-24", 0], ["2023-12-25", 0], ["2023-12-26", 0], ["2023-12-27", 0], ["2023-12-28", 0], ["2023-12-29", 0], ["2023-12-30", 0], ["2023-12-31", 0], ["2024-01-01", 0], ["2024-01-02", 0], ["2024-01-03", 0], ["2024-01-04", 0], ["2024-01-05", 0], ["2024-01-06", 0], ["2024-01-07", 0], ["2024-01-08", 0], ["2024-01-09", 0], ["2024-01-10", 0], ["2024-01-11", 0], ["2024-01-12", 0], ["2024-01-13", 0], ["2024-01-14", 0], ["2024-01-15", 0], ["2024-01-16", 0], ["2024-01-17", 0], ["2024-01-18", 0], ["2024-01-19", 0], ["2024-01-20", 0], ["2024-01-21", 0], ["2024-01-22", 0], ["2024-01-23", 0], ["2024-01-24", 0], ["2024-01-25", 0], ["2024-01-26", 0], ["2024-01-27", 0], ["2024-01-28", 0], ["2024-01-29", 0], ["2024-01-30", 0], ["2024-01-31", 1], ["2024-02-01", 0]] + data: [["2023-02-18", 0], ["2023-02-19", 0], ["2023-02-20", 0], ["2023-02-21", 0], ["2023-02-22", 0], ["2023-02-23", 0], ["2023-02-24", 0], ["2023-02-25", 0], ["2023-02-26", 0], ["2023-02-27", 0], ["2023-02-28", 0], ["2023-03-01", 0], ["2023-03-02", 0], ["2023-03-03", 0], ["2023-03-04", 0], ["2023-03-05", 0], ["2023-03-06", 0], ["2023-03-07", 0], ["2023-03-08", 0], ["2023-03-09", 0], ["2023-03-10", 0], ["2023-03-11", 0], ["2023-03-12", 0], ["2023-03-13", 0], ["2023-03-14", 0], ["2023-03-15", 0], ["2023-03-16", 0], ["2023-03-17", 0], ["2023-03-18", 0], ["2023-03-19", 0], ["2023-03-20", 0], ["2023-03-21", 0], ["2023-03-22", 0], ["2023-03-23", 0], ["2023-03-24", 0], ["2023-03-25", 0], ["2023-03-26", 0], ["2023-03-27", 1], ["2023-03-28", 0], ["2023-03-29", 0], ["2023-03-30", 0], ["2023-03-31", 0], ["2023-04-01", 0], ["2023-04-02", 1], ["2023-04-03", 0], ["2023-04-04", 0], ["2023-04-05", 0], ["2023-04-06", 0], ["2023-04-07", 0], ["2023-04-08", 0], ["2023-04-09", 0], ["2023-04-10", 1], ["2023-04-11", 1], ["2023-04-12", 0], ["2023-04-13", 0], ["2023-04-14", 0], ["2023-04-15", 0], ["2023-04-16", 0], ["2023-04-17", 0], ["2023-04-18", 0], ["2023-04-19", 0], ["2023-04-20", 0], ["2023-04-21", 0], ["2023-04-22", 0], ["2023-04-23", 0], ["2023-04-24", 0], ["2023-04-25", 0], ["2023-04-26", 0], ["2023-04-27", 0], ["2023-04-28", 0], ["2023-04-29", 0], ["2023-04-30", 0], ["2023-05-01", 0], ["2023-05-02", 0], ["2023-05-03", 0], ["2023-05-04", 0], ["2023-05-05", 0], ["2023-05-06", 0], ["2023-05-07", 0], ["2023-05-08", 0], ["2023-05-09", 0], ["2023-05-10", 0], ["2023-05-11", 0], ["2023-05-12", 0], ["2023-05-13", 0], ["2023-05-14", 0], ["2023-05-15", 0], ["2023-05-16", 0], ["2023-05-17", 0], ["2023-05-18", 1], ["2023-05-19", 0], ["2023-05-20", 0], ["2023-05-21", 0], ["2023-05-22", 0], ["2023-05-23", 0], ["2023-05-24", 0], ["2023-05-25", 0], ["2023-05-26", 0], ["2023-05-27", 0], ["2023-05-28", 0], ["2023-05-29", 0], ["2023-05-30", 0], ["2023-05-31", 0], ["2023-06-01", 0], ["2023-06-02", 0], ["2023-06-03", 0], ["2023-06-04", 0], ["2023-06-05", 0], ["2023-06-06", 0], ["2023-06-07", 0], ["2023-06-08", 0], ["2023-06-09", 0], ["2023-06-10", 0], ["2023-06-11", 0], ["2023-06-12", 0], ["2023-06-13", 0], ["2023-06-14", 0], ["2023-06-15", 0], ["2023-06-16", 0], ["2023-06-17", 0], ["2023-06-18", 0], ["2023-06-19", 0], ["2023-06-20", 0], ["2023-06-21", 0], ["2023-06-22", 0], ["2023-06-23", 0], ["2023-06-24", 0], ["2023-06-25", 0], ["2023-06-26", 0], ["2023-06-27", 0], ["2023-06-28", 0], ["2023-06-29", 0], ["2023-06-30", 0], ["2023-07-01", 0], ["2023-07-02", 0], ["2023-07-03", 0], ["2023-07-04", 0], ["2023-07-05", 0], ["2023-07-06", 0], ["2023-07-07", 0], ["2023-07-08", 0], ["2023-07-09", 0], ["2023-07-10", 0], ["2023-07-11", 0], ["2023-07-12", 0], ["2023-07-13", 0], ["2023-07-14", 0], ["2023-07-15", 0], ["2023-07-16", 0], ["2023-07-17", 0], ["2023-07-18", 0], ["2023-07-19", 0], ["2023-07-20", 0], ["2023-07-21", 0], ["2023-07-22", 0], ["2023-07-23", 0], ["2023-07-24", 0], ["2023-07-25", 0], ["2023-07-26", 0], ["2023-07-27", 0], ["2023-07-28", 0], ["2023-07-29", 0], ["2023-07-30", 0], ["2023-07-31", 0], ["2023-08-01", 0], ["2023-08-02", 0], ["2023-08-03", 0], ["2023-08-04", 0], ["2023-08-05", 0], ["2023-08-06", 0], ["2023-08-07", 0], ["2023-08-08", 0], ["2023-08-09", 0], ["2023-08-10", 0], ["2023-08-11", 0], ["2023-08-12", 0], ["2023-08-13", 0], ["2023-08-14", 0], ["2023-08-15", 0], ["2023-08-16", 0], ["2023-08-17", 0], ["2023-08-18", 0], ["2023-08-19", 0], ["2023-08-20", 0], ["2023-08-21", 0], ["2023-08-22", 0], ["2023-08-23", 0], ["2023-08-24", 0], ["2023-08-25", 0], ["2023-08-26", 0], ["2023-08-27", 0], ["2023-08-28", 0], ["2023-08-29", 0], ["2023-08-30", 0], ["2023-08-31", 0], ["2023-09-01", 0], ["2023-09-02", 0], ["2023-09-03", 0], ["2023-09-04", 0], ["2023-09-05", 0], ["2023-09-06", 0], ["2023-09-07", 0], ["2023-09-08", 0], ["2023-09-09", 0], ["2023-09-10", 0], ["2023-09-11", 0], ["2023-09-12", 0], ["2023-09-13", 0], ["2023-09-14", 0], ["2023-09-15", 0], ["2023-09-16", 0], ["2023-09-17", 0], ["2023-09-18", 0], ["2023-09-19", 0], ["2023-09-20", 0], ["2023-09-21", 0], ["2023-09-22", 0], ["2023-09-23", 0], ["2023-09-24", 0], ["2023-09-25", 0], ["2023-09-26", 0], ["2023-09-27", 0], ["2023-09-28", 0], ["2023-09-29", 0], ["2023-09-30", 0], ["2023-10-01", 0], ["2023-10-02", 0], ["2023-10-03", 0], ["2023-10-04", 0], ["2023-10-05", 0], ["2023-10-06", 0], ["2023-10-07", 0], ["2023-10-08", 0], ["2023-10-09", 0], ["2023-10-10", 0], ["2023-10-11", 0], ["2023-10-12", 0], ["2023-10-13", 0], ["2023-10-14", 0], ["2023-10-15", 0], ["2023-10-16", 0], ["2023-10-17", 0], ["2023-10-18", 0], ["2023-10-19", 0], ["2023-10-20", 0], ["2023-10-21", 0], ["2023-10-22", 0], ["2023-10-23", 0], ["2023-10-24", 0], ["2023-10-25", 0], ["2023-10-26", 0], ["2023-10-27", 0], ["2023-10-28", 0], ["2023-10-29", 0], ["2023-10-30", 0], ["2023-10-31", 0], ["2023-11-01", 0], ["2023-11-02", 0], ["2023-11-03", 0], ["2023-11-04", 0], ["2023-11-05", 0], ["2023-11-06", 0], ["2023-11-07", 0], ["2023-11-08", 0], ["2023-11-09", 0], ["2023-11-10", 0], ["2023-11-11", 0], ["2023-11-12", 0], ["2023-11-13", 0], ["2023-11-14", 0], ["2023-11-15", 0], ["2023-11-16", 0], ["2023-11-17", 0], ["2023-11-18", 0], ["2023-11-19", 0], ["2023-11-20", 0], ["2023-11-21", 0], ["2023-11-22", 0], ["2023-11-23", 0], ["2023-11-24", 0], ["2023-11-25", 0], ["2023-11-26", 0], ["2023-11-27", 0], ["2023-11-28", 0], ["2023-11-29", 0], ["2023-11-30", 0], ["2023-12-01", 0], ["2023-12-02", 0], ["2023-12-03", 0], ["2023-12-04", 0], ["2023-12-05", 0], ["2023-12-06", 0], ["2023-12-07", 0], ["2023-12-08", 0], ["2023-12-09", 0], ["2023-12-10", 0], ["2023-12-11", 0], ["2023-12-12", 0], ["2023-12-13", 0], ["2023-12-14", 0], ["2023-12-15", 0], ["2023-12-16", 0], ["2023-12-17", 0], ["2023-12-18", 0], ["2023-12-19", 0], ["2023-12-20", 0], ["2023-12-21", 0], ["2023-12-22", 0], ["2023-12-23", 0], ["2023-12-24", 0], ["2023-12-25", 0], ["2023-12-26", 0], ["2023-12-27", 0], ["2023-12-28", 0], ["2023-12-29", 0], ["2023-12-30", 0], ["2023-12-31", 0], ["2024-01-01", 0], ["2024-01-02", 0], ["2024-01-03", 0], ["2024-01-04", 0], ["2024-01-05", 0], ["2024-01-06", 0], ["2024-01-07", 0], ["2024-01-08", 0], ["2024-01-09", 0], ["2024-01-10", 0], ["2024-01-11", 0], ["2024-01-12", 0], ["2024-01-13", 0], ["2024-01-14", 0], ["2024-01-15", 0], ["2024-01-16", 0], ["2024-01-17", 0], ["2024-01-18", 0], ["2024-01-19", 0], ["2024-01-20", 0], ["2024-01-21", 0], ["2024-01-22", 0], ["2024-01-23", 0], ["2024-01-24", 0], ["2024-01-25", 0], ["2024-01-26", 0], ["2024-01-27", 0], ["2024-01-28", 0], ["2024-01-29", 0], ["2024-01-30", 0], ["2024-01-31", 1], ["2024-02-01", 0], ["2024-02-02", 0], ["2024-02-03", 0], ["2024-02-04", 0], ["2024-02-05", 0], ["2024-02-06", 0], ["2024-02-07", 0], ["2024-02-08", 0], ["2024-02-09", 0], ["2024-02-10", 0], ["2024-02-11", 0], ["2024-02-12", 0], ["2024-02-13", 0], ["2024-02-14", 0], ["2024-02-15", 0], ["2024-02-16", 0], ["2024-02-17", 0], ["2024-02-18", 1]] }] }; @@ -519,8 +519,8 @@ - @@ -533,6 +533,8 @@ tools + 选型 + @@ -555,12 +557,12 @@
- 10 + 11
@@ -648,8 +652,8 @@ - @@ -666,6 +670,8 @@ relogin + code +
@@ -711,8 +717,8 @@ - @@ -723,10 +729,14 @@ @@ -778,8 +788,8 @@ - @@ -796,6 +806,8 @@ BFG + 杂项 + @@ -829,7 +841,7 @@
  站点总字数: 8k + class="white-color">10.3k diff --git a/archives/2024/01/index.html b/archives/2024/01/index.html index 64a9b45..8ef9c6c 100644 --- a/archives/2024/01/index.html +++ b/archives/2024/01/index.html @@ -430,7 +430,7 @@ }, calendar: [{ left: 'center', - range: ["2023-02-01", "2024-02-01"], + range: ["2023-02-18", "2024-02-18"], cellSize: [13, 13], splitLine: { show: false @@ -457,7 +457,7 @@ type: 'heatmap', coordinateSystem: 'calendar', calendarIndex: 0, - data: [["2023-02-01", 0], ["2023-02-02", 0], ["2023-02-03", 0], ["2023-02-04", 0], ["2023-02-05", 0], ["2023-02-06", 0], ["2023-02-07", 0], ["2023-02-08", 0], ["2023-02-09", 0], ["2023-02-10", 0], ["2023-02-11", 0], ["2023-02-12", 0], ["2023-02-13", 0], ["2023-02-14", 0], ["2023-02-15", 0], ["2023-02-16", 0], ["2023-02-17", 0], ["2023-02-18", 0], ["2023-02-19", 0], ["2023-02-20", 0], ["2023-02-21", 0], ["2023-02-22", 0], ["2023-02-23", 0], ["2023-02-24", 0], ["2023-02-25", 0], ["2023-02-26", 0], ["2023-02-27", 0], ["2023-02-28", 0], ["2023-03-01", 0], ["2023-03-02", 0], ["2023-03-03", 0], ["2023-03-04", 0], ["2023-03-05", 0], ["2023-03-06", 0], ["2023-03-07", 0], ["2023-03-08", 0], ["2023-03-09", 0], ["2023-03-10", 0], ["2023-03-11", 0], ["2023-03-12", 0], ["2023-03-13", 0], ["2023-03-14", 0], ["2023-03-15", 0], ["2023-03-16", 0], ["2023-03-17", 0], ["2023-03-18", 0], ["2023-03-19", 0], ["2023-03-20", 0], ["2023-03-21", 0], ["2023-03-22", 0], ["2023-03-23", 0], ["2023-03-24", 0], ["2023-03-25", 0], ["2023-03-26", 0], ["2023-03-27", 1], ["2023-03-28", 0], ["2023-03-29", 0], ["2023-03-30", 0], ["2023-03-31", 0], ["2023-04-01", 0], ["2023-04-02", 1], ["2023-04-03", 0], ["2023-04-04", 0], ["2023-04-05", 0], ["2023-04-06", 0], ["2023-04-07", 0], ["2023-04-08", 0], ["2023-04-09", 0], ["2023-04-10", 2], ["2023-04-11", 0], ["2023-04-12", 0], ["2023-04-13", 0], ["2023-04-14", 0], ["2023-04-15", 0], ["2023-04-16", 0], ["2023-04-17", 0], ["2023-04-18", 0], ["2023-04-19", 0], ["2023-04-20", 0], ["2023-04-21", 0], ["2023-04-22", 0], ["2023-04-23", 0], ["2023-04-24", 0], ["2023-04-25", 0], ["2023-04-26", 0], ["2023-04-27", 0], ["2023-04-28", 0], ["2023-04-29", 0], ["2023-04-30", 0], ["2023-05-01", 0], ["2023-05-02", 0], ["2023-05-03", 0], ["2023-05-04", 0], ["2023-05-05", 0], ["2023-05-06", 0], ["2023-05-07", 0], ["2023-05-08", 0], ["2023-05-09", 0], ["2023-05-10", 0], ["2023-05-11", 0], ["2023-05-12", 0], ["2023-05-13", 0], ["2023-05-14", 0], ["2023-05-15", 0], ["2023-05-16", 0], ["2023-05-17", 0], ["2023-05-18", 1], ["2023-05-19", 0], ["2023-05-20", 0], ["2023-05-21", 0], ["2023-05-22", 0], ["2023-05-23", 0], ["2023-05-24", 0], ["2023-05-25", 0], ["2023-05-26", 0], ["2023-05-27", 0], ["2023-05-28", 0], ["2023-05-29", 0], ["2023-05-30", 0], ["2023-05-31", 0], ["2023-06-01", 0], ["2023-06-02", 0], ["2023-06-03", 0], ["2023-06-04", 0], ["2023-06-05", 0], ["2023-06-06", 0], ["2023-06-07", 0], ["2023-06-08", 0], ["2023-06-09", 0], ["2023-06-10", 0], ["2023-06-11", 0], ["2023-06-12", 0], ["2023-06-13", 0], ["2023-06-14", 0], ["2023-06-15", 0], ["2023-06-16", 0], ["2023-06-17", 0], ["2023-06-18", 0], ["2023-06-19", 0], ["2023-06-20", 0], ["2023-06-21", 0], ["2023-06-22", 0], ["2023-06-23", 0], ["2023-06-24", 0], ["2023-06-25", 0], ["2023-06-26", 0], ["2023-06-27", 0], ["2023-06-28", 0], ["2023-06-29", 0], ["2023-06-30", 0], ["2023-07-01", 0], ["2023-07-02", 0], ["2023-07-03", 0], ["2023-07-04", 0], ["2023-07-05", 0], ["2023-07-06", 0], ["2023-07-07", 0], ["2023-07-08", 0], ["2023-07-09", 0], ["2023-07-10", 0], ["2023-07-11", 0], ["2023-07-12", 0], ["2023-07-13", 0], ["2023-07-14", 0], ["2023-07-15", 0], ["2023-07-16", 0], ["2023-07-17", 0], ["2023-07-18", 0], ["2023-07-19", 0], ["2023-07-20", 0], ["2023-07-21", 0], ["2023-07-22", 0], ["2023-07-23", 0], ["2023-07-24", 0], ["2023-07-25", 0], ["2023-07-26", 0], ["2023-07-27", 0], ["2023-07-28", 0], ["2023-07-29", 0], ["2023-07-30", 0], ["2023-07-31", 0], ["2023-08-01", 0], ["2023-08-02", 0], ["2023-08-03", 0], ["2023-08-04", 0], ["2023-08-05", 0], ["2023-08-06", 0], ["2023-08-07", 0], ["2023-08-08", 0], ["2023-08-09", 0], ["2023-08-10", 0], ["2023-08-11", 0], ["2023-08-12", 0], ["2023-08-13", 0], ["2023-08-14", 0], ["2023-08-15", 0], ["2023-08-16", 0], ["2023-08-17", 0], ["2023-08-18", 0], ["2023-08-19", 0], ["2023-08-20", 0], ["2023-08-21", 0], ["2023-08-22", 0], ["2023-08-23", 0], ["2023-08-24", 0], ["2023-08-25", 0], ["2023-08-26", 0], ["2023-08-27", 0], ["2023-08-28", 0], ["2023-08-29", 0], ["2023-08-30", 0], ["2023-08-31", 0], ["2023-09-01", 0], ["2023-09-02", 0], ["2023-09-03", 0], ["2023-09-04", 0], ["2023-09-05", 0], ["2023-09-06", 0], ["2023-09-07", 0], ["2023-09-08", 0], ["2023-09-09", 0], ["2023-09-10", 0], ["2023-09-11", 0], ["2023-09-12", 0], ["2023-09-13", 0], ["2023-09-14", 0], ["2023-09-15", 0], ["2023-09-16", 0], ["2023-09-17", 0], ["2023-09-18", 0], ["2023-09-19", 0], ["2023-09-20", 0], ["2023-09-21", 0], ["2023-09-22", 0], ["2023-09-23", 0], ["2023-09-24", 0], ["2023-09-25", 0], ["2023-09-26", 0], ["2023-09-27", 0], ["2023-09-28", 0], ["2023-09-29", 0], ["2023-09-30", 0], ["2023-10-01", 0], ["2023-10-02", 0], ["2023-10-03", 0], ["2023-10-04", 0], ["2023-10-05", 0], ["2023-10-06", 0], ["2023-10-07", 0], ["2023-10-08", 0], ["2023-10-09", 0], ["2023-10-10", 0], ["2023-10-11", 0], ["2023-10-12", 0], ["2023-10-13", 0], ["2023-10-14", 0], ["2023-10-15", 0], ["2023-10-16", 0], ["2023-10-17", 0], ["2023-10-18", 0], ["2023-10-19", 0], ["2023-10-20", 0], ["2023-10-21", 0], ["2023-10-22", 0], ["2023-10-23", 0], ["2023-10-24", 0], ["2023-10-25", 0], ["2023-10-26", 0], ["2023-10-27", 0], ["2023-10-28", 0], ["2023-10-29", 0], ["2023-10-30", 0], ["2023-10-31", 0], ["2023-11-01", 0], ["2023-11-02", 0], ["2023-11-03", 0], ["2023-11-04", 0], ["2023-11-05", 0], ["2023-11-06", 0], ["2023-11-07", 0], ["2023-11-08", 0], ["2023-11-09", 0], ["2023-11-10", 0], ["2023-11-11", 0], ["2023-11-12", 0], ["2023-11-13", 0], ["2023-11-14", 0], ["2023-11-15", 0], ["2023-11-16", 0], ["2023-11-17", 0], ["2023-11-18", 0], ["2023-11-19", 0], ["2023-11-20", 0], ["2023-11-21", 0], ["2023-11-22", 0], ["2023-11-23", 0], ["2023-11-24", 0], ["2023-11-25", 0], ["2023-11-26", 0], ["2023-11-27", 0], ["2023-11-28", 0], ["2023-11-29", 0], ["2023-11-30", 0], ["2023-12-01", 0], ["2023-12-02", 0], ["2023-12-03", 0], ["2023-12-04", 0], ["2023-12-05", 0], ["2023-12-06", 0], ["2023-12-07", 0], ["2023-12-08", 0], ["2023-12-09", 0], ["2023-12-10", 0], ["2023-12-11", 0], ["2023-12-12", 0], ["2023-12-13", 0], ["2023-12-14", 0], ["2023-12-15", 0], ["2023-12-16", 0], ["2023-12-17", 0], ["2023-12-18", 0], ["2023-12-19", 0], ["2023-12-20", 0], ["2023-12-21", 0], ["2023-12-22", 0], ["2023-12-23", 0], ["2023-12-24", 0], ["2023-12-25", 0], ["2023-12-26", 0], ["2023-12-27", 0], ["2023-12-28", 0], ["2023-12-29", 0], ["2023-12-30", 0], ["2023-12-31", 0], ["2024-01-01", 0], ["2024-01-02", 0], ["2024-01-03", 0], ["2024-01-04", 0], ["2024-01-05", 0], ["2024-01-06", 0], ["2024-01-07", 0], ["2024-01-08", 0], ["2024-01-09", 0], ["2024-01-10", 0], ["2024-01-11", 0], ["2024-01-12", 0], ["2024-01-13", 0], ["2024-01-14", 0], ["2024-01-15", 0], ["2024-01-16", 0], ["2024-01-17", 0], ["2024-01-18", 0], ["2024-01-19", 0], ["2024-01-20", 0], ["2024-01-21", 0], ["2024-01-22", 0], ["2024-01-23", 0], ["2024-01-24", 0], ["2024-01-25", 0], ["2024-01-26", 0], ["2024-01-27", 0], ["2024-01-28", 0], ["2024-01-29", 0], ["2024-01-30", 0], ["2024-01-31", 1], ["2024-02-01", 0]] + data: [["2023-02-18", 0], ["2023-02-19", 0], ["2023-02-20", 0], ["2023-02-21", 0], ["2023-02-22", 0], ["2023-02-23", 0], ["2023-02-24", 0], ["2023-02-25", 0], ["2023-02-26", 0], ["2023-02-27", 0], ["2023-02-28", 0], ["2023-03-01", 0], ["2023-03-02", 0], ["2023-03-03", 0], ["2023-03-04", 0], ["2023-03-05", 0], ["2023-03-06", 0], ["2023-03-07", 0], ["2023-03-08", 0], ["2023-03-09", 0], ["2023-03-10", 0], ["2023-03-11", 0], ["2023-03-12", 0], ["2023-03-13", 0], ["2023-03-14", 0], ["2023-03-15", 0], ["2023-03-16", 0], ["2023-03-17", 0], ["2023-03-18", 0], ["2023-03-19", 0], ["2023-03-20", 0], ["2023-03-21", 0], ["2023-03-22", 0], ["2023-03-23", 0], ["2023-03-24", 0], ["2023-03-25", 0], ["2023-03-26", 0], ["2023-03-27", 1], ["2023-03-28", 0], ["2023-03-29", 0], ["2023-03-30", 0], ["2023-03-31", 0], ["2023-04-01", 0], ["2023-04-02", 1], ["2023-04-03", 0], ["2023-04-04", 0], ["2023-04-05", 0], ["2023-04-06", 0], ["2023-04-07", 0], ["2023-04-08", 0], ["2023-04-09", 0], ["2023-04-10", 1], ["2023-04-11", 1], ["2023-04-12", 0], ["2023-04-13", 0], ["2023-04-14", 0], ["2023-04-15", 0], ["2023-04-16", 0], ["2023-04-17", 0], ["2023-04-18", 0], ["2023-04-19", 0], ["2023-04-20", 0], ["2023-04-21", 0], ["2023-04-22", 0], ["2023-04-23", 0], ["2023-04-24", 0], ["2023-04-25", 0], ["2023-04-26", 0], ["2023-04-27", 0], ["2023-04-28", 0], ["2023-04-29", 0], ["2023-04-30", 0], ["2023-05-01", 0], ["2023-05-02", 0], ["2023-05-03", 0], ["2023-05-04", 0], ["2023-05-05", 0], ["2023-05-06", 0], ["2023-05-07", 0], ["2023-05-08", 0], ["2023-05-09", 0], ["2023-05-10", 0], ["2023-05-11", 0], ["2023-05-12", 0], ["2023-05-13", 0], ["2023-05-14", 0], ["2023-05-15", 0], ["2023-05-16", 0], ["2023-05-17", 0], ["2023-05-18", 1], ["2023-05-19", 0], ["2023-05-20", 0], ["2023-05-21", 0], ["2023-05-22", 0], ["2023-05-23", 0], ["2023-05-24", 0], ["2023-05-25", 0], ["2023-05-26", 0], ["2023-05-27", 0], ["2023-05-28", 0], ["2023-05-29", 0], ["2023-05-30", 0], ["2023-05-31", 0], ["2023-06-01", 0], ["2023-06-02", 0], ["2023-06-03", 0], ["2023-06-04", 0], ["2023-06-05", 0], ["2023-06-06", 0], ["2023-06-07", 0], ["2023-06-08", 0], ["2023-06-09", 0], ["2023-06-10", 0], ["2023-06-11", 0], ["2023-06-12", 0], ["2023-06-13", 0], ["2023-06-14", 0], ["2023-06-15", 0], ["2023-06-16", 0], ["2023-06-17", 0], ["2023-06-18", 0], ["2023-06-19", 0], ["2023-06-20", 0], ["2023-06-21", 0], ["2023-06-22", 0], ["2023-06-23", 0], ["2023-06-24", 0], ["2023-06-25", 0], ["2023-06-26", 0], ["2023-06-27", 0], ["2023-06-28", 0], ["2023-06-29", 0], ["2023-06-30", 0], ["2023-07-01", 0], ["2023-07-02", 0], ["2023-07-03", 0], ["2023-07-04", 0], ["2023-07-05", 0], ["2023-07-06", 0], ["2023-07-07", 0], ["2023-07-08", 0], ["2023-07-09", 0], ["2023-07-10", 0], ["2023-07-11", 0], ["2023-07-12", 0], ["2023-07-13", 0], ["2023-07-14", 0], ["2023-07-15", 0], ["2023-07-16", 0], ["2023-07-17", 0], ["2023-07-18", 0], ["2023-07-19", 0], ["2023-07-20", 0], ["2023-07-21", 0], ["2023-07-22", 0], ["2023-07-23", 0], ["2023-07-24", 0], ["2023-07-25", 0], ["2023-07-26", 0], ["2023-07-27", 0], ["2023-07-28", 0], ["2023-07-29", 0], ["2023-07-30", 0], ["2023-07-31", 0], ["2023-08-01", 0], ["2023-08-02", 0], ["2023-08-03", 0], ["2023-08-04", 0], ["2023-08-05", 0], ["2023-08-06", 0], ["2023-08-07", 0], ["2023-08-08", 0], ["2023-08-09", 0], ["2023-08-10", 0], ["2023-08-11", 0], ["2023-08-12", 0], ["2023-08-13", 0], ["2023-08-14", 0], ["2023-08-15", 0], ["2023-08-16", 0], ["2023-08-17", 0], ["2023-08-18", 0], ["2023-08-19", 0], ["2023-08-20", 0], ["2023-08-21", 0], ["2023-08-22", 0], ["2023-08-23", 0], ["2023-08-24", 0], ["2023-08-25", 0], ["2023-08-26", 0], ["2023-08-27", 0], ["2023-08-28", 0], ["2023-08-29", 0], ["2023-08-30", 0], ["2023-08-31", 0], ["2023-09-01", 0], ["2023-09-02", 0], ["2023-09-03", 0], ["2023-09-04", 0], ["2023-09-05", 0], ["2023-09-06", 0], ["2023-09-07", 0], ["2023-09-08", 0], ["2023-09-09", 0], ["2023-09-10", 0], ["2023-09-11", 0], ["2023-09-12", 0], ["2023-09-13", 0], ["2023-09-14", 0], ["2023-09-15", 0], ["2023-09-16", 0], ["2023-09-17", 0], ["2023-09-18", 0], ["2023-09-19", 0], ["2023-09-20", 0], ["2023-09-21", 0], ["2023-09-22", 0], ["2023-09-23", 0], ["2023-09-24", 0], ["2023-09-25", 0], ["2023-09-26", 0], ["2023-09-27", 0], ["2023-09-28", 0], ["2023-09-29", 0], ["2023-09-30", 0], ["2023-10-01", 0], ["2023-10-02", 0], ["2023-10-03", 0], ["2023-10-04", 0], ["2023-10-05", 0], ["2023-10-06", 0], ["2023-10-07", 0], ["2023-10-08", 0], ["2023-10-09", 0], ["2023-10-10", 0], ["2023-10-11", 0], ["2023-10-12", 0], ["2023-10-13", 0], ["2023-10-14", 0], ["2023-10-15", 0], ["2023-10-16", 0], ["2023-10-17", 0], ["2023-10-18", 0], ["2023-10-19", 0], ["2023-10-20", 0], ["2023-10-21", 0], ["2023-10-22", 0], ["2023-10-23", 0], ["2023-10-24", 0], ["2023-10-25", 0], ["2023-10-26", 0], ["2023-10-27", 0], ["2023-10-28", 0], ["2023-10-29", 0], ["2023-10-30", 0], ["2023-10-31", 0], ["2023-11-01", 0], ["2023-11-02", 0], ["2023-11-03", 0], ["2023-11-04", 0], ["2023-11-05", 0], ["2023-11-06", 0], ["2023-11-07", 0], ["2023-11-08", 0], ["2023-11-09", 0], ["2023-11-10", 0], ["2023-11-11", 0], ["2023-11-12", 0], ["2023-11-13", 0], ["2023-11-14", 0], ["2023-11-15", 0], ["2023-11-16", 0], ["2023-11-17", 0], ["2023-11-18", 0], ["2023-11-19", 0], ["2023-11-20", 0], ["2023-11-21", 0], ["2023-11-22", 0], ["2023-11-23", 0], ["2023-11-24", 0], ["2023-11-25", 0], ["2023-11-26", 0], ["2023-11-27", 0], ["2023-11-28", 0], ["2023-11-29", 0], ["2023-11-30", 0], ["2023-12-01", 0], ["2023-12-02", 0], ["2023-12-03", 0], ["2023-12-04", 0], ["2023-12-05", 0], ["2023-12-06", 0], ["2023-12-07", 0], ["2023-12-08", 0], ["2023-12-09", 0], ["2023-12-10", 0], ["2023-12-11", 0], ["2023-12-12", 0], ["2023-12-13", 0], ["2023-12-14", 0], ["2023-12-15", 0], ["2023-12-16", 0], ["2023-12-17", 0], ["2023-12-18", 0], ["2023-12-19", 0], ["2023-12-20", 0], ["2023-12-21", 0], ["2023-12-22", 0], ["2023-12-23", 0], ["2023-12-24", 0], ["2023-12-25", 0], ["2023-12-26", 0], ["2023-12-27", 0], ["2023-12-28", 0], ["2023-12-29", 0], ["2023-12-30", 0], ["2023-12-31", 0], ["2024-01-01", 0], ["2024-01-02", 0], ["2024-01-03", 0], ["2024-01-04", 0], ["2024-01-05", 0], ["2024-01-06", 0], ["2024-01-07", 0], ["2024-01-08", 0], ["2024-01-09", 0], ["2024-01-10", 0], ["2024-01-11", 0], ["2024-01-12", 0], ["2024-01-13", 0], ["2024-01-14", 0], ["2024-01-15", 0], ["2024-01-16", 0], ["2024-01-17", 0], ["2024-01-18", 0], ["2024-01-19", 0], ["2024-01-20", 0], ["2024-01-21", 0], ["2024-01-22", 0], ["2024-01-23", 0], ["2024-01-24", 0], ["2024-01-25", 0], ["2024-01-26", 0], ["2024-01-27", 0], ["2024-01-28", 0], ["2024-01-29", 0], ["2024-01-30", 0], ["2024-01-31", 1], ["2024-02-01", 0], ["2024-02-02", 0], ["2024-02-03", 0], ["2024-02-04", 0], ["2024-02-05", 0], ["2024-02-06", 0], ["2024-02-07", 0], ["2024-02-08", 0], ["2024-02-09", 0], ["2024-02-10", 0], ["2024-02-11", 0], ["2024-02-12", 0], ["2024-02-13", 0], ["2024-02-14", 0], ["2024-02-15", 0], ["2024-02-16", 0], ["2024-02-17", 0], ["2024-02-18", 1]] }] }; @@ -523,8 +523,8 @@ - @@ -539,6 +539,8 @@ redis + code + @@ -572,7 +574,7 @@
  站点总字数: 8k + class="white-color">10.3k diff --git a/archives/2024/02/index.html b/archives/2024/02/index.html new file mode 100644 index 0000000..1d5f8e2 --- /dev/null +++ b/archives/2024/02/index.html @@ -0,0 +1,851 @@ + + + + + + + + + + + + + + + + + + + + 归档: 2024/2 | beluga + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+ + 白鲸 + +
+ +
+ + + + + +
+
+
+
+ + + + + +
+
+ +
+ + +
+
+
+
+
+ + + + + + + + +
+ +
+ + + + +
+ 2024 +
+ + + + + +
+ 02 +
+ + + +
+ 18 +
+
+
+
+ +
+ + + 怎么实现 mybatis 自动设置创建时间更新时间 + + 怎么实现 mybatis 自动设置创建时间更新时间 +
+
+
+
+ + 怎么实现 mybatis 自动设置创建时间更新时间🔍 相对流行方案弊端mybatis 提供 Interceptor 接口以插件方式提供扩展能力。互联网上大都是对数据表映射类对象中关于时间属性设置当前时间的解决方案。但这种方法无法解决 ma + +
+
+ + 2024-02-18 + + + + + + + + + +
+
+ + + + +
+
+
+
+ +
+ +
+ + + + +
+ + +
+
+ Copyright © + + 2019-2024 + + beluga + | Powered by Hexo + | Theme Matery + + | 繁/简: + +
+ +   站点总字数: 10.3k + + + + + + + +  |  总访问量:  + + + + + +  |  总访问人数:  + + + +
+ + + +
+ +
+ +
+
+ +
+ + + + + + + + +
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/archives/2024/index.html b/archives/2024/index.html index 06b4b54..a364fe0 100644 --- a/archives/2024/index.html +++ b/archives/2024/index.html @@ -430,7 +430,7 @@ }, calendar: [{ left: 'center', - range: ["2023-02-01", "2024-02-01"], + range: ["2023-02-18", "2024-02-18"], cellSize: [13, 13], splitLine: { show: false @@ -457,7 +457,7 @@ type: 'heatmap', coordinateSystem: 'calendar', calendarIndex: 0, - data: [["2023-02-01", 0], ["2023-02-02", 0], ["2023-02-03", 0], ["2023-02-04", 0], ["2023-02-05", 0], ["2023-02-06", 0], ["2023-02-07", 0], ["2023-02-08", 0], ["2023-02-09", 0], ["2023-02-10", 0], ["2023-02-11", 0], ["2023-02-12", 0], ["2023-02-13", 0], ["2023-02-14", 0], ["2023-02-15", 0], ["2023-02-16", 0], ["2023-02-17", 0], ["2023-02-18", 0], ["2023-02-19", 0], ["2023-02-20", 0], ["2023-02-21", 0], ["2023-02-22", 0], ["2023-02-23", 0], ["2023-02-24", 0], ["2023-02-25", 0], ["2023-02-26", 0], ["2023-02-27", 0], ["2023-02-28", 0], ["2023-03-01", 0], ["2023-03-02", 0], ["2023-03-03", 0], ["2023-03-04", 0], ["2023-03-05", 0], ["2023-03-06", 0], ["2023-03-07", 0], ["2023-03-08", 0], ["2023-03-09", 0], ["2023-03-10", 0], ["2023-03-11", 0], ["2023-03-12", 0], ["2023-03-13", 0], ["2023-03-14", 0], ["2023-03-15", 0], ["2023-03-16", 0], ["2023-03-17", 0], ["2023-03-18", 0], ["2023-03-19", 0], ["2023-03-20", 0], ["2023-03-21", 0], ["2023-03-22", 0], ["2023-03-23", 0], ["2023-03-24", 0], ["2023-03-25", 0], ["2023-03-26", 0], ["2023-03-27", 1], ["2023-03-28", 0], ["2023-03-29", 0], ["2023-03-30", 0], ["2023-03-31", 0], ["2023-04-01", 0], ["2023-04-02", 1], ["2023-04-03", 0], ["2023-04-04", 0], ["2023-04-05", 0], ["2023-04-06", 0], ["2023-04-07", 0], ["2023-04-08", 0], ["2023-04-09", 0], ["2023-04-10", 2], ["2023-04-11", 0], ["2023-04-12", 0], ["2023-04-13", 0], ["2023-04-14", 0], ["2023-04-15", 0], ["2023-04-16", 0], ["2023-04-17", 0], ["2023-04-18", 0], ["2023-04-19", 0], ["2023-04-20", 0], ["2023-04-21", 0], ["2023-04-22", 0], ["2023-04-23", 0], ["2023-04-24", 0], ["2023-04-25", 0], ["2023-04-26", 0], ["2023-04-27", 0], ["2023-04-28", 0], ["2023-04-29", 0], ["2023-04-30", 0], ["2023-05-01", 0], ["2023-05-02", 0], ["2023-05-03", 0], ["2023-05-04", 0], ["2023-05-05", 0], ["2023-05-06", 0], ["2023-05-07", 0], ["2023-05-08", 0], ["2023-05-09", 0], ["2023-05-10", 0], ["2023-05-11", 0], ["2023-05-12", 0], ["2023-05-13", 0], ["2023-05-14", 0], ["2023-05-15", 0], ["2023-05-16", 0], ["2023-05-17", 0], ["2023-05-18", 1], ["2023-05-19", 0], ["2023-05-20", 0], ["2023-05-21", 0], ["2023-05-22", 0], ["2023-05-23", 0], ["2023-05-24", 0], ["2023-05-25", 0], ["2023-05-26", 0], ["2023-05-27", 0], ["2023-05-28", 0], ["2023-05-29", 0], ["2023-05-30", 0], ["2023-05-31", 0], ["2023-06-01", 0], ["2023-06-02", 0], ["2023-06-03", 0], ["2023-06-04", 0], ["2023-06-05", 0], ["2023-06-06", 0], ["2023-06-07", 0], ["2023-06-08", 0], ["2023-06-09", 0], ["2023-06-10", 0], ["2023-06-11", 0], ["2023-06-12", 0], ["2023-06-13", 0], ["2023-06-14", 0], ["2023-06-15", 0], ["2023-06-16", 0], ["2023-06-17", 0], ["2023-06-18", 0], ["2023-06-19", 0], ["2023-06-20", 0], ["2023-06-21", 0], ["2023-06-22", 0], ["2023-06-23", 0], ["2023-06-24", 0], ["2023-06-25", 0], ["2023-06-26", 0], ["2023-06-27", 0], ["2023-06-28", 0], ["2023-06-29", 0], ["2023-06-30", 0], ["2023-07-01", 0], ["2023-07-02", 0], ["2023-07-03", 0], ["2023-07-04", 0], ["2023-07-05", 0], ["2023-07-06", 0], ["2023-07-07", 0], ["2023-07-08", 0], ["2023-07-09", 0], ["2023-07-10", 0], ["2023-07-11", 0], ["2023-07-12", 0], ["2023-07-13", 0], ["2023-07-14", 0], ["2023-07-15", 0], ["2023-07-16", 0], ["2023-07-17", 0], ["2023-07-18", 0], ["2023-07-19", 0], ["2023-07-20", 0], ["2023-07-21", 0], ["2023-07-22", 0], ["2023-07-23", 0], ["2023-07-24", 0], ["2023-07-25", 0], ["2023-07-26", 0], ["2023-07-27", 0], ["2023-07-28", 0], ["2023-07-29", 0], ["2023-07-30", 0], ["2023-07-31", 0], ["2023-08-01", 0], ["2023-08-02", 0], ["2023-08-03", 0], ["2023-08-04", 0], ["2023-08-05", 0], ["2023-08-06", 0], ["2023-08-07", 0], ["2023-08-08", 0], ["2023-08-09", 0], ["2023-08-10", 0], ["2023-08-11", 0], ["2023-08-12", 0], ["2023-08-13", 0], ["2023-08-14", 0], ["2023-08-15", 0], ["2023-08-16", 0], ["2023-08-17", 0], ["2023-08-18", 0], ["2023-08-19", 0], ["2023-08-20", 0], ["2023-08-21", 0], ["2023-08-22", 0], ["2023-08-23", 0], ["2023-08-24", 0], ["2023-08-25", 0], ["2023-08-26", 0], ["2023-08-27", 0], ["2023-08-28", 0], ["2023-08-29", 0], ["2023-08-30", 0], ["2023-08-31", 0], ["2023-09-01", 0], ["2023-09-02", 0], ["2023-09-03", 0], ["2023-09-04", 0], ["2023-09-05", 0], ["2023-09-06", 0], ["2023-09-07", 0], ["2023-09-08", 0], ["2023-09-09", 0], ["2023-09-10", 0], ["2023-09-11", 0], ["2023-09-12", 0], ["2023-09-13", 0], ["2023-09-14", 0], ["2023-09-15", 0], ["2023-09-16", 0], ["2023-09-17", 0], ["2023-09-18", 0], ["2023-09-19", 0], ["2023-09-20", 0], ["2023-09-21", 0], ["2023-09-22", 0], ["2023-09-23", 0], ["2023-09-24", 0], ["2023-09-25", 0], ["2023-09-26", 0], ["2023-09-27", 0], ["2023-09-28", 0], ["2023-09-29", 0], ["2023-09-30", 0], ["2023-10-01", 0], ["2023-10-02", 0], ["2023-10-03", 0], ["2023-10-04", 0], ["2023-10-05", 0], ["2023-10-06", 0], ["2023-10-07", 0], ["2023-10-08", 0], ["2023-10-09", 0], ["2023-10-10", 0], ["2023-10-11", 0], ["2023-10-12", 0], ["2023-10-13", 0], ["2023-10-14", 0], ["2023-10-15", 0], ["2023-10-16", 0], ["2023-10-17", 0], ["2023-10-18", 0], ["2023-10-19", 0], ["2023-10-20", 0], ["2023-10-21", 0], ["2023-10-22", 0], ["2023-10-23", 0], ["2023-10-24", 0], ["2023-10-25", 0], ["2023-10-26", 0], ["2023-10-27", 0], ["2023-10-28", 0], ["2023-10-29", 0], ["2023-10-30", 0], ["2023-10-31", 0], ["2023-11-01", 0], ["2023-11-02", 0], ["2023-11-03", 0], ["2023-11-04", 0], ["2023-11-05", 0], ["2023-11-06", 0], ["2023-11-07", 0], ["2023-11-08", 0], ["2023-11-09", 0], ["2023-11-10", 0], ["2023-11-11", 0], ["2023-11-12", 0], ["2023-11-13", 0], ["2023-11-14", 0], ["2023-11-15", 0], ["2023-11-16", 0], ["2023-11-17", 0], ["2023-11-18", 0], ["2023-11-19", 0], ["2023-11-20", 0], ["2023-11-21", 0], ["2023-11-22", 0], ["2023-11-23", 0], ["2023-11-24", 0], ["2023-11-25", 0], ["2023-11-26", 0], ["2023-11-27", 0], ["2023-11-28", 0], ["2023-11-29", 0], ["2023-11-30", 0], ["2023-12-01", 0], ["2023-12-02", 0], ["2023-12-03", 0], ["2023-12-04", 0], ["2023-12-05", 0], ["2023-12-06", 0], ["2023-12-07", 0], ["2023-12-08", 0], ["2023-12-09", 0], ["2023-12-10", 0], ["2023-12-11", 0], ["2023-12-12", 0], ["2023-12-13", 0], ["2023-12-14", 0], ["2023-12-15", 0], ["2023-12-16", 0], ["2023-12-17", 0], ["2023-12-18", 0], ["2023-12-19", 0], ["2023-12-20", 0], ["2023-12-21", 0], ["2023-12-22", 0], ["2023-12-23", 0], ["2023-12-24", 0], ["2023-12-25", 0], ["2023-12-26", 0], ["2023-12-27", 0], ["2023-12-28", 0], ["2023-12-29", 0], ["2023-12-30", 0], ["2023-12-31", 0], ["2024-01-01", 0], ["2024-01-02", 0], ["2024-01-03", 0], ["2024-01-04", 0], ["2024-01-05", 0], ["2024-01-06", 0], ["2024-01-07", 0], ["2024-01-08", 0], ["2024-01-09", 0], ["2024-01-10", 0], ["2024-01-11", 0], ["2024-01-12", 0], ["2024-01-13", 0], ["2024-01-14", 0], ["2024-01-15", 0], ["2024-01-16", 0], ["2024-01-17", 0], ["2024-01-18", 0], ["2024-01-19", 0], ["2024-01-20", 0], ["2024-01-21", 0], ["2024-01-22", 0], ["2024-01-23", 0], ["2024-01-24", 0], ["2024-01-25", 0], ["2024-01-26", 0], ["2024-01-27", 0], ["2024-01-28", 0], ["2024-01-29", 0], ["2024-01-30", 0], ["2024-01-31", 1], ["2024-02-01", 0]] + data: [["2023-02-18", 0], ["2023-02-19", 0], ["2023-02-20", 0], ["2023-02-21", 0], ["2023-02-22", 0], ["2023-02-23", 0], ["2023-02-24", 0], ["2023-02-25", 0], ["2023-02-26", 0], ["2023-02-27", 0], ["2023-02-28", 0], ["2023-03-01", 0], ["2023-03-02", 0], ["2023-03-03", 0], ["2023-03-04", 0], ["2023-03-05", 0], ["2023-03-06", 0], ["2023-03-07", 0], ["2023-03-08", 0], ["2023-03-09", 0], ["2023-03-10", 0], ["2023-03-11", 0], ["2023-03-12", 0], ["2023-03-13", 0], ["2023-03-14", 0], ["2023-03-15", 0], ["2023-03-16", 0], ["2023-03-17", 0], ["2023-03-18", 0], ["2023-03-19", 0], ["2023-03-20", 0], ["2023-03-21", 0], ["2023-03-22", 0], ["2023-03-23", 0], ["2023-03-24", 0], ["2023-03-25", 0], ["2023-03-26", 0], ["2023-03-27", 1], ["2023-03-28", 0], ["2023-03-29", 0], ["2023-03-30", 0], ["2023-03-31", 0], ["2023-04-01", 0], ["2023-04-02", 1], ["2023-04-03", 0], ["2023-04-04", 0], ["2023-04-05", 0], ["2023-04-06", 0], ["2023-04-07", 0], ["2023-04-08", 0], ["2023-04-09", 0], ["2023-04-10", 1], ["2023-04-11", 1], ["2023-04-12", 0], ["2023-04-13", 0], ["2023-04-14", 0], ["2023-04-15", 0], ["2023-04-16", 0], ["2023-04-17", 0], ["2023-04-18", 0], ["2023-04-19", 0], ["2023-04-20", 0], ["2023-04-21", 0], ["2023-04-22", 0], ["2023-04-23", 0], ["2023-04-24", 0], ["2023-04-25", 0], ["2023-04-26", 0], ["2023-04-27", 0], ["2023-04-28", 0], ["2023-04-29", 0], ["2023-04-30", 0], ["2023-05-01", 0], ["2023-05-02", 0], ["2023-05-03", 0], ["2023-05-04", 0], ["2023-05-05", 0], ["2023-05-06", 0], ["2023-05-07", 0], ["2023-05-08", 0], ["2023-05-09", 0], ["2023-05-10", 0], ["2023-05-11", 0], ["2023-05-12", 0], ["2023-05-13", 0], ["2023-05-14", 0], ["2023-05-15", 0], ["2023-05-16", 0], ["2023-05-17", 0], ["2023-05-18", 1], ["2023-05-19", 0], ["2023-05-20", 0], ["2023-05-21", 0], ["2023-05-22", 0], ["2023-05-23", 0], ["2023-05-24", 0], ["2023-05-25", 0], ["2023-05-26", 0], ["2023-05-27", 0], ["2023-05-28", 0], ["2023-05-29", 0], ["2023-05-30", 0], ["2023-05-31", 0], ["2023-06-01", 0], ["2023-06-02", 0], ["2023-06-03", 0], ["2023-06-04", 0], ["2023-06-05", 0], ["2023-06-06", 0], ["2023-06-07", 0], ["2023-06-08", 0], ["2023-06-09", 0], ["2023-06-10", 0], ["2023-06-11", 0], ["2023-06-12", 0], ["2023-06-13", 0], ["2023-06-14", 0], ["2023-06-15", 0], ["2023-06-16", 0], ["2023-06-17", 0], ["2023-06-18", 0], ["2023-06-19", 0], ["2023-06-20", 0], ["2023-06-21", 0], ["2023-06-22", 0], ["2023-06-23", 0], ["2023-06-24", 0], ["2023-06-25", 0], ["2023-06-26", 0], ["2023-06-27", 0], ["2023-06-28", 0], ["2023-06-29", 0], ["2023-06-30", 0], ["2023-07-01", 0], ["2023-07-02", 0], ["2023-07-03", 0], ["2023-07-04", 0], ["2023-07-05", 0], ["2023-07-06", 0], ["2023-07-07", 0], ["2023-07-08", 0], ["2023-07-09", 0], ["2023-07-10", 0], ["2023-07-11", 0], ["2023-07-12", 0], ["2023-07-13", 0], ["2023-07-14", 0], ["2023-07-15", 0], ["2023-07-16", 0], ["2023-07-17", 0], ["2023-07-18", 0], ["2023-07-19", 0], ["2023-07-20", 0], ["2023-07-21", 0], ["2023-07-22", 0], ["2023-07-23", 0], ["2023-07-24", 0], ["2023-07-25", 0], ["2023-07-26", 0], ["2023-07-27", 0], ["2023-07-28", 0], ["2023-07-29", 0], ["2023-07-30", 0], ["2023-07-31", 0], ["2023-08-01", 0], ["2023-08-02", 0], ["2023-08-03", 0], ["2023-08-04", 0], ["2023-08-05", 0], ["2023-08-06", 0], ["2023-08-07", 0], ["2023-08-08", 0], ["2023-08-09", 0], ["2023-08-10", 0], ["2023-08-11", 0], ["2023-08-12", 0], ["2023-08-13", 0], ["2023-08-14", 0], ["2023-08-15", 0], ["2023-08-16", 0], ["2023-08-17", 0], ["2023-08-18", 0], ["2023-08-19", 0], ["2023-08-20", 0], ["2023-08-21", 0], ["2023-08-22", 0], ["2023-08-23", 0], ["2023-08-24", 0], ["2023-08-25", 0], ["2023-08-26", 0], ["2023-08-27", 0], ["2023-08-28", 0], ["2023-08-29", 0], ["2023-08-30", 0], ["2023-08-31", 0], ["2023-09-01", 0], ["2023-09-02", 0], ["2023-09-03", 0], ["2023-09-04", 0], ["2023-09-05", 0], ["2023-09-06", 0], ["2023-09-07", 0], ["2023-09-08", 0], ["2023-09-09", 0], ["2023-09-10", 0], ["2023-09-11", 0], ["2023-09-12", 0], ["2023-09-13", 0], ["2023-09-14", 0], ["2023-09-15", 0], ["2023-09-16", 0], ["2023-09-17", 0], ["2023-09-18", 0], ["2023-09-19", 0], ["2023-09-20", 0], ["2023-09-21", 0], ["2023-09-22", 0], ["2023-09-23", 0], ["2023-09-24", 0], ["2023-09-25", 0], ["2023-09-26", 0], ["2023-09-27", 0], ["2023-09-28", 0], ["2023-09-29", 0], ["2023-09-30", 0], ["2023-10-01", 0], ["2023-10-02", 0], ["2023-10-03", 0], ["2023-10-04", 0], ["2023-10-05", 0], ["2023-10-06", 0], ["2023-10-07", 0], ["2023-10-08", 0], ["2023-10-09", 0], ["2023-10-10", 0], ["2023-10-11", 0], ["2023-10-12", 0], ["2023-10-13", 0], ["2023-10-14", 0], ["2023-10-15", 0], ["2023-10-16", 0], ["2023-10-17", 0], ["2023-10-18", 0], ["2023-10-19", 0], ["2023-10-20", 0], ["2023-10-21", 0], ["2023-10-22", 0], ["2023-10-23", 0], ["2023-10-24", 0], ["2023-10-25", 0], ["2023-10-26", 0], ["2023-10-27", 0], ["2023-10-28", 0], ["2023-10-29", 0], ["2023-10-30", 0], ["2023-10-31", 0], ["2023-11-01", 0], ["2023-11-02", 0], ["2023-11-03", 0], ["2023-11-04", 0], ["2023-11-05", 0], ["2023-11-06", 0], ["2023-11-07", 0], ["2023-11-08", 0], ["2023-11-09", 0], ["2023-11-10", 0], ["2023-11-11", 0], ["2023-11-12", 0], ["2023-11-13", 0], ["2023-11-14", 0], ["2023-11-15", 0], ["2023-11-16", 0], ["2023-11-17", 0], ["2023-11-18", 0], ["2023-11-19", 0], ["2023-11-20", 0], ["2023-11-21", 0], ["2023-11-22", 0], ["2023-11-23", 0], ["2023-11-24", 0], ["2023-11-25", 0], ["2023-11-26", 0], ["2023-11-27", 0], ["2023-11-28", 0], ["2023-11-29", 0], ["2023-11-30", 0], ["2023-12-01", 0], ["2023-12-02", 0], ["2023-12-03", 0], ["2023-12-04", 0], ["2023-12-05", 0], ["2023-12-06", 0], ["2023-12-07", 0], ["2023-12-08", 0], ["2023-12-09", 0], ["2023-12-10", 0], ["2023-12-11", 0], ["2023-12-12", 0], ["2023-12-13", 0], ["2023-12-14", 0], ["2023-12-15", 0], ["2023-12-16", 0], ["2023-12-17", 0], ["2023-12-18", 0], ["2023-12-19", 0], ["2023-12-20", 0], ["2023-12-21", 0], ["2023-12-22", 0], ["2023-12-23", 0], ["2023-12-24", 0], ["2023-12-25", 0], ["2023-12-26", 0], ["2023-12-27", 0], ["2023-12-28", 0], ["2023-12-29", 0], ["2023-12-30", 0], ["2023-12-31", 0], ["2024-01-01", 0], ["2024-01-02", 0], ["2024-01-03", 0], ["2024-01-04", 0], ["2024-01-05", 0], ["2024-01-06", 0], ["2024-01-07", 0], ["2024-01-08", 0], ["2024-01-09", 0], ["2024-01-10", 0], ["2024-01-11", 0], ["2024-01-12", 0], ["2024-01-13", 0], ["2024-01-14", 0], ["2024-01-15", 0], ["2024-01-16", 0], ["2024-01-17", 0], ["2024-01-18", 0], ["2024-01-19", 0], ["2024-01-20", 0], ["2024-01-21", 0], ["2024-01-22", 0], ["2024-01-23", 0], ["2024-01-24", 0], ["2024-01-25", 0], ["2024-01-26", 0], ["2024-01-27", 0], ["2024-01-28", 0], ["2024-01-29", 0], ["2024-01-30", 0], ["2024-01-31", 1], ["2024-02-01", 0], ["2024-02-02", 0], ["2024-02-03", 0], ["2024-02-04", 0], ["2024-02-05", 0], ["2024-02-06", 0], ["2024-02-07", 0], ["2024-02-08", 0], ["2024-02-09", 0], ["2024-02-10", 0], ["2024-02-11", 0], ["2024-02-12", 0], ["2024-02-13", 0], ["2024-02-14", 0], ["2024-02-15", 0], ["2024-02-16", 0], ["2024-02-17", 0], ["2024-02-18", 1]] }] }; @@ -484,6 +484,76 @@ +
+ 02 +
+ + + +
+ 18 +
+
+
+
+ +
+ + + 怎么实现 mybatis 自动设置创建时间更新时间 + + 怎么实现 mybatis 自动设置创建时间更新时间 +
+
+
+
+ + 怎么实现 mybatis 自动设置创建时间更新时间🔍 相对流行方案弊端mybatis 提供 Interceptor 接口以插件方式提供扩展能力。互联网上大都是对数据表映射类对象中关于时间属性设置当前时间的解决方案。但这种方法无法解决 ma + +
+
+ + 2024-02-18 + + + + + + + + + +
+
+ + + + +
+
+
+ + +
+ + + + + + +
01
@@ -523,8 +593,8 @@ - @@ -539,6 +609,8 @@ redis + code +
@@ -572,7 +644,7 @@
  站点总字数: 8k + class="white-color">10.3k diff --git a/archives/index.html b/archives/index.html index d6e7666..f9bae23 100644 --- a/archives/index.html +++ b/archives/index.html @@ -430,7 +430,7 @@ }, calendar: [{ left: 'center', - range: ["2023-02-01", "2024-02-01"], + range: ["2023-02-18", "2024-02-18"], cellSize: [13, 13], splitLine: { show: false @@ -457,7 +457,7 @@ type: 'heatmap', coordinateSystem: 'calendar', calendarIndex: 0, - data: [["2023-02-01", 0], ["2023-02-02", 0], ["2023-02-03", 0], ["2023-02-04", 0], ["2023-02-05", 0], ["2023-02-06", 0], ["2023-02-07", 0], ["2023-02-08", 0], ["2023-02-09", 0], ["2023-02-10", 0], ["2023-02-11", 0], ["2023-02-12", 0], ["2023-02-13", 0], ["2023-02-14", 0], ["2023-02-15", 0], ["2023-02-16", 0], ["2023-02-17", 0], ["2023-02-18", 0], ["2023-02-19", 0], ["2023-02-20", 0], ["2023-02-21", 0], ["2023-02-22", 0], ["2023-02-23", 0], ["2023-02-24", 0], ["2023-02-25", 0], ["2023-02-26", 0], ["2023-02-27", 0], ["2023-02-28", 0], ["2023-03-01", 0], ["2023-03-02", 0], ["2023-03-03", 0], ["2023-03-04", 0], ["2023-03-05", 0], ["2023-03-06", 0], ["2023-03-07", 0], ["2023-03-08", 0], ["2023-03-09", 0], ["2023-03-10", 0], ["2023-03-11", 0], ["2023-03-12", 0], ["2023-03-13", 0], ["2023-03-14", 0], ["2023-03-15", 0], ["2023-03-16", 0], ["2023-03-17", 0], ["2023-03-18", 0], ["2023-03-19", 0], ["2023-03-20", 0], ["2023-03-21", 0], ["2023-03-22", 0], ["2023-03-23", 0], ["2023-03-24", 0], ["2023-03-25", 0], ["2023-03-26", 0], ["2023-03-27", 1], ["2023-03-28", 0], ["2023-03-29", 0], ["2023-03-30", 0], ["2023-03-31", 0], ["2023-04-01", 0], ["2023-04-02", 1], ["2023-04-03", 0], ["2023-04-04", 0], ["2023-04-05", 0], ["2023-04-06", 0], ["2023-04-07", 0], ["2023-04-08", 0], ["2023-04-09", 0], ["2023-04-10", 2], ["2023-04-11", 0], ["2023-04-12", 0], ["2023-04-13", 0], ["2023-04-14", 0], ["2023-04-15", 0], ["2023-04-16", 0], ["2023-04-17", 0], ["2023-04-18", 0], ["2023-04-19", 0], ["2023-04-20", 0], ["2023-04-21", 0], ["2023-04-22", 0], ["2023-04-23", 0], ["2023-04-24", 0], ["2023-04-25", 0], ["2023-04-26", 0], ["2023-04-27", 0], ["2023-04-28", 0], ["2023-04-29", 0], ["2023-04-30", 0], ["2023-05-01", 0], ["2023-05-02", 0], ["2023-05-03", 0], ["2023-05-04", 0], ["2023-05-05", 0], ["2023-05-06", 0], ["2023-05-07", 0], ["2023-05-08", 0], ["2023-05-09", 0], ["2023-05-10", 0], ["2023-05-11", 0], ["2023-05-12", 0], ["2023-05-13", 0], ["2023-05-14", 0], ["2023-05-15", 0], ["2023-05-16", 0], ["2023-05-17", 0], ["2023-05-18", 1], ["2023-05-19", 0], ["2023-05-20", 0], ["2023-05-21", 0], ["2023-05-22", 0], ["2023-05-23", 0], ["2023-05-24", 0], ["2023-05-25", 0], ["2023-05-26", 0], ["2023-05-27", 0], ["2023-05-28", 0], ["2023-05-29", 0], ["2023-05-30", 0], ["2023-05-31", 0], ["2023-06-01", 0], ["2023-06-02", 0], ["2023-06-03", 0], ["2023-06-04", 0], ["2023-06-05", 0], ["2023-06-06", 0], ["2023-06-07", 0], ["2023-06-08", 0], ["2023-06-09", 0], ["2023-06-10", 0], ["2023-06-11", 0], ["2023-06-12", 0], ["2023-06-13", 0], ["2023-06-14", 0], ["2023-06-15", 0], ["2023-06-16", 0], ["2023-06-17", 0], ["2023-06-18", 0], ["2023-06-19", 0], ["2023-06-20", 0], ["2023-06-21", 0], ["2023-06-22", 0], ["2023-06-23", 0], ["2023-06-24", 0], ["2023-06-25", 0], ["2023-06-26", 0], ["2023-06-27", 0], ["2023-06-28", 0], ["2023-06-29", 0], ["2023-06-30", 0], ["2023-07-01", 0], ["2023-07-02", 0], ["2023-07-03", 0], ["2023-07-04", 0], ["2023-07-05", 0], ["2023-07-06", 0], ["2023-07-07", 0], ["2023-07-08", 0], ["2023-07-09", 0], ["2023-07-10", 0], ["2023-07-11", 0], ["2023-07-12", 0], ["2023-07-13", 0], ["2023-07-14", 0], ["2023-07-15", 0], ["2023-07-16", 0], ["2023-07-17", 0], ["2023-07-18", 0], ["2023-07-19", 0], ["2023-07-20", 0], ["2023-07-21", 0], ["2023-07-22", 0], ["2023-07-23", 0], ["2023-07-24", 0], ["2023-07-25", 0], ["2023-07-26", 0], ["2023-07-27", 0], ["2023-07-28", 0], ["2023-07-29", 0], ["2023-07-30", 0], ["2023-07-31", 0], ["2023-08-01", 0], ["2023-08-02", 0], ["2023-08-03", 0], ["2023-08-04", 0], ["2023-08-05", 0], ["2023-08-06", 0], ["2023-08-07", 0], ["2023-08-08", 0], ["2023-08-09", 0], ["2023-08-10", 0], ["2023-08-11", 0], ["2023-08-12", 0], ["2023-08-13", 0], ["2023-08-14", 0], ["2023-08-15", 0], ["2023-08-16", 0], ["2023-08-17", 0], ["2023-08-18", 0], ["2023-08-19", 0], ["2023-08-20", 0], ["2023-08-21", 0], ["2023-08-22", 0], ["2023-08-23", 0], ["2023-08-24", 0], ["2023-08-25", 0], ["2023-08-26", 0], ["2023-08-27", 0], ["2023-08-28", 0], ["2023-08-29", 0], ["2023-08-30", 0], ["2023-08-31", 0], ["2023-09-01", 0], ["2023-09-02", 0], ["2023-09-03", 0], ["2023-09-04", 0], ["2023-09-05", 0], ["2023-09-06", 0], ["2023-09-07", 0], ["2023-09-08", 0], ["2023-09-09", 0], ["2023-09-10", 0], ["2023-09-11", 0], ["2023-09-12", 0], ["2023-09-13", 0], ["2023-09-14", 0], ["2023-09-15", 0], ["2023-09-16", 0], ["2023-09-17", 0], ["2023-09-18", 0], ["2023-09-19", 0], ["2023-09-20", 0], ["2023-09-21", 0], ["2023-09-22", 0], ["2023-09-23", 0], ["2023-09-24", 0], ["2023-09-25", 0], ["2023-09-26", 0], ["2023-09-27", 0], ["2023-09-28", 0], ["2023-09-29", 0], ["2023-09-30", 0], ["2023-10-01", 0], ["2023-10-02", 0], ["2023-10-03", 0], ["2023-10-04", 0], ["2023-10-05", 0], ["2023-10-06", 0], ["2023-10-07", 0], ["2023-10-08", 0], ["2023-10-09", 0], ["2023-10-10", 0], ["2023-10-11", 0], ["2023-10-12", 0], ["2023-10-13", 0], ["2023-10-14", 0], ["2023-10-15", 0], ["2023-10-16", 0], ["2023-10-17", 0], ["2023-10-18", 0], ["2023-10-19", 0], ["2023-10-20", 0], ["2023-10-21", 0], ["2023-10-22", 0], ["2023-10-23", 0], ["2023-10-24", 0], ["2023-10-25", 0], ["2023-10-26", 0], ["2023-10-27", 0], ["2023-10-28", 0], ["2023-10-29", 0], ["2023-10-30", 0], ["2023-10-31", 0], ["2023-11-01", 0], ["2023-11-02", 0], ["2023-11-03", 0], ["2023-11-04", 0], ["2023-11-05", 0], ["2023-11-06", 0], ["2023-11-07", 0], ["2023-11-08", 0], ["2023-11-09", 0], ["2023-11-10", 0], ["2023-11-11", 0], ["2023-11-12", 0], ["2023-11-13", 0], ["2023-11-14", 0], ["2023-11-15", 0], ["2023-11-16", 0], ["2023-11-17", 0], ["2023-11-18", 0], ["2023-11-19", 0], ["2023-11-20", 0], ["2023-11-21", 0], ["2023-11-22", 0], ["2023-11-23", 0], ["2023-11-24", 0], ["2023-11-25", 0], ["2023-11-26", 0], ["2023-11-27", 0], ["2023-11-28", 0], ["2023-11-29", 0], ["2023-11-30", 0], ["2023-12-01", 0], ["2023-12-02", 0], ["2023-12-03", 0], ["2023-12-04", 0], ["2023-12-05", 0], ["2023-12-06", 0], ["2023-12-07", 0], ["2023-12-08", 0], ["2023-12-09", 0], ["2023-12-10", 0], ["2023-12-11", 0], ["2023-12-12", 0], ["2023-12-13", 0], ["2023-12-14", 0], ["2023-12-15", 0], ["2023-12-16", 0], ["2023-12-17", 0], ["2023-12-18", 0], ["2023-12-19", 0], ["2023-12-20", 0], ["2023-12-21", 0], ["2023-12-22", 0], ["2023-12-23", 0], ["2023-12-24", 0], ["2023-12-25", 0], ["2023-12-26", 0], ["2023-12-27", 0], ["2023-12-28", 0], ["2023-12-29", 0], ["2023-12-30", 0], ["2023-12-31", 0], ["2024-01-01", 0], ["2024-01-02", 0], ["2024-01-03", 0], ["2024-01-04", 0], ["2024-01-05", 0], ["2024-01-06", 0], ["2024-01-07", 0], ["2024-01-08", 0], ["2024-01-09", 0], ["2024-01-10", 0], ["2024-01-11", 0], ["2024-01-12", 0], ["2024-01-13", 0], ["2024-01-14", 0], ["2024-01-15", 0], ["2024-01-16", 0], ["2024-01-17", 0], ["2024-01-18", 0], ["2024-01-19", 0], ["2024-01-20", 0], ["2024-01-21", 0], ["2024-01-22", 0], ["2024-01-23", 0], ["2024-01-24", 0], ["2024-01-25", 0], ["2024-01-26", 0], ["2024-01-27", 0], ["2024-01-28", 0], ["2024-01-29", 0], ["2024-01-30", 0], ["2024-01-31", 1], ["2024-02-01", 0]] + data: [["2023-02-18", 0], ["2023-02-19", 0], ["2023-02-20", 0], ["2023-02-21", 0], ["2023-02-22", 0], ["2023-02-23", 0], ["2023-02-24", 0], ["2023-02-25", 0], ["2023-02-26", 0], ["2023-02-27", 0], ["2023-02-28", 0], ["2023-03-01", 0], ["2023-03-02", 0], ["2023-03-03", 0], ["2023-03-04", 0], ["2023-03-05", 0], ["2023-03-06", 0], ["2023-03-07", 0], ["2023-03-08", 0], ["2023-03-09", 0], ["2023-03-10", 0], ["2023-03-11", 0], ["2023-03-12", 0], ["2023-03-13", 0], ["2023-03-14", 0], ["2023-03-15", 0], ["2023-03-16", 0], ["2023-03-17", 0], ["2023-03-18", 0], ["2023-03-19", 0], ["2023-03-20", 0], ["2023-03-21", 0], ["2023-03-22", 0], ["2023-03-23", 0], ["2023-03-24", 0], ["2023-03-25", 0], ["2023-03-26", 0], ["2023-03-27", 1], ["2023-03-28", 0], ["2023-03-29", 0], ["2023-03-30", 0], ["2023-03-31", 0], ["2023-04-01", 0], ["2023-04-02", 1], ["2023-04-03", 0], ["2023-04-04", 0], ["2023-04-05", 0], ["2023-04-06", 0], ["2023-04-07", 0], ["2023-04-08", 0], ["2023-04-09", 0], ["2023-04-10", 1], ["2023-04-11", 1], ["2023-04-12", 0], ["2023-04-13", 0], ["2023-04-14", 0], ["2023-04-15", 0], ["2023-04-16", 0], ["2023-04-17", 0], ["2023-04-18", 0], ["2023-04-19", 0], ["2023-04-20", 0], ["2023-04-21", 0], ["2023-04-22", 0], ["2023-04-23", 0], ["2023-04-24", 0], ["2023-04-25", 0], ["2023-04-26", 0], ["2023-04-27", 0], ["2023-04-28", 0], ["2023-04-29", 0], ["2023-04-30", 0], ["2023-05-01", 0], ["2023-05-02", 0], ["2023-05-03", 0], ["2023-05-04", 0], ["2023-05-05", 0], ["2023-05-06", 0], ["2023-05-07", 0], ["2023-05-08", 0], ["2023-05-09", 0], ["2023-05-10", 0], ["2023-05-11", 0], ["2023-05-12", 0], ["2023-05-13", 0], ["2023-05-14", 0], ["2023-05-15", 0], ["2023-05-16", 0], ["2023-05-17", 0], ["2023-05-18", 1], ["2023-05-19", 0], ["2023-05-20", 0], ["2023-05-21", 0], ["2023-05-22", 0], ["2023-05-23", 0], ["2023-05-24", 0], ["2023-05-25", 0], ["2023-05-26", 0], ["2023-05-27", 0], ["2023-05-28", 0], ["2023-05-29", 0], ["2023-05-30", 0], ["2023-05-31", 0], ["2023-06-01", 0], ["2023-06-02", 0], ["2023-06-03", 0], ["2023-06-04", 0], ["2023-06-05", 0], ["2023-06-06", 0], ["2023-06-07", 0], ["2023-06-08", 0], ["2023-06-09", 0], ["2023-06-10", 0], ["2023-06-11", 0], ["2023-06-12", 0], ["2023-06-13", 0], ["2023-06-14", 0], ["2023-06-15", 0], ["2023-06-16", 0], ["2023-06-17", 0], ["2023-06-18", 0], ["2023-06-19", 0], ["2023-06-20", 0], ["2023-06-21", 0], ["2023-06-22", 0], ["2023-06-23", 0], ["2023-06-24", 0], ["2023-06-25", 0], ["2023-06-26", 0], ["2023-06-27", 0], ["2023-06-28", 0], ["2023-06-29", 0], ["2023-06-30", 0], ["2023-07-01", 0], ["2023-07-02", 0], ["2023-07-03", 0], ["2023-07-04", 0], ["2023-07-05", 0], ["2023-07-06", 0], ["2023-07-07", 0], ["2023-07-08", 0], ["2023-07-09", 0], ["2023-07-10", 0], ["2023-07-11", 0], ["2023-07-12", 0], ["2023-07-13", 0], ["2023-07-14", 0], ["2023-07-15", 0], ["2023-07-16", 0], ["2023-07-17", 0], ["2023-07-18", 0], ["2023-07-19", 0], ["2023-07-20", 0], ["2023-07-21", 0], ["2023-07-22", 0], ["2023-07-23", 0], ["2023-07-24", 0], ["2023-07-25", 0], ["2023-07-26", 0], ["2023-07-27", 0], ["2023-07-28", 0], ["2023-07-29", 0], ["2023-07-30", 0], ["2023-07-31", 0], ["2023-08-01", 0], ["2023-08-02", 0], ["2023-08-03", 0], ["2023-08-04", 0], ["2023-08-05", 0], ["2023-08-06", 0], ["2023-08-07", 0], ["2023-08-08", 0], ["2023-08-09", 0], ["2023-08-10", 0], ["2023-08-11", 0], ["2023-08-12", 0], ["2023-08-13", 0], ["2023-08-14", 0], ["2023-08-15", 0], ["2023-08-16", 0], ["2023-08-17", 0], ["2023-08-18", 0], ["2023-08-19", 0], ["2023-08-20", 0], ["2023-08-21", 0], ["2023-08-22", 0], ["2023-08-23", 0], ["2023-08-24", 0], ["2023-08-25", 0], ["2023-08-26", 0], ["2023-08-27", 0], ["2023-08-28", 0], ["2023-08-29", 0], ["2023-08-30", 0], ["2023-08-31", 0], ["2023-09-01", 0], ["2023-09-02", 0], ["2023-09-03", 0], ["2023-09-04", 0], ["2023-09-05", 0], ["2023-09-06", 0], ["2023-09-07", 0], ["2023-09-08", 0], ["2023-09-09", 0], ["2023-09-10", 0], ["2023-09-11", 0], ["2023-09-12", 0], ["2023-09-13", 0], ["2023-09-14", 0], ["2023-09-15", 0], ["2023-09-16", 0], ["2023-09-17", 0], ["2023-09-18", 0], ["2023-09-19", 0], ["2023-09-20", 0], ["2023-09-21", 0], ["2023-09-22", 0], ["2023-09-23", 0], ["2023-09-24", 0], ["2023-09-25", 0], ["2023-09-26", 0], ["2023-09-27", 0], ["2023-09-28", 0], ["2023-09-29", 0], ["2023-09-30", 0], ["2023-10-01", 0], ["2023-10-02", 0], ["2023-10-03", 0], ["2023-10-04", 0], ["2023-10-05", 0], ["2023-10-06", 0], ["2023-10-07", 0], ["2023-10-08", 0], ["2023-10-09", 0], ["2023-10-10", 0], ["2023-10-11", 0], ["2023-10-12", 0], ["2023-10-13", 0], ["2023-10-14", 0], ["2023-10-15", 0], ["2023-10-16", 0], ["2023-10-17", 0], ["2023-10-18", 0], ["2023-10-19", 0], ["2023-10-20", 0], ["2023-10-21", 0], ["2023-10-22", 0], ["2023-10-23", 0], ["2023-10-24", 0], ["2023-10-25", 0], ["2023-10-26", 0], ["2023-10-27", 0], ["2023-10-28", 0], ["2023-10-29", 0], ["2023-10-30", 0], ["2023-10-31", 0], ["2023-11-01", 0], ["2023-11-02", 0], ["2023-11-03", 0], ["2023-11-04", 0], ["2023-11-05", 0], ["2023-11-06", 0], ["2023-11-07", 0], ["2023-11-08", 0], ["2023-11-09", 0], ["2023-11-10", 0], ["2023-11-11", 0], ["2023-11-12", 0], ["2023-11-13", 0], ["2023-11-14", 0], ["2023-11-15", 0], ["2023-11-16", 0], ["2023-11-17", 0], ["2023-11-18", 0], ["2023-11-19", 0], ["2023-11-20", 0], ["2023-11-21", 0], ["2023-11-22", 0], ["2023-11-23", 0], ["2023-11-24", 0], ["2023-11-25", 0], ["2023-11-26", 0], ["2023-11-27", 0], ["2023-11-28", 0], ["2023-11-29", 0], ["2023-11-30", 0], ["2023-12-01", 0], ["2023-12-02", 0], ["2023-12-03", 0], ["2023-12-04", 0], ["2023-12-05", 0], ["2023-12-06", 0], ["2023-12-07", 0], ["2023-12-08", 0], ["2023-12-09", 0], ["2023-12-10", 0], ["2023-12-11", 0], ["2023-12-12", 0], ["2023-12-13", 0], ["2023-12-14", 0], ["2023-12-15", 0], ["2023-12-16", 0], ["2023-12-17", 0], ["2023-12-18", 0], ["2023-12-19", 0], ["2023-12-20", 0], ["2023-12-21", 0], ["2023-12-22", 0], ["2023-12-23", 0], ["2023-12-24", 0], ["2023-12-25", 0], ["2023-12-26", 0], ["2023-12-27", 0], ["2023-12-28", 0], ["2023-12-29", 0], ["2023-12-30", 0], ["2023-12-31", 0], ["2024-01-01", 0], ["2024-01-02", 0], ["2024-01-03", 0], ["2024-01-04", 0], ["2024-01-05", 0], ["2024-01-06", 0], ["2024-01-07", 0], ["2024-01-08", 0], ["2024-01-09", 0], ["2024-01-10", 0], ["2024-01-11", 0], ["2024-01-12", 0], ["2024-01-13", 0], ["2024-01-14", 0], ["2024-01-15", 0], ["2024-01-16", 0], ["2024-01-17", 0], ["2024-01-18", 0], ["2024-01-19", 0], ["2024-01-20", 0], ["2024-01-21", 0], ["2024-01-22", 0], ["2024-01-23", 0], ["2024-01-24", 0], ["2024-01-25", 0], ["2024-01-26", 0], ["2024-01-27", 0], ["2024-01-28", 0], ["2024-01-29", 0], ["2024-01-30", 0], ["2024-01-31", 1], ["2024-02-01", 0], ["2024-02-02", 0], ["2024-02-03", 0], ["2024-02-04", 0], ["2024-02-05", 0], ["2024-02-06", 0], ["2024-02-07", 0], ["2024-02-08", 0], ["2024-02-09", 0], ["2024-02-10", 0], ["2024-02-11", 0], ["2024-02-12", 0], ["2024-02-13", 0], ["2024-02-14", 0], ["2024-02-15", 0], ["2024-02-16", 0], ["2024-02-17", 0], ["2024-02-18", 1]] }] }; @@ -484,6 +484,76 @@ +
+ 02 +
+ + + +
+ 18 +
+
+
+
+ +
+ + + 怎么实现 mybatis 自动设置创建时间更新时间 + + 怎么实现 mybatis 自动设置创建时间更新时间 +
+
+
+
+ + 怎么实现 mybatis 自动设置创建时间更新时间🔍 相对流行方案弊端mybatis 提供 Interceptor 接口以插件方式提供扩展能力。互联网上大都是对数据表映射类对象中关于时间属性设置当前时间的解决方案。但这种方法无法解决 ma + +
+
+ + 2024-02-18 + + + + + + + + + +
+
+ + + + +
+
+
+ + +
+ + + + + + +
01
@@ -523,8 +593,8 @@ - @@ -539,6 +609,8 @@ redis + code +
@@ -594,8 +666,8 @@ - @@ -608,6 +680,8 @@ tools + 选型 + @@ -630,12 +704,12 @@
- 10 + 11
@@ -723,8 +799,8 @@ - @@ -741,6 +817,8 @@ relogin + code +
@@ -786,8 +864,8 @@ - @@ -798,10 +876,14 @@ @@ -853,8 +935,8 @@ - @@ -871,6 +953,8 @@ BFG + 杂项 + @@ -904,7 +988,7 @@
  站点总字数: 8k + class="white-color">10.3k diff --git a/atom.xml b/atom.xml index e865d9f..e945229 100644 --- a/atom.xml +++ b/atom.xml @@ -6,7 +6,7 @@ - 2024-02-01T01:39:18.985Z + 2024-02-18T04:46:29.756Z https://belugaliu.github.io/ @@ -16,12 +16,43 @@ Hexo + + 怎么实现 mybatis 自动设置创建时间更新时间 + + https://belugaliu.github.io/2024/02/18/zen-me-shi-xian-mybatis-zi-dong-she-zhi-chuang-jian-shi-jian-geng-xin-shi-jian/ + 2024-02-18T12:41:41.000Z + 2024-02-18T04:46:29.756Z + + + + + + + <h2 id="怎么实现-mybatis-自动设置创建时间更新时间"><a href="#怎么实现-mybatis-自动设置创建时间更新时间" class="headerlink" title="怎么实现 mybatis 自动设置创建时间更新时间"></a>怎么实现 + + + + + + + + + + + + + + + + + + Redis 分布式锁你续约了吗 https://belugaliu.github.io/2024/01/31/redis-fen-bu-shi-suo-ni-xu-yue-liao-ma/ 2024-01-31T21:38:27.000Z - 2024-02-01T01:39:18.985Z + 2024-02-18T04:46:29.752Z @@ -34,21 +65,23 @@ - + + + json 工具我应该怎么选? https://belugaliu.github.io/2023/05/18/json-gong-ju-wo-ying-gai-zen-me-xuan/ - 2023-05-18T15:25:00.000Z - 2023-05-18T17:31:28.458Z + 2023-05-18T23:25:00.000Z + 2024-02-18T04:46:29.756Z @@ -61,19 +94,21 @@ - + + + spring-boot-security OAuth2应用实现 - - https://belugaliu.github.io/2023/04/10/spring-boot-security-oauth2-ying-yong-shi-xian/ - 2023-04-10T16:08:54.000Z - 2023-04-21T18:23:17.490Z + + https://belugaliu.github.io/2023/04/11/spring-boot-security-oauth2-ying-yong-shi-xian/ + 2023-04-11T00:08:54.000Z + 2024-02-18T04:46:29.756Z @@ -86,7 +121,7 @@ - + @@ -97,14 +132,16 @@ + + spring-security中遇见的耗时小坑 https://belugaliu.github.io/2023/04/10/spring-security-zhong-yu-jian-de-hao-shi-xiao-keng/ - 2023-04-10T14:01:52.000Z - 2023-04-10T16:09:23.001Z + 2023-04-10T22:01:52.000Z + 2024-02-18T04:46:29.756Z @@ -117,7 +154,7 @@ - + @@ -126,14 +163,16 @@ + + npm-link VUEX watch 怎么不生效 https://belugaliu.github.io/2023/04/02/npm-link-vuex-watch-zen-me-bu-sheng-xiao/ - 2023-04-02T11:07:36.000Z - 2023-04-10T14:06:12.483Z + 2023-04-02T19:07:36.000Z + 2024-02-18T04:46:29.756Z @@ -146,21 +185,25 @@ - - + - + + + + + + gitlab 上和项目大仓库说再见 https://belugaliu.github.io/2023/03/27/gitlab-shang-he-xiang-mu-da-cang-ku-shuo-zai-jian/ - 2023-03-27T05:00:03.000Z - 2023-03-30T13:53:13.656Z + 2023-03-27T13:00:03.000Z + 2024-02-18T04:46:29.752Z @@ -173,7 +216,7 @@ - + @@ -182,6 +225,8 @@ + + diff --git a/categories/code/index.html b/categories/code/index.html new file mode 100644 index 0000000..ff38c58 --- /dev/null +++ b/categories/code/index.html @@ -0,0 +1,1030 @@ + + + + + + + + + + + + + + + + + + + + 分类: code | beluga + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+ + 白鲸 + +
+ +
+ + + + + +
+
+
+
+ + + + + +
+
+ +
+ + + +
+
+
+
+   文章分类 +
+ +
+
+
+ + + + +
+
+ +
+
+ +
+ + + 怎么实现 mybatis 自动设置创建时间更新时间 + + 怎么实现 mybatis 自动设置创建时间更新时间 +
+
+
+
+ + 怎么实现 mybatis 自动设置创建时间更新时间🔍 相对流行方案弊端mybatis 提供 Interceptor 接口以插件方式提供扩展能力。互联网上大都是对数据表映射类对象中关于时间属性设置当前时间的解决方案。但这种方法无法解决 ma + +
+
+ + 2024-02-18 + + + + + + + + + +
+
+ + + + +
+
+ +
+
+ +
+ + + Redis 分布式锁你续约了吗 + + Redis 分布式锁你续约了吗 +
+
+
+
+ + Redis 分布式锁你续期了吗?服务在集群情况下,线程锁是无法满足服务之间逻辑隔离。分布式锁概念应运而生,它需要具备互斥性、防止死锁、高可用性、可重入性、唯一标识的特点。 + +互斥性:任意时刻,只能有一个服务才能获取锁。 + +防止死锁:分布式锁 + +
+
+ + 2024-01-31 + + + + + + + + + +
+
+ + + + +
+
+ +
+
+ +
+ + + spring-boot-security OAuth2应用实现 + + spring-boot-security OAuth2应用实现 +
+
+
+
+ + 🐭 背景项目上一直使用 CAS + 应用 session + nginx IP hash 组合方式实现伪集群部署。但这种方式也有一定的缺点,请求不够平均,应用使用异步处理方式,还必须将结果返回给发起的应用,否则前端无法拿到结果。这些都是 + +
+
+ + 2023-04-11 + + + + + + + + + +
+
+ + + + +
+
+ +
+
+ +
+ + + spring-security中遇见的耗时小坑 + + spring-security中遇见的耗时小坑 +
+
+
+
+ + 🍐 背景客户现场运维同事反馈某系统输入正确的用户名、密码后,无法进入系统首页。地址栏中地址却在 SSO server 和系统地址之间来回跳转,系统日志中也没有相关的日志提供线索。听到这里就晓得,不是一个运维同学在白盒的情况下,能解决的问题 + +
+
+ + 2023-04-10 + + + + + + + + + +
+
+ + + + +
+
+ +
+
+ +
+ + + npm-link VUEX watch 怎么不生效 + + npm-link VUEX watch 怎么不生效 +
+
+
+
+ + 🐱 背景前端项目 package.json 相当于后端 maven 项目 pom.xml 文件管理项目组件依赖。需要走 npm install --save-dev xxxx 引入方式。对于项目中存在多项目共用的前端组件开发,不希望每次修 + +
+
+ + 2023-04-02 + + + + + + + + + +
+
+ + + + +
+
+ +
+
+
+ + + + +
+ + +
+
+ Copyright © + + 2019-2024 + + beluga + | Powered by Hexo + | Theme Matery + + | 繁/简: + +
+ +   站点总字数: 10.3k + + + + + + + +  |  总访问量:  + + + + + +  |  总访问人数:  + + + +
+ + + +
+ +
+ +
+
+ +
+ + + + + + + + +
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/categories/index.html b/categories/index.html index c0f3a40..03bf6db 100644 --- a/categories/index.html +++ b/categories/index.html @@ -393,37 +393,28 @@ - + tools - 2 + style="background-color: #F9EBEA;">code + 5 - + npm + style="background-color: #F5EEF8;">杂项 1 - + spring-security - 2 - - - - - - 分布式锁 + style="background-color: #D5F5E3;">选型 1 @@ -471,7 +462,7 @@ color: '#3C4858' } }, - indicator: [{"name":"tools","max":3},{"name":"npm","max":3},{"name":"spring-security","max":3},{"name":"分布式锁","max":3}], + indicator: [{"name":"code","max":6},{"name":"杂项","max":6},{"name":"选型","max":6}], nameGap: 5, center: ['50%','55%'], radius: '66%' @@ -482,7 +473,7 @@ itemStyle: {normal: {areaStyle: {type: 'default'}}}, data : [ { - value : [2,1,2,1], + value : [5,1,1], name : '文章分类数量' } ] @@ -516,7 +507,7 @@
  站点总字数: 8k + class="white-color">10.3k diff --git a/categories/npm/index.html "b/categories/\346\235\202\351\241\271/index.html" similarity index 92% rename from categories/npm/index.html rename to "categories/\346\235\202\351\241\271/index.html" index f0dec7c..bd1aa86 100644 --- a/categories/npm/index.html +++ "b/categories/\346\235\202\351\241\271/index.html" @@ -4,7 +4,7 @@ - + @@ -17,7 +17,7 @@ - 分类: npm | beluga + 分类: 杂项 | beluga @@ -393,37 +393,28 @@ - + tools - 2 + style="background-color: #F9EBEA;">code + 5 - + npm + style="background-color: #F5EEF8;">杂项 1 - + spring-security - 2 - - - - - - 分布式锁 + style="background-color: #D5F5E3;">选型 1 @@ -442,31 +433,32 @@
- +
- npm-link VUEX watch 怎么不生效 + gitlab 上和项目大仓库说再见 - npm-link VUEX watch 怎么不生效 + gitlab 上和项目大仓库说再见
- 🐱 背景前端项目 package.json 相当于后端 maven 项目 pom.xml 文件管理项目组件依赖。需要走 npm install --save-dev xxxx 引入方式。对于项目中存在多项目共用的前端组件开发,不希望每次修 + 🐱 背景git clone 项目耗时很长。原因,网速慢或是代码仓库文件很大(n+ G)。本篇文章就讲述如何给 gitlab 代码仓库减负。 +🐶 基础知识项目在 gitlab 中显示的仓库大小 = 项目文件总大小 + .git (隐藏)目
- 2023-04-02 + 2023-03-27 - @@ -481,8 +473,16 @@ tools - - npm-link + + gitlab + + + + BFG + + + + 杂项
@@ -516,7 +516,7 @@
  站点总字数: 8k + class="white-color">10.3k diff --git "a/categories/\345\210\206\345\270\203\345\274\217\351\224\201/index.html" "b/categories/\351\200\211\345\236\213/index.html" similarity index 91% rename from "categories/\345\210\206\345\270\203\345\274\217\351\224\201/index.html" rename to "categories/\351\200\211\345\236\213/index.html" index 0434526..f87f1ac 100644 --- "a/categories/\345\210\206\345\270\203\345\274\217\351\224\201/index.html" +++ "b/categories/\351\200\211\345\236\213/index.html" @@ -4,7 +4,7 @@ - + @@ -17,7 +17,7 @@ - 分类: 分布式锁 | beluga + 分类: 选型 | beluga @@ -393,37 +393,28 @@ - + tools - 2 + style="background-color: #F9EBEA;">code + 5 - + npm + style="background-color: #F5EEF8;">杂项 1 - - spring-security - 2 - - - - - + 分布式锁 + style="background-color: #D5F5E3;">选型 1 @@ -442,35 +433,31 @@
- +
- Redis 分布式锁你续约了吗 + json 工具我应该怎么选? - Redis 分布式锁你续约了吗 + json 工具我应该怎么选?
- Redis 分布式锁你续期了吗?服务在集群情况下,线程锁是无法满足服务之间逻辑隔离。分布式锁概念应运而生,它需要具备互斥性、防止死锁、高可用性、可重入性、唯一标识的特点。 - -互斥性:任意时刻,只能有一个服务才能获取锁。 - -防止死锁:分布式锁 + 编程多年,其实适合项目/自己/团队才是合适的。JSON 在 B/S 应用下,作为轻量级的数据交换方式。也应运而生不少序列化反序列化的 JSON 工具包。比如,json-lib、fastjson、gson、jackson 等。我用过的,主要是
- 2024-01-31 + 2023-05-18 - @@ -481,12 +468,12 @@ @@ -520,7 +507,7 @@
  站点总字数: 8k + class="white-color">10.3k
diff --git a/contact/index.html b/contact/index.html index 7b60927..e01e4e3 100644 --- a/contact/index.html +++ b/contact/index.html @@ -453,7 +453,7 @@
  站点总字数: 8k + class="white-color">10.3k diff --git a/friends/index.html b/friends/index.html index c80622b..3223e48 100644 --- a/friends/index.html +++ b/friends/index.html @@ -677,7 +677,7 @@

程序员Carl


  站点总字数: 8k + class="white-color">10.3k diff --git a/google60989aa152131adb.html b/google60989aa152131adb.html index ac46b35..8c03628 100644 --- a/google60989aa152131adb.html +++ b/google60989aa152131adb.html @@ -772,7 +772,7 @@


  站点总字数: 8k + class="white-color">10.3k diff --git a/index.html b/index.html index e884e9b..28bd501 100644 --- a/index.html +++ b/index.html @@ -582,6 +582,67 @@
+ +
+
+ +
+ + + 怎么实现 mybatis 自动设置创建时间更新时间 + + 怎么实现 mybatis 自动设置创建时间更新时间 +
+
+ +
+
+ + 怎么实现 mybatis 自动设置创建时间更新时间🔍 相对流行方案弊端mybatis 提供 Interceptor 接口以插件方式提供扩展能力。互联网上大都是对数据表映射类对象中关于时间属性设置当前时间的解决方案。但这种方法无法解决 ma + +
+
+ + 2024-02-18 + + + + + + + + + +
+
+ + + + +
+
+ +
@@ -613,8 +674,8 @@ - @@ -633,6 +694,10 @@ redis + + code + +
@@ -666,8 +731,8 @@ - @@ -682,6 +747,10 @@ tools + + 选型 + +
@@ -691,7 +760,7 @@
@@ -776,8 +849,8 @@ - @@ -800,6 +873,10 @@ relogin + + code + +
@@ -833,8 +910,8 @@ - @@ -845,14 +922,22 @@
@@ -887,8 +972,8 @@ - @@ -911,6 +996,10 @@ BFG + + 杂项 + +
@@ -944,7 +1033,7 @@
  站点总字数: 8k + class="white-color">10.3k diff --git a/search.xml b/search.xml index 9f7a053..7451b34 100644 --- a/search.xml +++ b/search.xml @@ -3,6 +3,37 @@ + + 怎么实现 mybatis 自动设置创建时间更新时间 + + /2024/02/18/zen-me-shi-xian-mybatis-zi-dong-she-zhi-chuang-jian-shi-jian-geng-xin-shi-jian/ + + 怎么实现 mybatis 自动设置创建时间更新时间

🔍 相对流行方案弊端

mybatis 提供 Interceptor 接口以插件方式提供扩展能力。互联网上大都是对数据表映射类对象中关于时间属性设置当前时间的解决方案。但这种方法无法解决 mapper.xml 写更新 SQL 或 @XXXProvider 拼 SQL 的方式插入或更新数据表。但是依托于数据表映射类本身没有问题,因为需要知道创建时间和更新时间对应的数据库字段信息,这是光拦截到 SQL 而无法判断时间相关的字段是否存在并赋值。

🎓 更好的选择

如果你项目中使用了 mybatis-plus 组件,恭喜你做这个决定你足够明智。 mybatis-plus 提供 MetaObjectHandler 抽象类实现公共字段自动写入能力。其大体思路是针对 @XXXProvider 拼 SQL 时将实体中标记需要自动填充的字段拼入 SQL 中,通过 metaObjectHandler 对实体属性字段填充相应值,最后带有自动填充字段的 PrepareStatement SQL 插入/更新数据表数据。

但,项目上使用自写 BaseMapper<E,ID> 接口和 @XXXProvider 注解实现 BaseMapperSqlSourceBuilder 类完成 SQL 拼接。但未提供对公用字段自动写入能力。

🍄 在现状上解决问题

Interceptor 拦截的位置是执行 SQL 之前,也就是 @Signature(type = Executor.class, method="update", args={MappedStatement.class, Object.class}) ,在 SQL 里拼接时间的字段和字段值。字段值可以直接设置的 now() 数据库函数,缺点是强依赖数据库。这个缺点需要通过 driver 信息找确切的数据库类型,切换时间函数。时间字段信息则是通过 BaseMapper<E,ID> 获取泛型 E 指向的 Class,通过属性名匹配(没办法老代码只能匹配属性名)或注解匹配找到时间字段。SQL 里拼接时间字段是通过包装 SqlSource 通过 SqlSource#getBoundSql 替换最终 SQL 和当前时间函数。

/** * 表的创建时间和更新时间会随着表的更新或插入行为进行赋值. 因为需要确定表中是否有创建时间或更新时间且确定时间字段名,所以需要使用的地方 * 的 mapper 继承 {@link BaseMapper}<br> * 思路,从 BaseMapper 的泛型 T 获取实体类,从实体类里面解析出创建时间和更新时间字段对应的数据库字段名,这里创建时间和更新时间是通过名称 * 匹配的,大小写不论包含匹配.针对插入行为会增加创建时间和更新时间,针对更新行为会更新更新时间.<br> * <lu> * <li>创建时间,dCjsj、cjsj、dtCjsj、dCjrq、cjrq、dtCjrq、createTime、dCreateTime、dtCreateTime</li> * <li>更新时间,dGxsj, gxsj, dtGxsj, dXgsj, xgsj, dtXgsj, dZhxgsj、zhxgsj、dtZhxgsj、updateTime、dUpdateTime、dtUpdateTime</li> * </lu> * * @author liulili * @date 2024/1/25 11:24 */@Slf4j@Component@Intercepts(@Signature(type = Executor.class, method="update", args={MappedStatement.class, Object.class}))public class AutofillCreateOrUpdateTimeInterceptor implements Interceptor {    private final String[] CJSJ_COLUMN_NAMES = new String[] {"cjsj", "dCjsj", "dtCjsj", "cjrq", "dCjrq", "dtCjrq", "createTime", "dCreateTime", "dtCreateTime"};    private final String[] GXSJ_COLUMN_NAMES = new String[] {"gxsj", "dGxsj", "dtGxsj", "xgsj", "dXgsj", "dtXgsj", "zhxgsj", "dZhxgsj", "dtZhxgsj", "updateTime", "dUpdateTime", "dtUpdateTime"};    @Override    public Object intercept(Invocation invocation) throws Throwable {        Object[] args = invocation.getArgs();        MappedStatement mappedStatement = (MappedStatement) args[0];        StatementType statement = mappedStatement.getStatementType();        if (statement == StatementType.CALLABLE) {            log.debug("【自动填充创建或修改时间】不支持在存储过程类型业务");            return invocation.proceed();        }        SqlCommandType command = mappedStatement.getSqlCommandType();        String id = mappedStatement.getId();        String className = StringUtils.substring(id, 0, id.lastIndexOf("."));        Class mapperClazz = null;        try {            mapperClazz = Class.forName(className);        } catch (Throwable e) {            if (log.isDebugEnabled()) {                log.debug("className[{}]不是Class无法继续【自动填充创建或修改时间】的工作", className, e);            } else if (log.isInfoEnabled()) {                log.info("className[{}]不是Class无法继续【自动填充创建或修改时间】的工作", className);            }            return invocation.proceed();        }        Class entityClazz = findEntityClazz(mapperClazz);        if (Objects.isNull(entityClazz)) {            log.debug("class[{}]非接口/未继承BaseMapper接口", entityClazz);            return invocation.proceed();        }        CUTimeDTO cuTimeDTO = findCreateAndUpdateTimeColumn(entityClazz);        if (StringUtils.isBlank(cuTimeDTO.getUpdateTimeColumnName()) && StringUtils.isBlank(cuTimeDTO.getCreateTimeColumnName())) {            log.debug("class[{}]无匹配的创建时间和更新时间字段, 请参考 AutofillCreateOrUpdateTimeInterceptor#CJSJ_COLUMN_NAMES 和 AutofillCreateOrUpdateTimeInterceptor#GXSJ_COLUMN_NAMES", entityClazz);            return invocation.proceed();        }        if (command == SqlCommandType.INSERT) {            autofillInsert(mappedStatement, args[1], entityClazz, cuTimeDTO);        } else if (command == SqlCommandType.UPDATE) {            autofillUpdate(mappedStatement, args[1], entityClazz, cuTimeDTO);        }        return invocation.proceed();    }    private void autofillUpdate(MappedStatement mappedStatement, Object param, Class entityClazz, CUTimeDTO cuTimeDTO) {        String updateTimeColumn = cuTimeDTO.getUpdateTimeColumnName();        if (StringUtils.isBlank(updateTimeColumn)) {            return;        }        BoundSql boundSql = mappedStatement.getBoundSql(param);        String sql = boundSql.getSql();        if (StringUtils.containsIgnoreCase(sql, updateTimeColumn)) {            autofillUTime(param, cuTimeDTO, entityClazz);            return;        }        SqlSource sqlSource = mappedStatement.getSqlSource();        SqlSource decoderSqlSource = new AutoFillUTimeUpdateSqlSource(sqlSource, updateTimeColumn, "now()");        BeanUtil.setProperty(mappedStatement, "sqlSource", decoderSqlSource);    }    private void autofillInsert(MappedStatement mappedStatement, Object param, Class entityClazz, CUTimeDTO cuTimeDTO) {        String createColumnName = cuTimeDTO.getCreateTimeColumnName();        String updateColumnName = cuTimeDTO.getUpdateTimeColumnName();        BoundSql boundSql = mappedStatement.getBoundSql(param);        String sql = boundSql.getSql();        List<String> addColumn = new ArrayList<>(2);        if (StringUtils.isNotBlank(createColumnName) && !StringUtils.containsIgnoreCase(sql, createColumnName)) {            addColumn.add(createColumnName);        }        if (StringUtils.isNotBlank(updateColumnName) && !StringUtils.containsIgnoreCase(sql, updateColumnName)) {            addColumn.add(updateColumnName);        }        if (CollectionUtils.isEmpty(addColumn)) {            autofillCUTime(param, cuTimeDTO, entityClazz);            return;        }        String columnName = addColumn.stream().collect(Collectors.joining(","));        String columnValue = addColumn.stream().map(column -> "now()").collect(Collectors.joining(","));        SqlSource sqlSource = mappedStatement.getSqlSource();        SqlSource decoderSqlSource = new AutoFillCUTimeInsertSqlSource(sqlSource, columnName, columnValue);        BeanUtil.setProperty(mappedStatement, "sqlSource", decoderSqlSource);    }    private void autofillCUTime(Object param, CUTimeDTO cuTimeDTO, Class entityClazz) {        if (Objects.isNull(param)) {            return;        }        if (param.getClass().isAssignableFrom(entityClazz)) {            Optional.ofNullable(cuTimeDTO.getCreateTimePropertyName())                    .ifPresent(createColumnName -> BeanUtil.setProperty(param, createColumnName, Calendar.getInstance().getTime()));            Optional.ofNullable(cuTimeDTO.getUpdateTimePropertyName())                    .ifPresent(updateColumnName -> BeanUtil.setProperty(param, updateColumnName, Calendar.getInstance().getTime()));            return;        }        if (param instanceof Collection) {            Collection paramColl = (Collection) param;            paramColl.stream().forEach(sparam -> autofillCUTime(sparam, cuTimeDTO, entityClazz));            return;        }        if (param instanceof Map) {            Map paramMap = (Map) param;            Set<Map.Entry> entries = paramMap.entrySet();            entries.stream().forEach(entry -> autofillCUTime(entry.getValue(), cuTimeDTO, entityClazz));            return;        }        if (param.getClass().isPrimitive() || param.getClass().isEnum()) {            return;        }        if (param.getClass().isArray()) {            Object[] paramArr = (Object[]) param;            Arrays.stream(paramArr).forEach(obj -> autofillCUTime(obj, cuTimeDTO, entityClazz));            return;        }        Field[] fields = param.getClass().getDeclaredFields();        Arrays.stream(fields).forEach(field -> {            Object property = null;            try {                property = BeanUtil.getProperty(param, field.getName());            } catch (Exception e) {                log.debug("param[{}]属性【{}】获取属性值失败", param, field.getName(), e);            }            autofillCUTime(property, cuTimeDTO, entityClazz);        });    }    private void autofillUTime(Object param, CUTimeDTO cuTimeDTO, Class entityClazz) {        if (Objects.isNull(param) || param.getClass().isPrimitive() || param.getClass().isEnum()) {            return;        }        if (param.getClass().isAssignableFrom(entityClazz)) {            Optional.ofNullable(cuTimeDTO.getUpdateTimePropertyName()).ifPresent(updateColumnName -> BeanUtil.setProperty(param, updateColumnName, Calendar.getInstance().getTime()));            return;        }        if (param instanceof Collection) {            Collection paramColl = (Collection) param;            paramColl.stream().forEach(sparam -> autofillUTime(sparam, cuTimeDTO, entityClazz));            return;        }        if (param instanceof Map) {            Map paramMap = (Map) param;            Set<Map.Entry> entries = paramMap.entrySet();            entries.stream().forEach(entry -> autofillUTime(entry.getValue(), cuTimeDTO, entityClazz));            return;        }        if (param.getClass().isArray()) {            Object[] paramArr = (Object[]) param;            Arrays.stream(paramArr).forEach(obj -> autofillUTime(obj, cuTimeDTO, entityClazz));            return;        }        Field[] fields = param.getClass().getDeclaredFields();        Arrays.stream(fields).forEach(field -> {            Object property = null;            try {                property = BeanUtil.getProperty(param, field.getName());            } catch (Exception e) {                log.debug("param[{}]属性【{}】获取属性值失败", param, field.getName(), e);            }            autofillUTime(property, cuTimeDTO, entityClazz);        });    }    private CUTimeDTO findCreateAndUpdateTimeColumn(Class entityClazz) {        Field[] fields = entityClazz.getDeclaredFields();        Map<String, Field> fieldMap = Arrays.stream(fields).collect(Collectors.toMap(Field::getName, field -> field));        Set<String> fieldKeys = fieldMap.keySet();        CUTimeDTO CUTimeDTO = new CUTimeDTO();        Optional<String> cjsjFieldNameOptional = fieldKeys.stream().filter(fieldKey -> Arrays.stream(CJSJ_COLUMN_NAMES)                .anyMatch(columnName -> StringUtils.equalsIgnoreCase(columnName, fieldKey))).findFirst();        cjsjFieldNameOptional.ifPresent(cjsjFieldName -> CUTimeDTO.setCreateTimePropertyName(cjsjFieldName));        CUTimeDTO.setCreateTimeColumnName(getColumnNameByColumnAnno(cjsjFieldNameOptional, fieldMap));        Optional<String> gxsjFieldNameOptional = fieldKeys.stream().filter(fieldKey -> Arrays.stream(GXSJ_COLUMN_NAMES)                .anyMatch(columnName -> StringUtils.equalsIgnoreCase(columnName, fieldKey))).findFirst();        gxsjFieldNameOptional.ifPresent(gxsjFieldName -> CUTimeDTO.setUpdateTimePropertyName(gxsjFieldName));        CUTimeDTO.setUpdateTimeColumnName(getColumnNameByColumnAnno(gxsjFieldNameOptional, fieldMap));        return CUTimeDTO;    }    private String getColumnNameByColumnAnno(Optional<String> fieldNameOptional, Map<String, Field> fieldMap) {        String columnName = null;        if (fieldNameOptional.isPresent()) {            String fieldName = fieldNameOptional.get();            Field field = fieldMap.get(fieldName);            Column column = field.getAnnotation(Column.class);            columnName = column.name();        }        return columnName;    }    private Class findEntityClazz(Class mapperClazz) {        if (!mapperClazz.isInterface()) {            return null;        }        Type[] interfaces = mapperClazz.getGenericInterfaces();        if (Objects.isNull(interfaces)) {            return null;        }        Optional<ParameterizedType> baseMapperTypeOptional = Arrays.stream(interfaces)                .filter(iface -> iface instanceof ParameterizedType)                .map(iface -> (ParameterizedType) iface)                .filter(iface -> ((Class) iface.getRawType()).isAssignableFrom(BaseMapper.class))                .findFirst();        if (!baseMapperTypeOptional.isPresent()) {            return null;        }        ParameterizedType baseMapperType = baseMapperTypeOptional.get();        return (Class) baseMapperType.getActualTypeArguments()[0];    }    @Override    public Object plugin(Object target) {        return Plugin.wrap(target, this);    }    @Override    public void setProperties(Properties properties) {    }}

设计的 DTO 用于确定属性对应的创建时间字段属性和更新时间字段属性。

@Getter@Setter@Accessors(chain = true)@NoArgsConstructorpublic class CUTimeDTO {    private String createTimePropertyName;    private String updateTimePropertyName;    private String createTimeColumnName;    private String updateTimeColumnName;}

包装对应的 SqlSource 在获取最后的 SQL (SqlSource#getBoundSql)中拼接创建和更新时间脚本。不在具体的 SqlSource 里面完成字段拼接加上预处理字段,是因为 mybatis 支持多种 SqlSource 包含 StaticSqlSourceProviderSqlSourceRawSqlSourceDynamicSqlSource,且他们可以组合出现,可见还是有一定的复杂度的。所以才选择用包装类完成字段填充。这种是不建议自动填充那种包含不同值的字段的,因为这样会让预处理 SQL 没有发挥作用。

@AllArgsConstructorpublic class AutoFillUTimeUpdateSqlSource implements SqlSource {    private SqlSource sqlSource;    private String columnName;    private String columnValue;    @Override    public BoundSql getBoundSql(Object parameterObject) {        BoundSql boundSql = this.sqlSource.getBoundSql(parameterObject);        replaceBoundSql(boundSql);        return boundSql;    }    private void replaceBoundSql(BoundSql boundSql) {        String sql = boundSql.getSql();        String newSql = StringUtils.replaceIgnoreCase(sql, "set ", "set " + columnName + "=" + columnValue + ",");        BeanUtil.setProperty(boundSql, "sql", newSql);    }}
@AllArgsConstructorpublic class AutoFillCUTimeInsertSqlSource implements SqlSource  {    private SqlSource sqlSource;    private String columnName;    private String columnValue;    @Override    public BoundSql getBoundSql(Object parameterObject) {        BoundSql boundSql = this.sqlSource.getBoundSql(parameterObject);        replaceBoundSql(boundSql);        return boundSql;    }    private void replaceBoundSql(BoundSql boundSql) {        String sql = boundSql.getSql();        Pattern pattern = Pattern.compile("\\(");        Matcher matcher = pattern.matcher(sql);        String newSql = sql;        if (matcher.find()) {            int index = matcher.start();            newSql = sql.substring(0, index + 1) + columnName + "," + sql.substring(index + 1);        }        int index = StringUtils.indexOfIgnoreCase(newSql, "values");        int index1 = index + "values".length();        while(index1 < newSql.length() && index1 > 0) {            index1 = index1 + 1;            char next = newSql.charAt(index1);            if (next == ' ' || next == '\\' || next == 'n') {                continue;            }            if (next == '(') {                break;            }            index1 = StringUtils.indexOfIgnoreCase(newSql, "values", index1);        }        if (index1 == -1) {            return;        }        String replace = StringUtils.substring(newSql, index, index1 + 1);        newSql = newSql.replace(replace, replace + columnValue + ",");        BeanUtil.setProperty(boundSql, "sql", newSql);    }}

猜测你会有这样的疑问

为什么不让项目直接集成 mybatis-plus 修改 pojo 就能快速解决问题,不用这么复杂。当然我统一这个思路,但这个思路适合于 pojo 少,且使用 @Table@Column 等数据库型的注解的项目。否则,在大项目中还是工作量及风险还是比较高。但这不影响我推荐使用 mybatis-plus。

]]> + + + + + code + + + + + + + code + + mybatis + + mybatis-plus + + 自动填充 + + + + + + + Redis 分布式锁你续约了吗 @@ -13,7 +44,7 @@ - 分布式锁 + code @@ -24,6 +55,8 @@ redis + code + @@ -40,7 +73,7 @@ - tools + 选型 @@ -49,6 +82,8 @@ tools + 选型 + @@ -57,15 +92,15 @@ spring-boot-security OAuth2应用实现 - - /2023/04/10/spring-boot-security-oauth2-ying-yong-shi-xian/ + + /2023/04/11/spring-boot-security-oauth2-ying-yong-shi-xian/ 🐭 背景

项目上一直使用 CAS + 应用 session + nginx IP hash 组合方式实现伪集群部署。但这种方式也有一定的缺点,请求不够平均,应用使用异步处理方式,还必须将结果返回给发起的应用,否则前端无法拿到结果。这些都是 IP 绑定固定应用导致的。2023 年为止,在网上搜索到主要解决方式有两个: 1. session 共享(需要依赖 redis)2. 签发 JWT 授权。不想引入 redis,所以选择签发 JWT 授权。技术选型上使用 spring-scurity + CAS + oauth2 组合方式。

🐯 应用实现

使用 spring-security + CAS + Oauth2 组合方式,spring-boot 中提供了很多 starter 可以使用。以下使用 maven 仓库管理为例

<!-- spring-security 基础 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId></dependency><!-- CAS 相关 --><dependency><groupId>org.springframework.security</groupId><artifactId>spring-security-cas</artifactId></dependency><!-- security-jwt相关 --><dependency><groupId>org.springframework.security</groupId><artifactId>spring-security-oauth2-jose</artifactId></dependency><!-- JWT 签发 --><dependency><groupId>org.springframework.security</groupId><artifactId>spring-security-oauth2-resource-server</artifactId></dependency>

🐘 怎么集成

集成之前,建议先看看 spring-security 的架构😸 很容易理解。当然集成一个组件,需要有集成思路或步骤,

PART1. 选定用户校验方式

spring-security 目前有支持的集中方式,

当然,此处只是选择 Filter 并非真正验证的位置。所以,spring-security 支持的 CAS 或 UsernamePassword 验证方式也是把你的验证器默认设置了。

PART2. 组装待校验元素(principal/credentials)

principal,被验证主体。credentials,被验证证书,也可以是密码。

如果是使用 CAS 或 UsernamePassword 验证,可以跳过这里,因为组装待验证元素,有默认实现。就拿 CAS 来比如

// CASAuthenticationFilterpublic Authentication attemptAuthentication(HttpServletRequest request,                                             HttpServletResponse response)throws AuthenticationException, IOException {  //,,,  UsernamePasswordAuthenticationToken authRequest = UsernamePasswordAuthenticationToken.unauthenticated(      username, password);  //,,,}// UsernamePasswordAuthenticationTokenpublic class UsernamePasswordAuthenticationToken extends AbstractAuthenticationToken {  public UsernamePasswordAuthenticationToken(Object principal, Object credentials) {//,,,,this.principal = principal;this.credentials = credentials;setAuthenticated(false);}}

如果是使用 AbstractPreAuthenticatedProcessingFilter 时,则需要覆盖方法 getPreAuthenticatedPrincipal()getPreAuthenticatedPrincipal() 来确定主体和证书。

🎃 如果是使用 BearerTokenAuthenticationFilter 时,默认是从请求中获取 Authorization header 值。我在实现时使用 cookie 方式,只需要实现 BearerTokenResolver 接口。

🎃 如果是使用 AbstractAuthenticationProcessingFilter 时,就自己在 attemptAuthentication() 方法中实现。

PART3. 组装授权令牌

如果是使用 CAS 或 UsernamePassword 验证,可以跳过这里,因为组装令牌的事情,Filter 里已经实现。就拿 CAS 来比如

// CASAuthenticationFilterpublic Authentication attemptAuthentication(HttpServletRequest request,                                             HttpServletResponse response)throws AuthenticationException, IOException {    //...boolean serviceTicketRequest = serviceTicketRequest(request, response);String username = serviceTicketRequest ? CAS_STATEFUL_IDENTIFIER : CAS_STATELESS_IDENTIFIER;String password = obtainArtifact(request);//...UsernamePasswordAuthenticationToken authRequest = UsernamePasswordAuthenticationToken.unauthenticated(      username, password);//...}

🔆 在令牌未被验证之前,令牌的初始化必须指定令牌并未完成验证。即 authenticated 属性为 false 。

🎃 如果是其他验证方式,则需要自己组装校验令牌,继承 AbstractAuthenticationToken 类。

PART4. 验证及验证后用户权限信息组装

如果是使用 CAS 验证,需要选择一下 AbstractCasProtocolUrlBasedTicketValidator 验证器。当然你也可以实现此 abstract 类,完成 ticket 验证。验证器的调用方是 CasAuthenticationProvider。为什么在此介绍 CasAuthenticationProvider🎃 因为基本上所有的验证都一定是实现 AuthenticationProvider 接口。🎃 用户权限信息的组装,是实现 AuthenticationUserDetailsService<T extends Authentication> 接口,从缓存或是数据库中查询用户或权限点信息组装 UserDetails。

🔆 验证通过后,可以通过在 Controller 方法上使用 @AuthenticationPrincipal 注解,或请求线程里 SecurityContextHolder.getContext().getAuthentication()来获取用户授权信息。@AuthenticationPrincipal 注解对应 UserDetails 对象,@CurrentSecurityContext 注解对应 SecurityContext 对象。

PART5. 验证成功或失败的处理实现

验证成功或失败后的处理方式,一般有几种,重定向首页或登录页面,注册或撤销 JWT token,放行后面的 filter 或 Controller。🎃 而 JWT token 签发注销的功能,只需实现 AuthenticationSuccessHandlerAuthenticationFailureHandler 两个接口。

PART6. 以上内容配置组装

🎃 配置组装通过继承 WebSecurityConfigurerAdapter 类,覆盖 init(WebSecurity builder) 方法完成 Filter、provider、handler 等注入。此处不多说,看代码应该就懂了。

以下以 CAS + OAuth2 组合方式的完整代码片段

public class TuscCasTicketValidator extends AbstractCasProtocolUrlBasedTicketValidator { public TuscCasTicketValidator(final String casServerUrlPrefix) {        // 设定 CAS server        super(casServerUrlPrefix);    }    protected String getUrlSuffix() {      // 验证路径      return "validate";    }    protected Assertion parseResponseFromServer(final String response)      throws TicketValidationException {        // 判定验证通过成果及结果反馈    }}
// bearer 验证需要public class CookieBearerTokenResolver implements BearerTokenResolver {    private static final String COOKIE_NAME_BEARER = "bearer";    @Override    public String resolve(HttpServletRequest request) {        if (request.getCookies() == null) {            return null;        }        return Arrays.stream(request.getCookies())                .filter(cookie -> StringUtils.equalsAnyIgnoreCase(cookie.getName(), COOKIE_NAME_BEARER))                .map(Cookie::getValue).findFirst().orElse(null);    }}
public class MakeTokenHandler extends FilterAuthSuccessHandler {  public void onAuthenticationSuccess(    HttpServletRequest request,    HttpServletResponse response,    Authentication authentication) throws ServletException, IOException {    //...    Jwt jwt = jwtEncoder.encode(      JwtEncoderParameters.from(jwsHeader, jwtClaimsSetBuilder.build()));  String token = jwt.getTokenValue();Cookie cookie = new Cookie("bearer", token);cookie.setPath("/");cookie.setMaxAge(cookieTimeoutSecond);cookie.setHttpOnly(false);response.addCookie(cookie);  }}public class DefaultAuthFailHandler implements AuthenticationFailureHandler, LogoutSuccessHandler {public void onAuthenticationFailure(    HttpServletRequest request,    HttpServletResponse response,    AuthenticationException exception) throws IOException, ServletException {    log.error("", exception);    if (exception instanceof InvalidBearerTokenException) {        Cookie cookie = new Cookie("bearer", null);        cookie.setMaxAge(0);        response.addCookie(cookie);        response.setStatus(HttpStatus.UNAUTHORIZED.value());        response.setContentType("text/plain;charset=utf-8");        try (PrintWriter writer = response.getWriter()) {            writer.write("登录已过期或被推出,需要重新登录验证!");        }        return;    }    // 记住登出或访问前的地址    response.sendRedirect("登录页面地址");  }}
// 重新签发 tokenpublic class JwtRenewFilter extends OncePerRequestFilter {protected void doFilterInternal(HttpServletRequest request,                                  HttpServletResponse response,                                  FilterChain filterChain)     throws ServletException, IOException {    //...    String bearerToken = bearerTokenResolver.resolve(request);    Jwt jwt = jwtDecoder.decode(bearerToken);        Instant expiresAt = jwt.getExpiresAt();        if (expiresAt.isBefore(Instant.now().plusSeconds(60))) {            String ticket = jwt.getClaimAsString("st");            try {                casTicketValidator.validate(ticket, serviceUrl);                renewJwt(jwt, response, jwtEncoder);            } catch (TicketValidationException e) {              //...            }        }  }}
@Configuration@EnableWebSecurity@AutoConfigureAfter(LoginBaseConfiguration.class)public class LoginConfiguration extends WebSecurityConfigurerAdapter {    @Resource    private HttpSecurity httpSecurity;    @Resource    private AuthenticationManager authenticationManager;    @Resource    private MakeTokenHandler makeTokenHandler    @Resource    private DefaultAuthFailHandler defaultAuthFailHandler;    @Resource    private AuthenticationDetailsSource<HttpServletRequest, WebAuthenticationDetails> webAuthenticationDetailsSource;    @Value("${xxxx}")    private String applicationServerUrl;    @Value("${xxxx}")    private String CASServerUrl;    // 12h    @Value("${login.jwt.cookieTimeoutSecond:43200}")    private int cookieTimeoutSecond;    @Value("${login.jwt.casDurationSecond:600}")    private int casDurationSecond;    @Override    public void init(WebSecurity builder) throws Exception {        BearerTokenAuthenticationFilter bearerTokenFilter =           new BearerTokenAuthenticationFilter(authenticationManager);      bearerTokenFilter.setAuthenticationDetailsSource(        dzdaWebAuthenticationDetailsSource);        BearerTokenResolver bearerTokenResolver = new CookieBearerTokenResolver();        bearerTokenFilter.setBearerTokenResolver(makeTokenHandler);        bearerTokenFilter.setAuthenticationFailureHandler(defaultAuthFailHandler);        AbstractAuthenticationProcessingFilter casAuthenticationFilter          = new CasAuthenticationFilter();        casAuthenticationFilter.setAuthenticationFailureHandler(defaultAuthFailHandler);        casAuthenticationFilter.setAuthenticationManager(authenticationManager);        casAuthenticationFilter.setFilterProcessesUrl("/login/cas");      casAuthenticationFilter.setAuthenticationDetailsSource(        dzdaWebAuthenticationDetailsSource);      casAuthenticationFilter.setAuthenticationSuccessHandler(        dzdaCasAuthenticationSuccessHandler);        JwtRenewFilter jwtRenewFilter = new JwtRenewFilter().          setBearerTokenResolver(bearerTokenResolver)          .setCasTicketValidator(new TuscCasTicketValidator(casServerUrl))          .setServiceUrl(applicationServerUrl)          .setCookieTimeoutSecond(cookieTimeoutSecond)          .setCasDurationSecond(casDurationSecond)          .setLocalDurationSecond(localDurationSecond);        httpSecurity.authenticationManager(authenticationManager)                .addFilterBefore(casAuthenticationFilter,                                  X509AuthenticationFilter.class)                .addFilterBefore(jwtRenewFilter, BearerTokenAuthenticationFilter.class)                .addFilterBefore(bearerTokenFilter, X509AuthenticationFilter.class)                .authorizeHttpRequests().anyRequest().authenticated()                .and().anonymous().disable()                .logout()                .deleteCookies("bearer", "JESSIONID")                .invalidateHttpSession(true)                .logoutUrl("logoutroute")                .logoutSuccessHandler(new DefaultAuthFailHandler(                  applicationServerUrl, casServerUrl))                .and().csrf().disable().cors();        builder.addSecurityFilterChainBuilder(httpSecurity);    }    @Bean    public CorsConfigurationSource corsConfigurationSource() {        CorsConfiguration configuration = new CorsConfiguration();        configuration.setAllowedOrigins(Arrays.asList("*"));        configuration.setAllowedMethods(Arrays.asList("*"));        configuration.setAllowedHeaders(Arrays.asList("*"));        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();        source.registerCorsConfiguration("/**", configuration);        return source;    } @Bean    public AuthenticationProvider casAuthenticationProvider(LoginServiceImpl loginService) {        CasAuthenticationProvider casAuthenticationProvider = new CasAuthenticationProvider();        casAuthenticationProvider.setAuthenticationUserDetailsService(new XXXCasUserDetailsService(loginService));        casAuthenticationProvider.setTicketValidator(new TuscCasTicketValidator(ssoUrl));        ServiceProperties serviceProperties = new ServiceProperties();        serviceProperties.setService(applicationServerUrl);        casAuthenticationProvider.setServiceProperties(serviceProperties);        casAuthenticationProvider.setKey("casAuthenticationProvider");        return casAuthenticationProvider;    }}

🔆 需要明确 Filter 的先后顺序,顺序不对可能会造成验证 bug,比如 renewFilter 应该在 BearerTokenAuthenticationFilter 之前。否则 renewFilter 就没有意义了。

]]>
- spring-security + code @@ -80,6 +115,8 @@ pre-security + code +
@@ -96,7 +133,7 @@ - spring-security + code @@ -109,6 +146,8 @@ relogin + code + @@ -125,17 +164,21 @@ - npm + code - tools - npm-link + code + + npm + + 前端 + @@ -152,7 +195,7 @@ - tools + 杂项 @@ -165,6 +208,8 @@ BFG + 杂项 + diff --git a/tags/BFG/index.html b/tags/BFG/index.html index 9f951b3..20be042 100644 --- a/tags/BFG/index.html +++ b/tags/BFG/index.html @@ -392,11 +392,11 @@
- + tools - 3 + 2 @@ -490,6 +490,78 @@ + + + code + 5 + + + + + + 杂项 + 1 + + + + + + 选型 + 1 + + + + + + npm + 1 + + + + + + 前端 + 1 + + + + + + mybatis + 1 + + + + + + mybatis-plus + 1 + + + + + + 自动填充 + 1 + + +
@@ -501,7 +573,7 @@
-
+
@@ -521,8 +593,8 @@ - @@ -558,7 +630,7 @@
  站点总字数: 8k + class="white-color">10.3k diff --git a/tags/cas/index.html b/tags/cas/index.html index 70cc69c..097b7ea 100644 --- a/tags/cas/index.html +++ b/tags/cas/index.html @@ -392,11 +392,11 @@
@@ -501,9 +573,9 @@
-
+
- +
@@ -515,14 +587,14 @@
-
+
@@ -553,8 +625,8 @@ - @@ -590,7 +662,7 @@
  站点总字数: 8k + class="white-color">10.3k diff --git a/tags/code/index.html b/tags/code/index.html new file mode 100644 index 0000000..388b4ca --- /dev/null +++ b/tags/code/index.html @@ -0,0 +1,1037 @@ + + + + + + + + + + + + + + + + + + + + 标签: code | beluga + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+ + 白鲸 + +
+ +
+ + + + + +
+
+
+
+ + + + + +
+
+ +
+ + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+ + + Redis 分布式锁你续约了吗 + + Redis 分布式锁你续约了吗 +
+
+
+
+ + 2024-01-31 + + + + + + + + + +
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+
+ +
+ + + npm-link VUEX watch 怎么不生效 + + npm-link VUEX watch 怎么不生效 +
+
+
+
+ + 2023-04-02 + + + + + + + + + +
+
+
+
+ +
+
+
+ + + + +
+ + +
+
+ Copyright © + + 2019-2024 + + beluga + | Powered by Hexo + | Theme Matery + + | 繁/简: + +
+ +   站点总字数: 10.3k + + + + + + + +  |  总访问量:  + + + + + +  |  总访问人数:  + + + +
+ + + +
+ +
+ +
+
+ +
+ + + + + + + + +
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tags/gitlab/index.html b/tags/gitlab/index.html index 1cad169..0b43882 100644 --- a/tags/gitlab/index.html +++ b/tags/gitlab/index.html @@ -392,11 +392,11 @@
@@ -501,7 +573,7 @@
-
+
@@ -521,8 +593,8 @@ - @@ -558,7 +630,7 @@
  站点总字数: 8k + class="white-color">10.3k diff --git a/tags/index.html b/tags/index.html index 76d3717..0a99e63 100644 --- a/tags/index.html +++ b/tags/index.html @@ -392,11 +392,11 @@
@@ -514,7 +586,7 @@ @@ -543,7 +615,7 @@
  站点总字数: 8k + class="white-color">10.3k diff --git a/tags/mybatis-plus/index.html b/tags/mybatis-plus/index.html new file mode 100644 index 0000000..94e9837 --- /dev/null +++ b/tags/mybatis-plus/index.html @@ -0,0 +1,909 @@ + + + + + + + + + + + + + + + + + + + + 标签: mybatis-plus | beluga + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+ + 白鲸 + +
+ +
+ + + + + +
+
+
+
+ + + + + +
+
+ +
+ + + + + + + + +
+ + + + +
+ + +
+
+ Copyright © + + 2019-2024 + + beluga + | Powered by Hexo + | Theme Matery + + | 繁/简: + +
+ +   站点总字数: 10.3k + + + + + + + +  |  总访问量:  + + + + + +  |  总访问人数:  + + + +
+ + + +
+ +
+ +
+
+ +
+ + + + + + + + +
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tags/mybatis/index.html b/tags/mybatis/index.html new file mode 100644 index 0000000..3adad60 --- /dev/null +++ b/tags/mybatis/index.html @@ -0,0 +1,909 @@ + + + + + + + + + + + + + + + + + + + + 标签: mybatis | beluga + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+ + 白鲸 + +
+ +
+ + + + + +
+
+
+
+ + + + + +
+
+ +
+ + + + + + + + +
+ + + + +
+ + +
+
+ Copyright © + + 2019-2024 + + beluga + | Powered by Hexo + | Theme Matery + + | 繁/简: + +
+ +   站点总字数: 10.3k + + + + + + + +  |  总访问量:  + + + + + +  |  总访问人数:  + + + +
+ + + +
+ +
+ +
+
+ +
+ + + + + + + + +
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tags/npm-link/index.html b/tags/npm-link/index.html index b36e210..718f751 100644 --- a/tags/npm-link/index.html +++ b/tags/npm-link/index.html @@ -392,11 +392,11 @@
@@ -501,7 +573,7 @@
-
+
@@ -521,8 +593,8 @@ - @@ -558,7 +630,7 @@
  站点总字数: 8k + class="white-color">10.3k diff --git a/categories/spring-security/index.html b/tags/npm/index.html similarity index 75% rename from categories/spring-security/index.html rename to tags/npm/index.html index ad4e51c..085f065 100644 --- a/categories/spring-security/index.html +++ b/tags/npm/index.html @@ -4,7 +4,7 @@ - + @@ -17,7 +17,7 @@ - 分类: spring-security | beluga + 标签: npm | beluga @@ -383,172 +383,224 @@ -
+ -
-
-
- -
- - - spring-boot-security OAuth2应用实现 - - spring-boot-security OAuth2应用实现 -
-
-
-
- - 🐭 背景项目上一直使用 CAS + 应用 session + nginx IP hash 组合方式实现伪集群部署。但这种方式也有一定的缺点,请求不够平均,应用使用异步处理方式,还必须将结果返回给发起的应用,否则前端无法拿到结果。这些都是 - -
-
- - 2023-04-10 - - - - - - - - - -
-
- - - - -
-
-
+
- +
- spring-security中遇见的耗时小坑 + npm-link VUEX watch 怎么不生效 - spring-security中遇见的耗时小坑 + npm-link VUEX watch 怎么不生效
-
- - 🍐 背景客户现场运维同事反馈某系统输入正确的用户名、密码后,无法进入系统首页。地址栏中地址却在 SSO server 和系统地址之间来回跳转,系统日志中也没有相关的日志提供线索。听到这里就晓得,不是一个运维同学在白盒的情况下,能解决的问题 - -
- 2023-04-10 + 2023-04-02 -
- - - -
@@ -578,7 +630,7 @@
  站点总字数: 8k + class="white-color">10.3k diff --git a/tags/oauth2/index.html b/tags/oauth2/index.html index bb3abd4..4fd6351 100644 --- a/tags/oauth2/index.html +++ b/tags/oauth2/index.html @@ -392,11 +392,11 @@
@@ -501,9 +573,9 @@
-
+
- +
@@ -515,14 +587,14 @@
- 2023-04-10 + 2023-04-11 - @@ -558,7 +630,7 @@
  站点总字数: 8k + class="white-color">10.3k diff --git a/tags/pre-security/index.html b/tags/pre-security/index.html index f85b8d6..54d9877 100644 --- a/tags/pre-security/index.html +++ b/tags/pre-security/index.html @@ -392,11 +392,11 @@
@@ -501,9 +573,9 @@
-
+
- +
@@ -515,14 +587,14 @@
- 2023-04-10 + 2023-04-11 - @@ -558,7 +630,7 @@
  站点总字数: 8k + class="white-color">10.3k diff --git a/tags/redis/index.html b/tags/redis/index.html index 0fc0af6..68f9659 100644 --- a/tags/redis/index.html +++ b/tags/redis/index.html @@ -392,11 +392,11 @@
@@ -501,7 +573,7 @@
-
+
@@ -521,8 +593,8 @@ - @@ -558,7 +630,7 @@
  站点总字数: 8k + class="white-color">10.3k diff --git a/tags/relogin/index.html b/tags/relogin/index.html index 1713027..18a20d7 100644 --- a/tags/relogin/index.html +++ b/tags/relogin/index.html @@ -392,11 +392,11 @@
@@ -501,7 +573,7 @@
-
+
@@ -521,8 +593,8 @@ - @@ -558,7 +630,7 @@
  站点总字数: 8k + class="white-color">10.3k diff --git a/tags/spring-security/index.html b/tags/spring-security/index.html index 4e59284..57315c0 100644 --- a/tags/spring-security/index.html +++ b/tags/spring-security/index.html @@ -392,11 +392,11 @@
@@ -501,9 +573,9 @@
-
+
- +
@@ -515,14 +587,14 @@
-
+
@@ -553,8 +625,8 @@ - @@ -590,7 +662,7 @@
  站点总字数: 8k + class="white-color">10.3k diff --git a/tags/tools/index.html b/tags/tools/index.html index 93d8b8a..687aafd 100644 --- a/tags/tools/index.html +++ b/tags/tools/index.html @@ -392,11 +392,11 @@
@@ -501,7 +573,7 @@
-
+
-
-
- - -
-
- -
- - - npm-link VUEX watch 怎么不生效 - - npm-link VUEX watch 怎么不生效 -
-
-
-
- - 2023-04-02 - - - - - - @@ -565,7 +605,7 @@
-
+
@@ -585,8 +625,8 @@ - @@ -622,7 +662,7 @@
  站点总字数: 8k + class="white-color">10.3k diff --git "a/tags/\345\210\206\345\270\203\345\274\217\351\224\201/index.html" "b/tags/\345\210\206\345\270\203\345\274\217\351\224\201/index.html" index cefdcd0..b7038fe 100644 --- "a/tags/\345\210\206\345\270\203\345\274\217\351\224\201/index.html" +++ "b/tags/\345\210\206\345\270\203\345\274\217\351\224\201/index.html" @@ -392,11 +392,11 @@
@@ -501,7 +573,7 @@
-
+
@@ -521,8 +593,8 @@ - @@ -558,7 +630,7 @@
  站点总字数: 8k + class="white-color">10.3k diff --git "a/tags/\345\211\215\347\253\257/index.html" "b/tags/\345\211\215\347\253\257/index.html" new file mode 100644 index 0000000..1cccae9 --- /dev/null +++ "b/tags/\345\211\215\347\253\257/index.html" @@ -0,0 +1,909 @@ + + + + + + + + + + + + + + + + + + + + 标签: 前端 | beluga + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+ + 白鲸 + +
+ +
+ + + + + +
+
+
+
+ + + + + +
+
+ +
+ + + + + + + + +
+ + + + +
+ + +
+
+ Copyright © + + 2019-2024 + + beluga + | Powered by Hexo + | Theme Matery + + | 繁/简: + +
+ +   站点总字数: 10.3k + + + + + + + +  |  总访问量:  + + + + + +  |  总访问人数:  + + + +
+ + + +
+ +
+ +
+
+ +
+ + + + + + + + +
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/tags/\346\235\202\351\241\271/index.html" "b/tags/\346\235\202\351\241\271/index.html" new file mode 100644 index 0000000..637386e --- /dev/null +++ "b/tags/\346\235\202\351\241\271/index.html" @@ -0,0 +1,909 @@ + + + + + + + + + + + + + + + + + + + + 标签: 杂项 | beluga + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+ + 白鲸 + +
+ +
+ + + + + +
+
+
+
+ + + + + +
+
+ +
+ + + + + + + + +
+ + + + +
+ + +
+
+ Copyright © + + 2019-2024 + + beluga + | Powered by Hexo + | Theme Matery + + | 繁/简: + +
+ +   站点总字数: 10.3k + + + + + + + +  |  总访问量:  + + + + + +  |  总访问人数:  + + + +
+ + + +
+ +
+ +
+
+ +
+ + + + + + + + +
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/tags/\350\207\252\345\212\250\345\241\253\345\205\205/index.html" "b/tags/\350\207\252\345\212\250\345\241\253\345\205\205/index.html" new file mode 100644 index 0000000..8e76d8b --- /dev/null +++ "b/tags/\350\207\252\345\212\250\345\241\253\345\205\205/index.html" @@ -0,0 +1,909 @@ + + + + + + + + + + + + + + + + + + + + 标签: 自动填充 | beluga + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+ + 白鲸 + +
+ +
+ + + + + +
+
+
+
+ + + + + +
+
+ +
+ + + + + + + + +
+ + + + +
+ + +
+
+ Copyright © + + 2019-2024 + + beluga + | Powered by Hexo + | Theme Matery + + | 繁/简: + +
+ +   站点总字数: 10.3k + + + + + + + +  |  总访问量:  + + + + + +  |  总访问人数:  + + + +
+ + + +
+ +
+ +
+
+ +
+ + + + + + + + +
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/categories/tools/index.html "b/tags/\351\200\211\345\236\213/index.html" similarity index 76% rename from categories/tools/index.html rename to "tags/\351\200\211\345\236\213/index.html" index c9485dd..3d7bf14 100644 --- a/categories/tools/index.html +++ "b/tags/\351\200\211\345\236\213/index.html" @@ -4,7 +4,7 @@ - + @@ -17,7 +17,7 @@ - 分类: tools | beluga + 标签: 选型 | beluga @@ -383,64 +383,197 @@ -
+ -
-
+ +
@@ -452,11 +585,6 @@
-
- - 编程多年,其实适合项目/自己/团队才是合适的。JSON 在 B/S 应用下,作为轻量级的数据交换方式。也应运而生不少序列化反序列化的 JSON 工具包。比如,json-lib、fastjson、gson、jackson 等。我用过的,主要是 - -
2023-05-18 @@ -465,79 +593,14 @@ - - - - -
-
- - - - -
-
- -
-
- -
- - - gitlab 上和项目大仓库说再见 - - gitlab 上和项目大仓库说再见 -
-
-
-
- - 🐱 背景git clone 项目耗时很长。原因,网速慢或是代码仓库文件很大(n+ G)。本篇文章就讲述如何给 gitlab 代码仓库减负。 -🐶 基础知识项目在 gitlab 中显示的仓库大小 = 项目文件总大小 + .git (隐藏)目 - -
-
- - 2023-03-27 - - - - - -
- - - -
@@ -567,7 +630,7 @@
  站点总字数: 8k + class="white-color">10.3k