springboot_Jooq增删改查

查询_fetchOptional

dao的父类
 


import com.google.common.base.Preconditions;
import com.qbsea.mysboot2common.api.model.PageQuery;
import org.jooq.Attachable;
import org.jooq.DSLContext;
import org.jooq.Field;
import org.jooq.Record;
import org.jooq.SelectQuery;
import org.jooq.Table;
import org.jooq.UpdatableRecord;
import org.jooq.impl.DSL;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DuplicateKeyException;

import java.util.Optional;

/**
 * Created by LiuQi on 18/1/3.
 */
public abstract class JooqDaoSupport {

    private DSLContext create;

    protected DSLContext getCreate() {
        return create;
    }

    @Autowired
    protected void setCreate(DSLContext create) {
        this.create = create;
    }

    public <A extends Attachable> A attach(A attachable) {
        Preconditions.checkArgument(attachable != null, "attachable can not be null");
        attachable.attach(create.configuration());
        return attachable;
    }

    public <R extends UpdatableRecord<R>> R insert(R record, Field<?>... fields) {
        record = attach(record);
        if (fields == null || fields.length == 0) {
            record.insert();
        } else {
            record.insert(fields);
        }
        return record;
    }

    public <R extends UpdatableRecord<R>> R update(R record, Field<?>... fields) {
        record = attach(record);
        if (fields == null || fields.length == 0) {
            record.update();
        } else {
            record.update(fields);
        }
        return record;
    }

    public <R extends UpdatableRecord<R>> R insertOrUpdate(R record, Field<?>... fields) {
        record = attach(record);
        try {
            insert(record, fields);
        } catch (DuplicateKeyException e) {
            update(record, fields);
        }
        return record;
    }

    protected SelectQuery<?> pagination(SelectQuery<?> selectQuery, PageQuery<?> pageQuery) {
        if (pageQuery.getSortField() != null) {
            Field<Object> field = DSL.field(pageQuery.getSortField());
            if (pageQuery.isDesc()) {
                selectQuery.addOrderBy(field.desc());
            } else {
                selectQuery.addOrderBy(field.asc());
            }
        }
        selectQuery.addLimit(pageQuery.getOffset(), pageQuery.getValidPageSize());
        return selectQuery;
    }

    public <R extends Record> Optional<R> findById(Table<R> table, long id) {
        return getCreate().fetchOptional(table, DSL.field("id").eq(id));
    }

}

分页相关类



import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data;
import org.jooq.Condition;
import org.jooq.impl.DSL;


import java.io.Serializable;

/**
 * @author LiuQi
 */
@Data
public class PageQuery<Q extends PageQuery.JooqConditionBuilder> implements Serializable {

	public static final int DEFAULT_PAGE_SIZE = 10;

	/**
	 * 分页大小
	 */
	private int pageSize;

	/**
	 * 页数
	 */
	private int pageNo;

	/**
	 * 排序字段名
	 */
	private String sortField;

	/**
	 * 是否倒序,默认正序
	 */
	private boolean desc;

	/**
	 * 查询条件
	 */
	private Q query;

	@JsonIgnore
	public int getValidPageNo() {
		return pageNo <= 0 ? 1 : pageNo;
	}

	@JsonIgnore
	public int getValidPageSize() {
		return pageSize <= 0 ? DEFAULT_PAGE_SIZE : pageSize;
	}

	@JsonIgnore
	public int getOffset() {
		return (getValidPageNo() - 1) * getValidPageSize();
	}

	@JsonIgnore
	public Condition getJooqCondition() {
		return query == null ? DSL.trueCondition() : query.buildJooqCondition();
	}

	@FunctionalInterface
	public interface JooqConditionBuilder extends Serializable {
		/**
		 * 根据查询条件创建jOOQ的{@link Condition}。
		 *
		 * @return
		 */
		Condition buildJooqCondition();
	}

}

猜你喜欢

转载自blog.csdn.net/maqingbin8888/article/details/82784019