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

sf.r2dbc.mapper.R2dbcDaoMapperImpl Maven / Gradle / Ivy

The newest version!
package sf.r2dbc.mapper;

import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
import sf.core.DBObject;
import sf.database.dialect.DBDialect;
import sf.database.jdbc.sql.ModelSql;
import sf.r2dbc.dao.R2dbcClient;
import sf.r2dbc.sql.R2dbcCrud;
import sf.r2dbc.sql.R2dbcUtils;

import java.util.ArrayList;
import java.util.List;

/**
 * daoMapper实现类
 * @param 
 */
public class R2dbcDaoMapperImpl implements R2dbcDaoMapper {
    protected R2dbcClient r2dbcClient;
    protected Class domainClass;

    public R2dbcDaoMapperImpl(Class domainClass, R2dbcClient r2dbcClient) {
        this.domainClass = domainClass;
        this.r2dbcClient = r2dbcClient;
    }

    @Override
    public Mono merge(T entity) {
        return getR2dbcClient().merge(entity);
    }

    @Override
    public Mono insert(T entity) {
        return getR2dbcClient().insert(entity);
    }

    @Override
    public Flux insertBatch(List list) {
        return getR2dbcClient().batchInsert(list);
    }

    @Override
    public Flux insertBatchFast(List list) {
        return getR2dbcClient().batchInsertFast(list);
    }

    @Override
    public Mono updateById(T entity) {
        return getR2dbcClient().update(entity);
    }

    @Override
    public Mono update(T entity) {
        return getR2dbcClient().update(entity);
    }

    @Override
    public Flux updateBatch(List list) {
        return getR2dbcClient().batchUpdate(list);
    }

    @Override
    public Mono delete(T entity) {
        return getR2dbcClient().delete(entity);
    }

    @Override
    public Mono deleteById(Object... key) {
        return getR2dbcClient().deleteByPrimaryKeys(domainClass, key);
    }

    @Override
    public Mono logicDelete(T entity) {
        return getR2dbcClient().logicDelete(entity);
    }

    @Override
    public Mono logicDeleteById(Object... key) {
        return getR2dbcClient().logicDeleteByPrimaryKeys(domainClass, key);
    }

    @Override
    public Flux deleteInBatch(Iterable entities) {
        return getR2dbcClient().batchDelete(asList(entities));
    }

    @Override
    public Mono deleteAllInBatch() {
        return getR2dbcClient().truncate(domainClass);
    }

    @Override
    public Mono unique(Object... keys) {
        return getR2dbcClient().selectByPrimaryKeys(domainClass, keys);
    }

    @Override
    public Mono single(T query) {
        return getR2dbcClient().selectOne(query);
    }

    @Override
    public Mono lock(T query) {
        return getR2dbcClient().selectOneForUpdate(query);
    }

    @Override
    public Mono count() {
        return getR2dbcClient().monoFunc(r2dbcConnection -> {
            DBDialect dbDialect = R2dbcUtils.getDBDialect(r2dbcConnection);
            String sql = ModelSql.getSelectCountSql(dbDialect, domainClass);
            return R2dbcCrud.getInstance().getCrudSql().selectOne(r2dbcConnection, Long.class, sql).defaultIfEmpty(0L);
        });
    }

    @Override
    public Mono count(T query) {
        return getR2dbcClient().selectCount(query);
    }

    @Override
    public Mono existsById(Object... id) {
        return getR2dbcClient().existsByPrimaryKeys(domainClass, id);
    }

    @Override
    public Mono exists(T query) {
        return getR2dbcClient().exists(query);
    }

    @Override
    public Flux selectList(T query) {
        return getR2dbcClient().selectList(query);
    }

    private  List asList(Iterable entities) {
        List list = new ArrayList<>();
        for (S entity : entities) {
            list.add(entity);
        }
        return list;
    }

    @Override
    public R2dbcClient getR2dbcClient() {
        return r2dbcClient;
    }

    @Override
    public Class getDomainClass() {
        return domainClass;
    }
}