package com.ag.dynamicmodule.service;

import javax.servlet.http.HttpServletRequest;

/**
 * @description: 批处理封装 executeBatch,基本维护 save
 * @author: WangNan
 * @create: 2019-04-10 16:20
 */
public interface IBaseService {
    /**
     * 带id保存
     * @param baseRepository
     */
    Object savewithid(BaseMapperRepository baseRepository);
    /**
     *  造一个有ID,tenancyId,createdBy,createdOn,updatedBy,updatedOn的 对象
     *  构造PojoBuilder的时候使用Class的方式构造
     * @param pojoBuilder  session构造
     * @return
     */
    Object buildObj(PojoBuilder pojoBuilder);

    /**
     * 给对象赋值：ID,tenancyId,createdBy,createdOn,updatedBy,updatedOn
     * 构造PojoBuilder的时候使用Object的方式构造
     * @param pojoBuilder
     * @return
     */
    Object initObj(PojoBuilder pojoBuilder);
    /**
     * 反射赋值
     * @param pojoBuilder
     * @param isInit    是否初始化,TRUE的话就造一个ID,tenancyId
     * @return
     */
    Object invokeObj(PojoBuilder pojoBuilder, Boolean isInit);

    /**
     *  mybatis批处理，动态构造条件
     * @param baseRepository
     * @return
     */
    String executeBatch(IBaseRepository baseRepository);

    /**
     * 普通表单保存方法：默认主键为："id"
     * @param baseRepository
     */
    void save(BaseMapperRepository baseRepository);

    /**
     *  针对主键不是id的
     * @param baseRepository
     * @param primaryName
     */
    void save(BaseMapperRepository baseRepository, String primaryName);

    /**
     * 普通表单新增
     * @param baseRepository
     */
    void insert(BaseMapperRepository baseRepository);
    /**
     * 普通表单新增自带id
     * @param baseRepository
     */
    void insertWithId(BaseMapperRepository baseRepository);


    /**
     * 普通表单修改
     * @param baseRepository
     */
    void update(BaseMapperRepository baseRepository);

    /**
     * 普通表单删除方法：默认主键为："id"
     * @param baseRepository
     */
    void delete(BaseMapperRepository baseRepository);

    void deleteBySomeone(BaseMapperRepository baseRepository, String someone);

    /**
     * 给bean赋值
     * @param bean
     * @param request
     * @return
     */
    Object setParameterValue(Object bean, HttpServletRequest request);
}
