hb0730 / boot-admin

BOOT-ADMIN是一个基于Spring Boot3和Vue3 的开源项目,项目采用前后端分离的模式,前端框架使用vue-pure-admin
MIT License
264 stars 87 forks source link

JsfPage 中的setSize 赋值错误,导致分页返回的size 值为current #29

Closed armran closed 6 months ago

armran commented 6 months ago
public JsfPage<T> setSize(long size) {
    this.size = size;
    return this;
}
armran commented 6 months ago

还有,BaseQuery 里 current 和size ,如果是0 也会报错

还有 Pageable page = QueryHelper.toPage(query); 如果只传分页 current 和size ,也会报错

armran commented 6 months ago

如果只传分页 没问题, 是我自己加了个 BetweenPredicateHandler 没做空数据验证 才报的错

hb0730 commented 6 months ago

还有,BaseQuery 里 current 和size ,如果是0 也会报错

还有 Pageable page = QueryHelper.toPage(query); 如果只传分页 current 和size ,也会报错

这个无非就是在QueryHelper.toPage(query);加之校验,current,size不允许为0

hb0730 commented 6 months ago

如果只传分页 没问题, 是我自己加了个 BetweenPredicateHandler 没做空数据验证 才报的错

这个其实有两个方法

 /**
     * 构造 {@code AND} 关系的 {@link Predicate} 实例的方法.
     *
     * @param criteriaBuilder {@link CriteriaBuilder} 实例
     * @param from            {@link From} 实例
     * @param fieldName       实体类的属性名
     * @param value           对应属性的值
     * @param annotation      前字段使用的注解
     * @param <Z>             范型 Z
     * @param <X>             范型 X
     * @return {@link Predicate} 实例
     */
    public <Z, X> Predicate buildPredicate(
            CriteriaBuilder criteriaBuilder, From<Z, X> from, String fieldName, @Nullable Object value,
            @Nullable Annotation annotation) {
        if (null == value) {
            return null;
        }
        return _buildPredicate(criteriaBuilder, from, fieldName, value);
    }

    /**
     * 构造 {@code AND} 关系的 {@link Predicate} 实例的方法.
     *
     * @param criteriaBuilder {@link CriteriaBuilder} 实例
     * @param from            {@link From} 实例
     * @param fieldName       属性字段名称
     * @param value           属性条件对应的值
     * @param <Z>             范型 Z
     * @param <X>             范型 X
     * @return {@link Predicate} 实例
     */
    public <Z, X> Predicate _buildPredicate(CriteriaBuilder criteriaBuilder, From<Z, X> from, String fieldName,
                                            @Nonnull Object value) {
        return null;
    }

这是因为


/**
 * 用于“等值条件”({@code field = 'xxx'})场景的注解.
 *
 * @author <a href="mailto:huangbing0730@gmail">hb0730</a>
 * @date 2024/4/27
 */
@Documented
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Equals {
    /**
     * 注解的实体字段属性名称,默认为空或空字符串时将使用属性名称.
     *
     * @return 字符串值
     */
    String value() default "";

    /**
     * 是否允许查询字段{@code  is NULL},默认为 {@code false}.
     *
     * @return 值
     */
    boolean allowNull() default false;

    /**
     * 是否使用驼峰命名,默认为 {@code true}.
     *
     * @return 值
     */
    boolean underCamel() default true;
}

中的boolean allowNull() default false; 如果为null则SQL为 value IS NULL

hb0730 commented 6 months ago

如果只传分页 没问题, 是我自己加了个 BetweenPredicateHandler 没做空数据验证 才报的错

还有就是如果需要做分页则使用QueryHelper.toPage(query); 如果只是查询则只需要QueryHelper.ofBean(query) ,如果结合两者才是 既要分页也要根据条件查询

armran commented 6 months ago

感谢回复

  1. current,size 我重写了 set方法 并且给了个默认值。
  2. 我在 BetweenPredicateHandler 加了空验证。
  3. QueryHelper.toPage(query); 我是根据你写的模板做的。没有问题。

想请教一下,您有没有 代码生成器? 我这里表挺多,而且字段比较乱,大小写,下划线驼峰 什么格式都有。 我想快速生成Dto,entity,和query。 写这个挺费时间的。

hb0730 commented 6 months ago

感谢回复

  1. current,size 我重写了 set方法 并且给了个默认值。
  2. 我在 BetweenPredicateHandler 加了空验证。
  3. QueryHelper.toPage(query); 我是根据你写的模板做的。没有问题。

想请教一下,您有没有 代码生成器? 我这里表挺多,而且字段比较乱,大小写,下划线驼峰 什么格式都有。 我想快速生成Dto,entity,和query。 写这个挺费时间的。

不好意思,这个暂时没得,你可以扩展 https://github.com/baomidou/generator 变成适合自己项目的代码生成器