All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.github.dengchen2020.jdbc.base.ComplexJdbcRepository Maven / Gradle / Ivy

Go to download

jdbc扩展,基于spring-boot-starter-data-jdbc实现,提供CRUD通用操作,分页,内外连接查询,支持jpa注解,乐观锁,数据填充等功能

There is a newer version: 0.0.30
Show newest version
package io.github.dengchen2020.jdbc.base;

import com.querydsl.core.Tuple;
import com.querydsl.core.types.Expression;
import com.querydsl.core.types.OrderSpecifier;
import com.querydsl.core.types.Predicate;
import com.querydsl.sql.RelationalPath;
import com.querydsl.sql.SQLQuery;
import com.querydsl.sql.dml.SQLDeleteClause;
import com.querydsl.sql.dml.SQLUpdateClause;
import io.github.dengchen2020.core.support.model.PageParam;
import io.github.dengchen2020.core.support.model.SimplePage;
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.repository.NoRepositoryBean;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import java.io.Serializable;
import java.util.List;
import java.util.Optional;
import java.util.stream.Stream;

/**
 * 复杂Jdbc基础接口
 * @author dengchen
 * @since 2024/6/18
 */
@Transactional(propagation = Propagation.SUPPORTS)
@NoRepositoryBean
public interface ComplexJdbcRepository extends CrudRepository {

    /**
     * 最基础的查询构造器
     * @return SQLQuery
     */
    SQLQuery query();

    /**
     * 单表查询构造
     * @param expr querydsl查询Q类对象
     * @return SQLQuery
     */
     SQLQuery select(Expression expr);

    /**
     * 单表查询构造
     * @param exprs querydsl查询Q类对象
     * @return SQLQuery
     */
    SQLQuery select(Expression... exprs);

    /**
     * 去重查询
     * @param expr 条件
     * @return SQLQuery
     */
     SQLQuery selectDistinct(Expression expr);

    /**
     * 去重查询
     * @param exprs 条件
     * @return SQLQuery
     */
    SQLQuery selectDistinct(Expression... exprs);

    /**
     * select 0
     * @return SQLQuery
     */
    SQLQuery selectZero();

    /**
     * select 1
     * @return SQLQuery
     */
    SQLQuery selectOne();

    /**
     * 按条件查询单条数据
     * @param predicate 条件
     * @return Optional
     */
    Optional findOne(Predicate predicate);

    /**
     * 按条件查询
     * @param predicate 查询条件
     * @return Iterable
     */
    List findAll(Predicate predicate);

    /**
     * 按条件筛选查询全部
     * @param predicate 查询条件
     * @param orders 排序方式
     * @return Iterable
     */
    List findAll(Predicate predicate, OrderSpecifier... orders);

    /**
     * 按条件筛选查询全部
     * @param orders 排序方式
     * @return Iterable
     */
    List findAll(OrderSpecifier... orders);

    /**
     * 统计数量
     * @param predicate 查询条件
     * @return 数量
     */
    long count(Predicate predicate);

    /**
     * 是否存在
     * @param predicate 查询条件
     * @return true or false
     */
    boolean exists(Predicate predicate);

    /**
     * 单表查询构造
     * @param expr querydsl查询Q类对象
     * @return SQLQuery
     */
     SQLQuery selectFrom(RelationalPath expr);

    /**
     * 更新构造
     *
     * @param path  querydsl查询Q类对象
     * @param where 更新条件
     * @return SQLUpdateClause
     */
    SQLUpdateClause update(RelationalPath path, Predicate[] where);

    /**
     * 更新构造
     *
     * @param path  querydsl查询Q类对象
     * @param where 更新条件
     * @return SQLUpdateClause
     */
    SQLUpdateClause update(RelationalPath path, Predicate where);

    /**
     * 删除构造
     *
     * @param path  querydsl查询Q类对象
     * @param where 更新条件
     * @return SQLDeleteClause
     */
    SQLDeleteClause delete(RelationalPath path, Predicate[] where);

    /**
     * 删除构造
     *
     * @param path  querydsl查询Q类对象
     * @param where 更新条件
     * @return SQLDeleteClause
     */
    SQLDeleteClause delete(RelationalPath path, Predicate where);

    /**
     * 统一查询,支持分页
     * @param param 查询参数
     * @return SQLQuery
     */
    SQLQuery findAllQuery(P param);

    /**
     * Querydsl分页条件查询
     *
     * @param param 分页参数
     * @param o     排序方式
     * @return 分页后的数据
     */
    default SimplePage findAll(P param, OrderSpecifier... o) {
        SQLQuery query = findAllQuery(param);
        return pageList(query, param, o);
    }

    /**
     * Querydsl分页查询
     * @param query SQLQuery
     * @param param 分页参数
     * @param o 排序方式
     * @return SimplePage
     */
     SimplePage pageList(SQLQuery query, PageParam param, OrderSpecifier... o);

    /**
     * Querydsl分页条件查询
     *
     * @param param 分页参数
     * @param o     排序方式
     * @return 分页后的数据
     */
    SimplePage findAll(Predicate predicate, PageParam param, OrderSpecifier... o);

    /**
     * 返回流读取器
     * @param query SQLQuery
     * @param param 查询参数
     * @param o 排序方式
     * @return Stream
     */
     Stream streamList(SQLQuery query, PageParam param, OrderSpecifier... o);

    /**
     * 返回流读取器
     * @param predicate 条件
     * @param param 查询参数
     * @param o 排序方式
     * @return Stream
     */
    Stream findStream(Predicate predicate, PageParam param, OrderSpecifier... o);

    /**
     * 返回流读取器
     * @param param 查询参数
     * @param o 排序方式
     * @return Stream
     */
    Stream findStream(PageParam param, OrderSpecifier... o);

    /**
     * 返回流读取器
     * @param o 排序方式
     * @return Stream
     */
    Stream findStream(OrderSpecifier... o);

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy