package ${packageName}.mapper;

import ${packageName}.domain.${ClassName};
import ${packageName}.domain.vo.${ClassName}Vo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Collection;

/**
 * ${functionName}Mapper接口
 *
 * @author ${author}
 * @date ${datetime}
 */
public interface ${ClassName}Mapper extends BaseMapperPlus<${ClassName}, ${ClassName}Vo> {

    /**
     * 查询${functionName}列表（自定义条件）
     *
     * @param queryWrapper 条件
     * @return ${functionName}集合
     */
    List<${ClassName}Vo> selectCustom${ClassName}VoList(@Param(Constants.WRAPPER) Wrapper<${ClassName}> queryWrapper);

    /**
     * 根据ID查询${functionName}详情
     *
     * @param ${pkColumn.javaField} 主键ID
     * @return ${functionName}对象
     */
    ${ClassName}Vo selectCustom${ClassName}VoById(@Param("${pkColumn.javaField}") ${pkColumn.javaType} ${pkColumn.javaField});

    /**
     * 根据ID列表批量查询${functionName}
     *
     * @param ids ID集合
     * @return ${functionName}集合
     */
    List<${ClassName}Vo> selectCustom${ClassName}VoByIds(@Param("ids") Collection<${pkColumn.javaType}> ids);

    /**
     * 统计${functionName}记录数
     *
     * @param queryWrapper 查询条件
     * @return 记录总数
     */
    Long countCustom${ClassName}(@Param(Constants.WRAPPER) Wrapper<${ClassName}> queryWrapper);

    /**
     * 分页查询${functionName}（自定义条件）
     *
     * @param page         分页对象
     * @param queryWrapper 查询条件
     * @return 分页结果
     */
    Page<${ClassName}Vo> selectCustom${ClassName}VoPage(@Param("page") Page<${ClassName}> page, @Param(Constants.WRAPPER) Wrapper<${ClassName}> queryWrapper);

    /**
     * 批量插入${functionName}
     *
     * @param list ${functionName}对象集合
     * @return 影响行数
     */
    int batchInsert${ClassName}(@Param("list") List<${ClassName}> list);

    /**
     * 批量更新${functionName}
     *
     * @param list ${functionName}对象集合
     * @return 影响行数
     */
    int batchUpdate${ClassName}(@Param("list") List<${ClassName}> list);

    /**
     * 根据自定义条件删除${functionName}
     *
     * @param queryWrapper 删除条件
     * @return 影响行数
     */
    int deleteCustom${ClassName}(@Param(Constants.WRAPPER) Wrapper<${ClassName}> queryWrapper);

    /**
     * 根据ID列表批量删除${functionName}
     *
     * @param ids ID集合
     * @return 影响行数
     */
    int deleteCustom${ClassName}ByIds(@Param("ids") Collection<${pkColumn.javaType}> ids);

    /**
     * 检查${functionName}是否存在
     *
     * @param queryWrapper 查询条件
     * @return 是否存在
     */
    Boolean exists${ClassName}(@Param(Constants.WRAPPER) Wrapper<${ClassName}> queryWrapper);

#if($table.sub)
    /**
     * 批量插入${subTable.functionName}
     *
     * @param list ${subTable.functionName}对象集合
     * @return 影响行数
     */
    int batch${subClassName}(@Param("list") List<${subClassName}> list);
#end

}
