
cn.org.atool.fluent.mybatis.base.dao.IProtectedDao Maven / Gradle / Ivy
package cn.org.atool.fluent.mybatis.base.dao;
import cn.org.atool.fluent.mybatis.base.BatchCrud;
import cn.org.atool.fluent.mybatis.base.IEntity;
import cn.org.atool.fluent.mybatis.base.crud.BaseSqlProvider;
import cn.org.atool.fluent.mybatis.base.crud.IQuery;
import cn.org.atool.fluent.mybatis.base.crud.IUpdate;
import cn.org.atool.fluent.mybatis.base.mapper.IRichMapper;
import cn.org.atool.fluent.mybatis.base.model.FieldMapping;
import cn.org.atool.fluent.mybatis.functions.MapFunction;
import cn.org.atool.fluent.mybatis.model.StdPagedList;
import cn.org.atool.fluent.mybatis.model.TagPagedList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Stream;
/**
* IDaoProtected: 被限制在Dao类中使用的方法, 只允许在子类中调用,不暴露给更高层的Service外部直接访问
* *
* * !!!!!!!!!!!!
* * 理由:
* * 不希望在更高层Service中直接构造Query, Update等具体查询条件, 希望对外接口是语义化的
*
* @param 实体类
* @author Created by darui.wu on 2020/6/24.
*/
@SuppressWarnings({"rawtypes", "unused"})
public interface IProtectedDao {
/**
* insert into a_table(fields) select fields from b_table;
*
* @param fields 要插入的字段
* @param query select数据
* @return 拷贝插入的记录数
* @see BaseSqlProvider#insertSelect(Map)
*/
default int insertSelect(String[] fields, IQuery query) {
return this.mapper().insertSelect(fields, query);
}
/**
* insert into a_table(fields) select fields from b_table;
*
* @param fields 要插入的字段
* @param query select数据
* @return 拷贝插入的记录数
* @see BaseSqlProvider#insertSelect(Map)
*/
default int insertSelect(FieldMapping[] fields, IQuery query) {
return this.insertSelect(Stream.of(fields).map(c -> c.column).toArray(String[]::new), query);
}
/**
* 批量执行增删改操作
*
*
* 传入多个操作时, 需要数据库支持
* 比如MySql需要在jdbc url链接中附加设置 &allowMultiQueries=true
*
*
* @param crud 增删改操作
*/
default void batchCrud(BatchCrud crud) {
this.mapper().batchCrud(crud);
}
/**
* 根据条件query删除记录
*
* @param query 条件
* @return 删除记录数
*/
default int deleteBy(IQuery query) {
return this.mapper().delete(query);
}
/**
* 根据update设置更新记录
*
* @param updates 更新条件
* @return 最后一个更新, 成功记录数
*/
default int updateBy(IUpdate... updates) {
return this.mapper().updateBy(updates);
}
/**
* 根据update设置更新记录
*
* @param updates 更新条件
* @return 最后一个更新, 成功记录数
*/
default int updateBy(Collection updates) {
return this.mapper().updateBy(updates.toArray(new IUpdate[0]));
}
/**
* 根据query查询对应实例列表
*
* @param query 查询条件
* @return 实例列表
*/
default List listEntity(IQuery query) {
return this.mapper().listEntity(query);
}
/**
* 根据query查询记录列表, 返回Map对象列表
*
* @param query 查询条件
* @return map list
*/
default List