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

com.gitee.qdbp.jdbc.api.CrudDao Maven / Gradle / Ivy

package com.gitee.qdbp.jdbc.api;

import java.io.Serializable;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import com.gitee.qdbp.able.exception.ServiceException;
import com.gitee.qdbp.able.jdbc.condition.DbUpdate;
import com.gitee.qdbp.able.jdbc.condition.DbWhere;
import com.gitee.qdbp.able.jdbc.fields.Fields;
import com.gitee.qdbp.able.jdbc.ordering.OrderPaging;
import com.gitee.qdbp.able.jdbc.ordering.Orderings;
import com.gitee.qdbp.able.jdbc.paging.PageList;
import com.gitee.qdbp.able.jdbc.paging.Paging;
import com.gitee.qdbp.jdbc.model.ValidStrategy;
import com.gitee.qdbp.jdbc.plugins.BatchInsertExecutor;
import com.gitee.qdbp.jdbc.plugins.BatchUpdateExecutor;
import com.gitee.qdbp.jdbc.plugins.DbConditionConverter;
import com.gitee.qdbp.jdbc.plugins.DbPluginHelper;
import com.gitee.qdbp.jdbc.plugins.SqlDialect;
import com.gitee.qdbp.jdbc.sql.build.CrudSqlHelper;
import com.gitee.qdbp.jdbc.utils.ParseTools;

/**
 * 基础增删改查数据库操作
 *
 * @author 赵卉华
 * @version 190601
 */
public interface CrudDao {

    /** 获取SQL方言处理类 **/
    SqlDialect sqlDialect();

    /** 获取SQL生成工具 **/
    CrudSqlHelper sqlHelper();

    /** 获取插件容器 **/
    DbPluginHelper plugins();

    /**
     * 根据主键编号获取对象
* 注意: 默认查询条件由entityFieldFillExecutor添加, 只查有效项
* SELECT {columnNames} FROM {tableName} WHERE ID={id} AND DATA_STATE='E' * * @param id 主键编号 * @return 实体对象 */ T findById(Serializable id) throws ServiceException; /** * 根据主键编号获取对象
* 注意: 默认查询条件由entityFieldFillExecutor添加, 只查有效项
* SELECT {columnNames} FROM {tableName} WHERE ID={id} AND DATA_STATE='E' * * @param fields 查询的字段
* 全部字段传入Fields.ALL
* 指定字段传入IncludeFields对象, 如只查询ID,USER_CODE字段: new IncludeFields("id,userCode");
* 排除字段传入ExcludeFields对象, 如排除USER_REMARK字段: new ExcludeFields("userRemark");
* @param id 主键编号 * @return 实体对象 */ T findById(Fields fields, Serializable id) throws ServiceException; /** * 根据查询条件获取对象
* 注意: 默认查询条件由entityFieldFillExecutor添加, 只查有效项
* SELECT {columnNames} FROM {tableName} WHERE {whereConditions} AND DATA_STATE='E' * * @param where 查询条件
* 如果没有查询条件应传入DbWhere.NONE
* 由实体类转换为DbWhere: ParseTools.parseBeanToDbWhere(bean);
* 由请求参数转换为DbWhere: ParseTools.parseParamsToDbWhere(request.getParameterMap());
* * @return 实体对象 * @see ParseTools#parseBeanToDbWhere(Object) * @see ParseTools#parseParamsToDbWhere(Map, Class, boolean) */ T find(DbWhere where) throws ServiceException; /** * 根据查询条件获取对象, 只查询指定字段
* 注意: 默认查询条件由entityFieldFillExecutor添加, 只查有效项
* SELECT {columnNames} FROM {tableName} WHERE {whereConditions} AND DATA_STATE='E' * * @param fields 查询的字段
* 全部字段传入Fields.ALL
* 指定字段传入IncludeFields对象, 如只查询ID,USER_CODE字段: new IncludeFields("id,userCode");
* 排除字段传入ExcludeFields对象, 如排除USER_REMARK字段: new ExcludeFields("userRemark");
* @param where 查询条件
* 如果没有查询条件应传入DbWhere.NONE
* 由实体类转换为DbWhere: ParseTools.parseBeanToDbWhere(bean);
* 由请求参数转换为DbWhere: ParseTools.parseParamsToDbWhere(request.getParameterMap());
* @return 实体对象 * @see ParseTools#parseBeanToDbWhere(Object) * @see ParseTools#parseParamsToDbWhere(Map, Class, boolean) */ T find(Fields fields, DbWhere where) throws ServiceException; /** * 查找所有的实体列表, 不分页
* 注意: 默认查询条件由entityFieldFillExecutor添加, 只查有效项
* SELECT {columnNames} FROM {tableName} WHERE DATA_STATE='E' * * @return 列表数据 */ List listAll() throws ServiceException; /** * 查找所有的实体列表, 不分页, 只查询指定字段
* 注意: 默认查询条件由entityFieldFillExecutor添加, 只查有效项
* SELECT {columnNames} FROM {tableName} WHERE DATA_STATE='E' * * @param fields 查询的字段
* 全部字段传入Fields.ALL
* 指定字段传入IncludeFields对象, 如只查询ID,USER_CODE字段: new IncludeFields("id,userCode");
* 排除字段传入ExcludeFields对象, 如排除USER_REMARK字段: new ExcludeFields("userRemark");
* @return 列表数据 */ List listAll(Fields fields) throws ServiceException; /** * 查找所有的实体列表, 不分页
* 注意: 默认查询条件由entityFieldFillExecutor添加, 只查有效项
* SELECT {columnNames} FROM {tableName} WHERE DATA_STATE='E' ORDER BY {orderByConditions} * * @param orderings 排序条件
* 不需要排序时应传入Orderings.NONE
* 由字符串构造排序条件: Orderings.of("name asc, createTime desc");
* @return 列表数据 * @see Orderings#of(String) */ List listAll(Orderings orderings) throws ServiceException; /** * 查找所有的实体列表, 不分页, 只查询指定字段
* 注意: 默认查询条件由entityFieldFillExecutor添加, 只查有效项
* SELECT {columnNames} FROM {tableName} WHERE DATA_STATE='E' ORDER BY {orderByConditions} * * @param fields 查询的字段
* 全部字段传入Fields.ALL
* 指定字段传入IncludeFields对象, 如只查询ID,USER_CODE字段: new IncludeFields("id,userCode");
* 排除字段传入ExcludeFields对象, 如排除USER_REMARK字段: new ExcludeFields("userRemark");
* @param orderings 排序条件
* 不需要排序时应传入Orderings.NONE
* 由字符串构造排序条件: Orderings.of("name asc, createTime desc");
* @return 列表数据 * @see Orderings#of(String) */ List listAll(Fields fields, Orderings orderings) throws ServiceException; /** * 根据条件查询实体列表
* 注意: 默认查询条件由entityFieldFillExecutor添加, 只查有效项
*
* SELECT COUNT(*) FROM {tableName} WHERE {whereConditions} AND DATA_STATE='E'
* SELECT {columnNames} FROM {tableName}
*     WHERE {whereConditions} AND DATA_STATE='E'
*     ORDER BY {orderByConditions} * * @param where 查询条件
* 如果没有查询条件应传入DbWhere.NONE
* 由实体类转换为DbWhere: ParseTools.parseBeanToDbWhere(bean);
* 由请求参数转换为DbWhere: ParseTools.parseParamsToDbWhere(request.getParameterMap());
* @param orderings 排序条件
* 不需要排序时应传入Orderings.NONE
* 由字符串构造排序条件: Orderings.of("name asc, createTime desc");
* @return 列表数据 * @see ParseTools#parseBeanToDbWhere(Object) * @see ParseTools#parseParamsToDbWhere(Map, Class, boolean) * @see Orderings#of(String) */ List list(DbWhere where, Orderings orderings) throws ServiceException; /** * 根据条件分页查询实体列表
* 注意: 默认查询条件由entityFieldFillExecutor添加, 只查有效项
*
* SELECT COUNT(*) FROM {tableName} WHERE {whereConditions} AND DATA_STATE='E'
* SELECT {columnNames} FROM {tableName}
*     WHERE {whereConditions} AND DATA_STATE='E'
*     ORDER BY {orderByConditions} * * @param where 查询条件
* 如果没有查询条件应传入DbWhere.NONE
* 由实体类转换为DbWhere: ParseTools.parseBeanToDbWhere(bean);
* 由请求参数转换为DbWhere: ParseTools.parseParamsToDbWhere(request.getParameterMap());
* @param odpg 分页/排序条件
* 不需要分页也不需要排序时应传入OrderPaging.NONE
* 只分页不排序: OrderPaging.of(pageIndex, pageSize);
* 只排序不分页: OrderPaging.of("name asc, createTime desc");
* 分页加排序: OrderPaging.of(pageIndex, pageSize, "name asc, createTime desc");
* 不统计总记录数: OrderPaging.of(new Paging(pageIndex, pageSize, false), "name asc, createTime desc");
* @return 列表数据 * @see ParseTools#parseBeanToDbWhere(Object) * @see ParseTools#parseParamsToDbWhere(Map, Class, boolean) * @see OrderPaging#of(int, int, String) * @see OrderPaging#of(Paging, String) */ PageList list(DbWhere where, OrderPaging odpg) throws ServiceException; /** * 主要功能: 按指定字段查找所有的实体列表, 不分页
* 注意: 默认查询条件由entityFieldFillExecutor添加, 只查有效项
*
* SELECT {columnNames} FROM {tableName}
*     WHERE {whereConditions} AND DATA_STATE='E'
*     ORDER BY {orderByConditions}
* * @param fields 查询的字段
* 全部字段传入Fields.ALL
* 指定字段传入IncludeFields对象, 如只查询ID,USER_CODE字段: new IncludeFields("id,userCode");
* 排除字段传入ExcludeFields对象, 如排除USER_REMARK字段: new ExcludeFields("userRemark");
* @param where 查询条件
* 如果没有查询条件应传入DbWhere.NONE
* 由实体类转换为DbWhere: ParseTools.parseBeanToDbWhere(bean);
* 由请求参数转换为DbWhere: ParseTools.parseParamsToDbWhere(request.getParameterMap());
* @param orderings 排序条件
* 不需要排序时应传入Orderings.NONE
* 由字符串构造排序条件: Orderings.of("name asc, createTime desc");
* @return 列表数据 * @see ParseTools#parseBeanToDbWhere(Object) * @see ParseTools#parseParamsToDbWhere(Map, Class, boolean) * @see Orderings#of(String) */ List list(Fields fields, DbWhere where, Orderings orderings) throws ServiceException; /** * 主要功能: 根据条件分页按指定字段查询实体列表
* 注意: 默认查询条件由entityFieldFillExecutor添加, 只查有效项
*
* SELECT COUNT(*) FROM {tableName} WHERE {whereConditions} AND DATA_STATE='E'
* SELECT {columnNames} FROM {tableName}
*     WHERE {whereConditions} AND DATA_STATE='E'
*     ORDER BY {orderByConditions}
* * @param fields 查询的字段
* 全部字段传入Fields.ALL
* 指定字段传入IncludeFields对象, 如只查询ID,USER_CODE字段: new IncludeFields("id,userCode");
* 排除字段传入ExcludeFields对象, 如排除USER_REMARK字段: new ExcludeFields("userRemark");
* @param where 查询条件
* 如果没有查询条件应传入DbWhere.NONE
* 由实体类转换为DbWhere: ParseTools.parseBeanToDbWhere(bean);
* 由请求参数转换为DbWhere: ParseTools.parseParamsToDbWhere(request.getParameterMap());
* @param odpg 分页/排序条件
* 不需要分页也不需要排序时应传入OrderPaging.NONE
* 只分页不排序: OrderPaging.of(pageIndex, pageSize);
* 只排序不分页: OrderPaging.of("name asc, createTime desc");
* 分页加排序: OrderPaging.of(pageIndex, pageSize, "name asc, createTime desc");
* 不统计总记录数: OrderPaging.of(new Paging(pageIndex, pageSize, false), "name asc, createTime desc");
* @return 列表数据 * @see ParseTools#parseBeanToDbWhere(Object) * @see ParseTools#parseParamsToDbWhere(Map, Class, boolean) * @see OrderPaging#of(int, int, String) * @see OrderPaging#of(Paging, String) */ PageList list(Fields fields, DbWhere where, OrderPaging odpg) throws ServiceException; /** * 主要功能: 根据ID查找所有的实体列表
* 注意: 默认查询条件由entityFieldFillExecutor添加, 只查有效项
*
* SELECT {columnNames} FROM {tableName}
*     WHERE ID IN ({ids}) AND DATA_STATE='E'
*     ORDER BY {orderByConditions}
* * @param ids ID列表 * @param orderings 排序条件
* 不需要排序时应传入Orderings.NONE
* 由字符串构造排序条件: Orderings.of("name asc, createTime desc");
* @return 列表数据 * @see ParseTools#parseBeanToDbWhere(Object) * @see ParseTools#parseParamsToDbWhere(Map, Class, boolean) * @see Orderings#of(String) */ List listByIds(Collection ids, Orderings orderings) throws ServiceException; /** * 主要功能: 根据ID按指定字段查找实体列表
* 注意: 默认查询条件由entityFieldFillExecutor添加, 只查有效项
*
* SELECT {columnNames} FROM {tableName}
*     WHERE ID IN ({ids}) AND DATA_STATE='E'
*     ORDER BY {orderByConditions}
* * @param fields 查询的字段
* 全部字段传入Fields.ALL
* 指定字段传入IncludeFields对象, 如只查询ID,USER_CODE字段: new IncludeFields("id,userCode");
* 排除字段传入ExcludeFields对象, 如排除USER_REMARK字段: new ExcludeFields("userRemark");
* @param ids ID列表 * @param orderings 排序条件
* 不需要排序时应传入Orderings.NONE
* 由字符串构造排序条件: Orderings.of("name asc, createTime desc");
* @return 列表数据 * @see ParseTools#parseBeanToDbWhere(Object) * @see ParseTools#parseParamsToDbWhere(Map, Class, boolean) * @see Orderings#of(String) */ List listByIds(Fields fields, Collection ids, Orderings orderings) throws ServiceException; /** * 根据条件查询某个字段的值
* 注意: 默认查询条件由entityFieldFillExecutor添加, 只查有效项
*
* SELECT {columnName} FROM {tableName}
*     WHERE {whereConditions} AND DATA_STATE='E' * * @param fieldName 指定字段名 * @param where 查询条件
* 如果没有查询条件应传入DbWhere.NONE
* 由实体类转换为DbWhere: ParseTools.parseBeanToDbWhere(bean);
* 由请求参数转换为DbWhere: ParseTools.parseParamsToDbWhere(request.getParameterMap());
* @param valueClazz 字段值类型 * @return 字段的值列表 * @see ParseTools#parseBeanToDbWhere(Object) * @see ParseTools#parseParamsToDbWhere(Map, Class, boolean) */ V findFieldValue(String fieldName, DbWhere where, Class valueClazz) throws ServiceException; /** * 根据条件查询某个字段的值列表
* 注意: 默认查询条件由entityFieldFillExecutor添加, 只查有效项
*
* SELECT {columnName} FROM {tableName}
*     WHERE {whereConditions} AND DATA_STATE='E'
*     ORDER BY {orderByConditions} * * @param fieldName 指定字段名 * @param distinct 是否去重 * @param where 查询条件
* 如果没有查询条件应传入DbWhere.NONE
* 由实体类转换为DbWhere: ParseTools.parseBeanToDbWhere(bean);
* 由请求参数转换为DbWhere: ParseTools.parseParamsToDbWhere(request.getParameterMap());
* @param orderings 排序条件
* 不需要排序时应传入Orderings.NONE
* 由字符串构造排序条件: Orderings.of("name asc, createTime desc");
* @param valueClazz 字段值类型 * @return 字段的值列表 * @see ParseTools#parseBeanToDbWhere(Object) * @see ParseTools#parseParamsToDbWhere(Map, Class, boolean) * @see Orderings#of(String) */ List listFieldValues(String fieldName, boolean distinct, DbWhere where, Orderings orderings, Class valueClazz) throws ServiceException; /** * 根据条件分页查询某个字段的值列表
* 注意: 默认查询条件由entityFieldFillExecutor添加, 只查有效项
*
* SELECT {columnName} FROM {tableName}
*     WHERE {whereConditions} AND DATA_STATE='E'
*     ORDER BY {orderByConditions} * * @param fieldName 指定字段名 * @param distinct 是否去重 * @param where 查询条件
* 如果没有查询条件应传入DbWhere.NONE
* 由实体类转换为DbWhere: ParseTools.parseBeanToDbWhere(bean);
* 由请求参数转换为DbWhere: ParseTools.parseParamsToDbWhere(request.getParameterMap());
* @param odpg 分页/排序条件
* 不需要分页也不需要排序时应传入OrderPaging.NONE
* 只分页不排序: OrderPaging.of(pageIndex, pageSize);
* 只排序不分页: OrderPaging.of("name asc, createTime desc");
* 分页加排序: OrderPaging.of(pageIndex, pageSize, "name asc, createTime desc");
* 不统计总记录数: OrderPaging.of(new Paging(pageIndex, pageSize, false), "name asc, createTime desc");
* @param valueClazz 字段值类型 * @return 字段的值列表 * @see ParseTools#parseBeanToDbWhere(Object) * @see ParseTools#parseParamsToDbWhere(Map, Class, boolean) * @see OrderPaging#of(int, int, String) * @see OrderPaging#of(Paging, String) */ PageList listFieldValues(String fieldName, boolean distinct, DbWhere where, OrderPaging odpg, Class valueClazz) throws ServiceException; /** * 递归查询所有子节点
* 注意: 查询结果包括startCode节点的自身记录, 如果不需要应在searchWhere条件排除
* ORACLE: START WITH {codeField} IN( {startCode} ) CONNECT BY PRIOR {codeField} = {parentField}
* DB2/SqlServer: 使用WITH递归
* MYSQL 8.0+/PostgreSQL: 使用WITH RECURSIVE递归
* MYSQL 8.0-: 使用存储过程RECURSIVE_LIST_CHILDREN_QUERY * * @param startCode 起始编号 * @param codeField 编号字段名 * @param parentField 上级编号字段名 * @param filterWhere 数据过滤条件, 过滤哪些数据参与递归 (如数据状态,租户编号等条件)
* @param searchWhere 结果搜索条件 (如用户输入的查询条件)
* 这些条件如果放在filterWhere中将无法生成完整的树
* @param orderings 排序条件
* 不需要排序时应传入Orderings.NONE
* 由字符串构造排序条件: Orderings.of("name asc, createTime desc");
* @return 子节点列表 * @see ParseTools#parseBeanToDbWhere(Object) * @see ParseTools#parseParamsToDbWhere(Map, Class, boolean) * @see Orderings#of(String) */ List listChildren(String startCode, String codeField, String parentField, DbWhere filterWhere, DbWhere searchWhere, Orderings orderings); /** * 递归查询所有子节点
* 注意: 查询结果包括startCode节点的自身记录, 如果不需要应在searchWhere条件排除
* ORACLE: START WITH {codeField} IN( {startCode} ) CONNECT BY PRIOR {codeField} = {parentField}
* DB2/SqlServer: 使用WITH递归
* MYSQL 8.0+/PostgreSQL: 使用WITH RECURSIVE递归
* MYSQL 8.0-: 使用存储过程RECURSIVE_LIST_CHILDREN_QUERY * * @param startCodes 起始编号 * @param codeField 编号字段名 * @param parentField 上级编号字段名 * @param filterWhere 数据过滤条件, 过滤哪些数据参与递归 (如数据状态,租户编号等条件)
* @param searchWhere 结果搜索条件 (如用户输入的查询条件)
* 这些条件如果放在filterWhere中将无法生成完整的树
* @return 子节点列表 * @see ParseTools#parseBeanToDbWhere(Object) * @see ParseTools#parseParamsToDbWhere(Map, Class, boolean) */ List listChildren(List startCodes, String codeField, String parentField, DbWhere filterWhere, DbWhere searchWhere, Orderings orderings); /** * 递归查询所有子节点编号
* 注意: 查询结果包括startCode节点的自身记录, 如果不需要应在searchWhere条件排除
* ORACLE: START WITH {codeField} IN( {startCode} ) CONNECT BY PRIOR {codeField} = {parentField}
* DB2/SqlServer: 使用WITH递归
* MYSQL 8.0+/PostgreSQL: 使用WITH RECURSIVE递归
* MYSQL 8.0-: 使用存储过程RECURSIVE_LIST_CHILDREN_QUERY * * @param startCode 起始编号 * @param codeField 编号字段名 * @param parentField 上级编号字段名 * @param filterWhere 数据过滤条件, 过滤哪些数据参与递归 (如数据状态,租户编号等条件)
* @param searchWhere 结果搜索条件 (如用户输入的查询条件)
* 这些条件如果放在filterWhere中将无法生成完整的树
* @param orderings 排序条件
* 不需要排序时应传入Orderings.NONE
* 由字符串构造排序条件: Orderings.of("name asc, createTime desc");
* @return 子节点编号 * @see ParseTools#parseBeanToDbWhere(Object) * @see ParseTools#parseParamsToDbWhere(Map, Class, boolean) * @see Orderings#of(String) */ List listChildrenCodes(String startCode, String codeField, String parentField, DbWhere filterWhere, DbWhere searchWhere, Orderings orderings); /** * 递归查询所有子节点编号
* 注意: 查询结果包括startCode节点的自身记录, 如果不需要应在searchWhere条件排除
* ORACLE: START WITH {codeField} IN( {startCode} ) CONNECT BY PRIOR {codeField} = {parentField}
* DB2/SqlServer: 使用WITH递归
* MYSQL 8.0+/PostgreSQL: 使用WITH RECURSIVE递归
* MYSQL 8.0-: 使用存储过程RECURSIVE_LIST_CHILDREN_QUERY * * @param startCodes 起始编号 * @param codeField 编号字段名 * @param parentField 上级编号字段名 * @param filterWhere 数据过滤条件, 过滤哪些数据参与递归 (如数据状态,租户编号等条件)
* @param searchWhere 结果搜索条件 (如用户输入的查询条件)
* 这些条件如果放在filterWhere中将无法生成完整的树
* @param orderings 排序条件
* 不需要排序时应传入Orderings.NONE
* 由字符串构造排序条件: Orderings.of("name asc, createTime desc");
* @return 子节点编号 * @see ParseTools#parseBeanToDbWhere(Object) * @see ParseTools#parseParamsToDbWhere(Map, Class, boolean) * @see Orderings#of(String) */ List listChildrenCodes(List startCodes, String codeField, String parentField, DbWhere filterWhere, DbWhere searchWhere, Orderings orderings); /** * 递归查询所有父节点 (如果未指定排序条件, 将会从顶级节点开始依次排列)
* 注意: 查询结果包括startCode节点的自身记录, 如果不需要应在searchWhere条件排除
* ORACLE: START WITH {codeField} IN( {startCode} ) CONNECT BY PRIOR {codeField} = {parentField}
* DB2/SqlServer: 使用WITH递归
* MYSQL 8.0+/PostgreSQL: 使用WITH RECURSIVE递归
* MYSQL 8.0-: 使用存储过程RECURSIVE_LIST_PARENTS_QUERY * * @param startCode 起始编号 * @param codeField 编号字段名 * @param parentField 上级编号字段名 * @param filterWhere 数据过滤条件, 过滤哪些数据参与递归 (如数据状态,租户编号等条件)
* @param searchWhere 结果搜索条件 (如用户输入的查询条件)
* 这些条件如果放在filterWhere中将无法生成完整的树
* @param orderings 排序条件 (如果未指定排序条件, 将会从顶级节点开始依次排列)
* 不需要排序时应传入Orderings.NONE
* 由字符串构造排序条件: Orderings.of("name asc, createTime desc");
* @return 父节点列表 * @see ParseTools#parseBeanToDbWhere(Object) * @see ParseTools#parseParamsToDbWhere(Map, Class, boolean) * @see Orderings#of(String) */ List listParents(String startCode, String codeField, String parentField, DbWhere filterWhere, DbWhere searchWhere, Orderings orderings); /** * 递归查询所有父节点 (如果未指定排序条件, 将会从顶级节点开始依次排列)
* 注意: 查询结果包括startCode节点的自身记录, 如果不需要应在searchWhere条件排除
* ORACLE: START WITH {codeField} IN( {startCode} ) CONNECT BY PRIOR {codeField} = {parentField}
* DB2/SqlServer: 使用WITH递归
* MYSQL 8.0+/PostgreSQL: 使用WITH RECURSIVE递归
* MYSQL 8.0-: 使用存储过程RECURSIVE_LIST_PARENTS_QUERY * * @param startCodes 起始编号 * @param codeField 编号字段名 * @param parentField 上级编号字段名 * @param filterWhere 数据过滤条件, 过滤哪些数据参与递归 (如数据状态,租户编号等条件)
* @param searchWhere 结果搜索条件 (如用户输入的查询条件)
* 这些条件如果放在filterWhere中将无法生成完整的树
* @param orderings 排序条件 (如果未指定排序条件, 将会从顶级节点开始依次排列)
* 不需要排序时应传入Orderings.NONE
* 由字符串构造排序条件: Orderings.of("name asc, createTime desc");
* @return 父节点列表 * @see ParseTools#parseBeanToDbWhere(Object) * @see ParseTools#parseParamsToDbWhere(Map, Class, boolean) */ List listParents(List startCodes, String codeField, String parentField, DbWhere filterWhere, DbWhere searchWhere, Orderings orderings); /** * 递归查询所有父节点编号 (如果未指定排序条件, 将会从顶级节点开始依次排列)
* 注意: 查询结果包括startCode节点的自身记录, 如果不需要应在searchWhere条件排除
* ORACLE: START WITH {codeField} IN( {startCode} ) CONNECT BY PRIOR {codeField} = {parentField}
* DB2/SqlServer: 使用WITH递归
* MYSQL 8.0+/PostgreSQL: 使用WITH RECURSIVE递归
* MYSQL 8.0-: 使用存储过程RECURSIVE_LIST_PARENTS_QUERY * * @param startCode 起始编号 * @param codeField 编号字段名 * @param parentField 上级编号字段名 * @param filterWhere 数据过滤条件, 过滤哪些数据参与递归 (如数据状态,租户编号等条件)
* @param searchWhere 结果搜索条件 (如用户输入的查询条件)
* 这些条件如果放在filterWhere中将无法生成完整的树
* @param orderings 排序条件 (如果未指定排序条件, 将会从顶级节点开始依次排列)
* 不需要排序时应传入Orderings.NONE
* 由字符串构造排序条件: Orderings.of("name asc, createTime desc");
* @return 父节点编号 * @see ParseTools#parseBeanToDbWhere(Object) * @see ParseTools#parseParamsToDbWhere(Map, Class, boolean) * @see Orderings#of(String) */ List listParentCodes(String startCode, String codeField, String parentField, DbWhere filterWhere, DbWhere searchWhere, Orderings orderings); /** * 递归查询所有父节点编号 (如果未指定排序条件, 将会从顶级节点开始依次排列)
* 注意: 查询结果包括startCode节点的自身记录, 如果不需要应在searchWhere条件排除
* ORACLE: START WITH {codeField} IN( {startCode} ) CONNECT BY PRIOR {codeField} = {parentField}
* DB2/SqlServer: 使用WITH递归
* MYSQL 8.0+/PostgreSQL: 使用WITH RECURSIVE递归
* MYSQL 8.0-: 使用存储过程RECURSIVE_LIST_PARENTS_QUERY * * @param startCodes 起始编号 * @param codeField 编号字段名 * @param parentField 上级编号字段名 * @param filterWhere 数据过滤条件, 过滤哪些数据参与递归 (如数据状态,租户编号等条件)
* @param searchWhere 结果搜索条件 (如用户输入的查询条件)
* 这些条件如果放在filterWhere中将无法生成完整的树
* @param orderings 排序条件 (如果未指定排序条件, 将会从顶级节点开始依次排列)
* 不需要排序时应传入Orderings.NONE
* 由字符串构造排序条件: Orderings.of("name asc, createTime desc");
* @return 父节点编号 * @see ParseTools#parseBeanToDbWhere(Object) * @see ParseTools#parseParamsToDbWhere(Map, Class, boolean) * @see Orderings#of(String) */ List listParentCodes(List startCodes, String codeField, String parentField, DbWhere filterWhere, DbWhere searchWhere, Orderings orderings); /** * 根据条件统计实体数量
* 注意: 默认查询条件由entityFieldFillExecutor添加, 只查有效项
* SELECT COUNT(*) FROM {tableName} WHERE {whereConditions} AND DATA_STATE='E' * * @param where 查询条件
* 如果没有查询条件应传入DbWhere.NONE
* 由实体类转换为DbWhere: ParseTools.parseBeanToDbWhere(bean);
* 由请求参数转换为DbWhere: ParseTools.parseParamsToDbWhere(request.getParameterMap());
* @return 数据数量 * @see ParseTools#parseBeanToDbWhere(Object) * @see ParseTools#parseParamsToDbWhere(Map, Class, boolean) */ int count(DbWhere where) throws ServiceException; /** * 根据条件分组统计实体数量
* 注意: 默认查询条件由entityFieldFillExecutor添加, 只查有效项
* SELECT {groupByColumnName}, COUNT(*) FROM {tableName}
*     WHERE {whereConditions} AND DATA_STATE='E' GROUP BY {groupByColumnName} * * @param groupBy 分组条件 * @param where 查询条件
* 如果没有查询条件应传入DbWhere.NONE
* 由实体类转换为DbWhere: ParseTools.parseBeanToDbWhere(bean);
* 由请求参数转换为DbWhere: ParseTools.parseParamsToDbWhere(request.getParameterMap());
* @return 分组统计结果 * @see ParseTools#parseBeanToDbWhere(Object) * @see ParseTools#parseParamsToDbWhere(Map, Class, boolean) */ Map groupCount(String groupBy, DbWhere where) throws ServiceException; /** * 保存实体对象
* 注意: 如果主键编号为空将会自动生成
* 注意: entity将会自动由entityFieldFillExecutor填充创建参数(创建人/创建时间等)
* 注意: 默认创建参数由entityFieldFillExecutor添加, 如dataState=DataState.NORMAL
* INSERT INTO {tableName}({columnNames}) VALUES ({fieldValues}) * * @param entity 实体对象 * @return 返回主键编号 * @throws ServiceException 操作失败 * @see DbConditionConverter#convertBeanToInsertMap(Object) 参数转换说明 */ String insert(T entity) throws ServiceException; /** * 保存实体对象
* 注意: 如果主键编号为空将会自动生成
* 注意: 默认创建参数由entityFieldFillExecutor添加, 如dataState=DataState.NORMAL
* INSERT INTO {tableName}({columnNames}) VALUES ({fieldValues}) * * @param entity 实体对象 * @param fillCreateParams 是否自动填充创建参数(创建人/创建时间等) * @return 返回主键编号 * @throws ServiceException 操作失败 * @see DbConditionConverter#convertBeanToInsertMap(Object) 参数转换说明 */ String insert(T entity, boolean fillCreateParams) throws ServiceException; /** * 保存实体对象
* 注意: 如果主键编号为空将会自动生成
* 注意: entity将会自动由entityFieldFillExecutor填充创建参数(创建人/创建时间等)
* 注意: 默认创建参数由entityFieldFillExecutor添加, 如dataState=DataState.NORMAL
* INSERT INTO {tableName}({columnNames}) VALUES ({fieldValues}) * * @param entity 实体对象 * @return 返回主键编号 * @throws ServiceException 操作失败 * @see DbConditionConverter#convertBeanToInsertMap(Object) 参数转换说明 */ String insert(Map entity) throws ServiceException; /** * 保存实体对象
* 注意: 如果主键编号为空将会自动生成
* 注意: 默认创建参数由entityFieldFillExecutor添加, 如dataState=DataState.NORMAL
* INSERT INTO {tableName}({columnNames}) VALUES ({fieldValues}) * * @param entity 实体对象 * @param fillCreateParams 是否自动填充创建参数(创建人/创建时间等) * @return 返回主键编号 * @throws ServiceException 操作失败 * @see DbConditionConverter#convertBeanToInsertMap(Object) 参数转换说明 */ String insert(Map entity, boolean fillCreateParams) throws ServiceException; /** * 保存实体对象
* 注意: 如果主键编号为空将会自动生成
* 注意: entity将会自动由entityFieldFillExecutor填充创建参数(创建人/创建时间等)
* 注意: 默认创建参数由entityFieldFillExecutor添加, 如dataState=DataState.NORMAL
* INSERT INTO {tableName}({columnNames}) VALUES ({fieldValues}) * * @param entity 实体对象 * @param validStrategy 校验处理策略
* 注意: 由于@Column的length/precision/scale有默认值, 一旦启用, 则所有字段都需要覆盖设置! * @return 返回主键编号 * @throws ServiceException 操作失败 * @see DbConditionConverter#convertBeanToInsertMap(Object) 参数转换说明 */ String insert(T entity, ValidStrategy validStrategy) throws ServiceException; /** * 保存实体对象
* 注意: 如果主键编号为空将会自动生成
* 注意: 默认创建参数由entityFieldFillExecutor添加, 如dataState=DataState.NORMAL
* INSERT INTO {tableName}({columnNames}) VALUES ({fieldValues}) * * @param entity 实体对象 * @param validStrategy 校验处理策略
* 注意: 由于@Column的length/precision/scale有默认值, 一旦启用, 则所有字段都需要覆盖设置! * @param fillCreateParams 是否自动填充创建参数(创建人/创建时间等) * @return 返回主键编号 * @throws ServiceException 操作失败 * @see DbConditionConverter#convertBeanToInsertMap(Object) 参数转换说明 */ String insert(T entity, ValidStrategy validStrategy, boolean fillCreateParams) throws ServiceException; /** * 保存实体对象
* 注意: 如果主键编号为空将会自动生成
* 注意: entity将会自动由entityFieldFillExecutor填充创建参数(创建人/创建时间等)
* 注意: 默认创建参数由entityFieldFillExecutor添加, 如dataState=DataState.NORMAL
* INSERT INTO {tableName}({columnNames}) VALUES ({fieldValues}) * * @param entity 实体对象 * @param validStrategy 校验处理策略
* 注意: 由于@Column的length/precision/scale有默认值, 一旦启用, 则所有字段都需要覆盖设置! * @return 返回主键编号 * @throws ServiceException 操作失败 * @see DbConditionConverter#convertBeanToInsertMap(Object) 参数转换说明 */ String insert(Map entity, ValidStrategy validStrategy) throws ServiceException; /** * 保存实体对象
* 注意: 如果主键编号为空将会自动生成
* 注意: 默认创建参数由entityFieldFillExecutor添加, 如dataState=DataState.NORMAL
* INSERT INTO {tableName}({columnNames}) VALUES ({fieldValues}) * * @param entity 实体对象 * @param validStrategy 校验处理策略
* 注意: 由于@Column的length/precision/scale有默认值, 一旦启用, 则所有字段都需要覆盖设置! * @param fillCreateParams 是否自动填充创建参数(创建人/创建时间等) * @return 返回主键编号 * @throws ServiceException 操作失败 * @see DbConditionConverter#convertBeanToInsertMap(Object) 参数转换说明 */ String insert(Map entity, ValidStrategy validStrategy, boolean fillCreateParams) throws ServiceException; /** * 根据主键编号更新实体对象
* 注意: 如果主键编号为空将会报错
* 注意: entity将会自动由entityFieldFillExecutor填充更新参数(修改人/修改时间等)
* 注意: 默认查询条件由entityFieldFillExecutor添加, 默认只处理有效项
* UPDATE {tableName} SET {columnName}={fieldValue}, ... WHERE ID={id} AND DATA_STATE='E' * * @param entity 实体对象 * @return 受影响行数 * @throws ServiceException 操作失败 * @see DbConditionConverter#convertBeanToDbUpdate(Object) 参数转换说明 */ int update(T entity) throws ServiceException; /** * 根据主键编号更新实体对象
* 注意: 如果主键编号为空将会报错
* 注意: 默认查询条件由entityFieldFillExecutor添加, 默认只处理有效项
* UPDATE {tableName} SET {columnName}={fieldValue}, ... WHERE ID={id} AND DATA_STATE='E' * * @param entity 实体对象 * @param fillUpdateParams 是否自动填充更新参数(修改人/修改时间等) * @param errorOnUnaffected 受影响行数为0时是否抛异常 * @return 受影响行数 * @throws ServiceException 操作失败 * @see DbConditionConverter#convertBeanToDbUpdate(Object) 参数转换说明 */ int update(T entity, boolean fillUpdateParams, boolean errorOnUnaffected) throws ServiceException; /** * 根据主键编号更新实体对象
* 注意: 如果主键编号为空将会报错
* 注意: entity将会自动由entityFieldFillExecutor填充更新参数(修改人/修改时间等)
* 注意: 默认查询条件由entityFieldFillExecutor添加, 默认只处理有效项
* UPDATE {tableName} SET {columnName}={fieldValue}, ... WHERE ID={id} AND DATA_STATE='E' * * @param entity 实体对象 * @return 受影响行数 * @throws ServiceException 操作失败 * @see DbConditionConverter#parseMapToDbUpdate(Map) 参数转换说明 */ int update(Map entity) throws ServiceException; /** * 根据主键编号更新实体对象
* 注意: 如果主键编号为空将会报错
* 注意: 默认查询条件由entityFieldFillExecutor添加, 默认只处理有效项
* UPDATE {tableName} SET {columnName}={fieldValue}, ... WHERE ID={id} AND DATA_STATE='E' * * @param entity 实体对象 * @param fillUpdateParams 是否自动填充更新参数(修改人/修改时间等) * @param errorOnUnaffected 受影响行数为0时是否抛异常 * @return 受影响行数 * @throws ServiceException 操作失败 * @see DbConditionConverter#parseMapToDbUpdate(Map) 参数转换说明 */ int update(Map entity, boolean fillUpdateParams, boolean errorOnUnaffected) throws ServiceException; /** * 根据条件批量更新实体对象
* 注意: entity将会自动由entityFieldFillExecutor填充更新参数(修改人/修改时间等)
* 注意: 默认查询条件由entityFieldFillExecutor添加, 默认只处理有效项
* UPDATE {tableName} SET {columnName}={fieldValue}, ... WHERE {whereConditions} AND DATA_STATE='E' * * @param entity 实体对象 * @param where 匹配条件 * @return 受影响行数 * @throws ServiceException 操作失败 * @see DbConditionConverter#convertBeanToDbUpdate(Object) entity参数转换说明 * @see DbWhere where条件参数转换说明 */ int update(T entity, DbWhere where) throws ServiceException; /** * 根据条件批量更新实体对象
* 注意: 默认查询条件由entityFieldFillExecutor添加, 默认只处理有效项
* UPDATE {tableName} SET {columnName}={fieldValue}, ... WHERE {whereConditions} AND DATA_STATE='E' * * @param entity 实体对象 * @param where 匹配条件 * @param fillUpdateParams 是否自动填充更新参数(修改人/修改时间等) * @param errorOnUnaffected 受影响行数为0时是否抛异常 * @return 受影响行数 * @throws ServiceException 操作失败 * @see DbConditionConverter#convertBeanToDbUpdate(Object) entity参数转换说明 * @see DbWhere where条件参数转换说明 */ int update(T entity, DbWhere where, boolean fillUpdateParams, boolean errorOnUnaffected) throws ServiceException; /** * 根据条件批量更新实体对象
* 注意: entity将会自动由entityFieldFillExecutor填充更新参数(修改人/修改时间等)
* 注意: 默认查询条件由entityFieldFillExecutor添加, 默认只处理有效项
* UPDATE {tableName} SET {columnName}={fieldValue}, ... WHERE {whereConditions} AND DATA_STATE='E' * * @param entity 更新内容
* 由实体类转换为DbUpdate: ParseTools.parseBeanToDbUpdate(bean);
* 由请求参数转换为DbUpdate: ParseTools.parseParamsToDbUpdate(request.getParameterMap());
* @param where 匹配条件 * @return 受影响行数 * @throws ServiceException 操作失败 * @see ParseTools#parseBeanToDbUpdate(Object) * @see ParseTools#parseParamsToDbUpdate(Map, Class, boolean) */ int update(DbUpdate entity, DbWhere where) throws ServiceException; /** * 根据条件批量更新实体对象
* 注意: 默认查询条件由entityFieldFillExecutor添加, 默认只处理有效项
* UPDATE {tableName} SET {columnName}={fieldValue}, ... WHERE {whereConditions} AND DATA_STATE='E' * * @param entity 更新内容
* 由实体类转换为DbUpdate: ParseTools.parseBeanToDbUpdate(bean);
* 由请求参数转换为DbUpdate: ParseTools.parseParamsToDbUpdate(request.getParameterMap());
* @param where 匹配条件 * @param fillUpdateParams 是否自动填充更新参数(修改人/修改时间等) * @param errorOnUnaffected 受影响行数为0时是否抛异常 * @return 受影响行数 * @throws ServiceException 操作失败 * @see ParseTools#parseBeanToDbUpdate(Object) * @see ParseTools#parseParamsToDbUpdate(Map, Class, boolean) */ int update(DbUpdate entity, DbWhere where, boolean fillUpdateParams, boolean errorOnUnaffected) throws ServiceException; /** * 根据主键编号更新实体对象
* 注意: 如果主键编号为空将会报错
* 注意: entity将会自动由entityFieldFillExecutor填充更新参数(修改人/修改时间等)
* 注意: 默认查询条件由entityFieldFillExecutor添加, 默认只处理有效项
* UPDATE {tableName} SET {columnName}={fieldValue}, ... WHERE ID={id} AND DATA_STATE='E' * * @param entity 实体对象 * @param validStrategy 校验处理策略
* 注意: 由于@Column的length/precision/scale有默认值, 一旦启用, 则所有字段都需要覆盖设置! * @return 受影响行数 * @throws ServiceException 操作失败 * @see DbConditionConverter#convertBeanToDbUpdate(Object) 参数转换说明 */ int update(T entity, ValidStrategy validStrategy) throws ServiceException; /** * 根据主键编号更新实体对象
* 注意: 如果主键编号为空将会报错
* 注意: 默认查询条件由entityFieldFillExecutor添加, 默认只处理有效项
* UPDATE {tableName} SET {columnName}={fieldValue}, ... WHERE ID={id} AND DATA_STATE='E' * * @param entity 实体对象 * @param validStrategy 校验处理策略
* 注意: 由于@Column的length/precision/scale有默认值, 一旦启用, 则所有字段都需要覆盖设置! * @param fillUpdateParams 是否自动填充更新参数(修改人/修改时间等) * @param errorOnUnaffected 受影响行数为0时是否抛异常 * @return 受影响行数 * @throws ServiceException 操作失败 * @see DbConditionConverter#convertBeanToDbUpdate(Object) 参数转换说明 */ int update(T entity, ValidStrategy validStrategy, boolean fillUpdateParams, boolean errorOnUnaffected) throws ServiceException; /** * 根据主键编号更新实体对象
* 注意: 如果主键编号为空将会报错
* 注意: entity将会自动由entityFieldFillExecutor填充更新参数(修改人/修改时间等)
* 注意: 默认查询条件由entityFieldFillExecutor添加, 默认只处理有效项
* UPDATE {tableName} SET {columnName}={fieldValue}, ... WHERE ID={id} AND DATA_STATE='E' * * @param entity 实体对象 * @param validStrategy 校验处理策略
* 注意: 由于@Column的length/precision/scale有默认值, 一旦启用, 则所有字段都需要覆盖设置! * @return 受影响行数 * @throws ServiceException 操作失败 * @see DbConditionConverter#parseMapToDbUpdate(Map) 参数转换说明 */ int update(Map entity, ValidStrategy validStrategy) throws ServiceException; /** * 根据主键编号更新实体对象
* 注意: 如果主键编号为空将会报错
* 注意: 默认查询条件由entityFieldFillExecutor添加, 默认只处理有效项
* UPDATE {tableName} SET {columnName}={fieldValue}, ... WHERE ID={id} AND DATA_STATE='E' * * @param entity 实体对象 * @param validStrategy 校验处理策略
* 注意: 由于@Column的length/precision/scale有默认值, 一旦启用, 则所有字段都需要覆盖设置! * @param fillUpdateParams 是否自动填充更新参数(修改人/修改时间等) * @param errorOnUnaffected 受影响行数为0时是否抛异常 * @return 受影响行数 * @throws ServiceException 操作失败 * @see DbConditionConverter#parseMapToDbUpdate(Map) 参数转换说明 */ int update(Map entity, ValidStrategy validStrategy, boolean fillUpdateParams, boolean errorOnUnaffected) throws ServiceException; /** * 根据条件批量更新实体对象
* 注意: entity将会自动由entityFieldFillExecutor填充更新参数(修改人/修改时间等)
* 注意: 默认查询条件由entityFieldFillExecutor添加, 默认只处理有效项
* UPDATE {tableName} SET {columnName}={fieldValue}, ... WHERE {whereConditions} AND DATA_STATE='E' * * @param entity 实体对象 * @param where 匹配条件 * @param validStrategy 校验处理策略
* 注意: 由于@Column的length/precision/scale有默认值, 一旦启用, 则所有字段都需要覆盖设置! * @return 受影响行数 * @throws ServiceException 操作失败 * @see DbConditionConverter#convertBeanToDbUpdate(Object) entity参数转换说明 * @see DbWhere where条件参数转换说明 */ int update(T entity, DbWhere where, ValidStrategy validStrategy) throws ServiceException; /** * 根据条件批量更新实体对象
* 注意: 默认查询条件由entityFieldFillExecutor添加, 默认只处理有效项
* UPDATE {tableName} SET {columnName}={fieldValue}, ... WHERE {whereConditions} AND DATA_STATE='E' * * @param entity 实体对象 * @param where 匹配条件 * @param validStrategy 校验处理策略
* 注意: 由于@Column的length/precision/scale有默认值, 一旦启用, 则所有字段都需要覆盖设置! * @param fillUpdateParams 是否自动填充更新参数(修改人/修改时间等) * @param errorOnUnaffected 受影响行数为0时是否抛异常 * @return 受影响行数 * @throws ServiceException 操作失败 * @see DbConditionConverter#convertBeanToDbUpdate(Object) entity参数转换说明 * @see DbWhere where条件参数转换说明 */ int update(T entity, DbWhere where, ValidStrategy validStrategy, boolean fillUpdateParams, boolean errorOnUnaffected) throws ServiceException; /** * 根据条件批量更新实体对象
* 注意: entity将会自动由entityFieldFillExecutor填充更新参数(修改人/修改时间等)
* 注意: 默认查询条件由entityFieldFillExecutor添加, 默认只处理有效项
* UPDATE {tableName} SET {columnName}={fieldValue}, ... WHERE {whereConditions} AND DATA_STATE='E' * * @param entity 更新内容
* 由实体类转换为DbUpdate: ParseTools.parseBeanToDbUpdate(bean);
* 由请求参数转换为DbUpdate: ParseTools.parseParamsToDbUpdate(request.getParameterMap());
* @param where 匹配条件 * @param validStrategy 校验处理策略
* 注意: 由于@Column的length/precision/scale有默认值, 一旦启用, 则所有字段都需要覆盖设置! * @return 受影响行数 * @throws ServiceException 操作失败 * @see ParseTools#parseBeanToDbUpdate(Object) * @see ParseTools#parseParamsToDbUpdate(Map, Class, boolean) */ int update(DbUpdate entity, DbWhere where, ValidStrategy validStrategy) throws ServiceException; /** * 根据条件批量更新实体对象
* 注意: 默认查询条件由entityFieldFillExecutor添加, 默认只处理有效项
* UPDATE {tableName} SET {columnName}={fieldValue}, ... WHERE {whereConditions} AND DATA_STATE='E' * * @param entity 更新内容
* 由实体类转换为DbUpdate: ParseTools.parseBeanToDbUpdate(bean);
* 由请求参数转换为DbUpdate: ParseTools.parseParamsToDbUpdate(request.getParameterMap());
* @param where 匹配条件 * @param validStrategy 校验处理策略
* 注意: 由于@Column的length/precision/scale有默认值, 一旦启用, 则所有字段都需要覆盖设置! * @param fillUpdateParams 是否自动填充更新参数(修改人/修改时间等) * @param errorOnUnaffected 受影响行数为0时是否抛异常 * @return 受影响行数 * @throws ServiceException 操作失败 * @see ParseTools#parseBeanToDbUpdate(Object) * @see ParseTools#parseParamsToDbUpdate(Map, Class, boolean) */ int update(DbUpdate entity, DbWhere where, ValidStrategy validStrategy, boolean fillUpdateParams, boolean errorOnUnaffected) throws ServiceException; /** * 批量保存实体对象
* 注意: 如果主键编号为空将会自动生成
* 注意: entity将会自动由entityFieldFillExecutor填充创建参数(创建人/创建时间等)
* 注意: 默认创建参数由entityFieldFillExecutor添加, 如dataState=DataState.NORMAL
* 注意: 根据实现类的不同, 有以下注意事项, 请详查具体实现类的机制:
* -- 大部分的实现类要求实体列表字段对齐
* ---- 例如第1个实体有abcd四个字段,第2个实体只有abc三个字段, 则第2个实体的d字段将被设置为NULL
* ---- 这将会导致数据库设置的默认值不会生效, 因此需要手动设置d字段, 或在d字段上配置默认值
* * @param entities 实体对象列表(只能是entity或map或IdEntity列表, 其他参数将会报错) * @return 返回主键编号 * @throws ServiceException 操作失败 * @see DbConditionConverter#convertBeanToInsertMap(Object) 参数转换说明 * @see BatchInsertExecutor 具体实现由BatchInsertExecutor的子类提供 * @since 3.0.0 */ List inserts(List entities) throws ServiceException; /** * 批量保存实体对象
* 注意: 如果主键编号为空将会自动生成
* 注意: 默认创建参数由entityFieldFillExecutor添加, 如dataState=DataState.NORMAL
* 注意: 根据实现类的不同, 有以下注意事项, 请详查具体实现类的机制:
* -- 大部分的实现类要求实体列表字段对齐
* ---- 例如第1个实体有abcd四个字段,第2个实体只有abc三个字段, 则第2个实体的d字段将被设置为NULL
* ---- 这将会导致数据库设置的默认值不会生效, 因此需要手动设置d字段, 或在d字段上配置默认值
* * @param entities 实体对象列表(只能是entity或map或IdEntity列表, 其他参数将会报错) * @param fillCreateParams 是否自动填充更新参数(创建人/创建时间等) * @return 返回主键编号 * @throws ServiceException 操作失败 * @see DbConditionConverter#convertBeanToInsertMap(Object) 参数转换说明 * @see BatchInsertExecutor 具体实现由BatchInsertExecutor的子类提供 * @since 3.0.0 */ List inserts(List entities, boolean fillCreateParams) throws ServiceException; /** * 根据主键编号批量更新实体对象
* 注意: 如果主键编号为空将会报错
* 注意: 这里的限制条件只有主键编号, 而不会追加数据状态作为限制条件
* 注意: entity将会自动由entityFieldFillExecutor填充更新参数(修改人/修改时间等)
* 注意: 根据实现类的不同, 有以下注意事项, 请详查具体实现类的机制:
* -- 1.某些实现类可能无法获取到准确的受影响行数
* -- 2.大部分的实现类要求实体列表字段对齐
* ---- 例如第1个实体有abcd四个字段,第2个实体只有abc三个字段, 则第2个实体的d字段将被更新为NULL
* ---- 因此需要手动设置d字段(一般来自数据库查询的记录或用户输入的信息)
* * @param entities 实体对象列表(只能是entity或map或IdEntity列表, 其他参数将会报错)
* 如果实体对象是map, map下不能有where, 否则将会报错 * @return 受影响行数(某些实现类可能无法获取到准确的受影响行数) * @throws ServiceException 操作失败 * @see DbConditionConverter#convertBeanToDbUpdate(Object) entity参数转换说明 * @see BatchUpdateExecutor 具体实现由BatchUpdateExecutor的子类提供 * @since 3.0.0 */ int updates(List entities) throws ServiceException; /** * 根据主键编号批量更新实体对象
* 注意: 如果主键编号为空将会报错
* 注意: 这里的限制条件只有主键编号, 而不会追加数据状态作为限制条件
* 注意: 根据实现类的不同, 有以下注意事项, 请详查具体实现类的机制:
* -- 1.某些实现类可能无法获取到准确的受影响行数
* -- 2.大部分的实现类要求实体列表字段对齐
* ---- 例如第1个实体有abcd四个字段,第2个实体只有abc三个字段, 则第2个实体的d字段将被更新为NULL
* ---- 因此需要手动设置d字段(一般来自数据库查询的记录或用户输入的信息)
* * @param entities 实体对象列表(只能是entity或map或IdEntity列表, 其他参数将会报错)
* 如果实体对象是map, map下不能有where, 否则将会报错 * @param fillUpdateParams 是否自动填充更新参数(修改人/修改时间等) * @return 受影响行数(某些实现类可能无法获取到准确的受影响行数) * @throws ServiceException 操作失败 * @see DbConditionConverter#convertBeanToDbUpdate(Object) entity参数转换说明 * @see BatchUpdateExecutor 具体实现由BatchUpdateExecutor的子类提供 * @since 3.0.0 */ int updates(List entities, boolean fillUpdateParams) throws ServiceException; /** * 批量保存实体对象
* 注意: 如果主键编号为空将会自动生成
* 注意: entity将会自动由entityFieldFillExecutor填充创建参数(创建人/创建时间等)
* 注意: 默认创建参数由entityFieldFillExecutor添加, 如dataState=DataState.NORMAL
* 注意: 根据实现类的不同, 有以下注意事项, 请详查具体实现类的机制:
* -- 大部分的实现类要求实体列表字段对齐
* ---- 例如第1个实体有abcd四个字段,第2个实体只有abc三个字段, 则第2个实体的d字段将被设置为NULL
* ---- 这将会导致数据库设置的默认值不会生效, 因此需要手动设置d字段, 或在d字段上配置默认值
* * @param entities 实体对象列表(只能是entity或map或IdEntity列表, 其他参数将会报错) * @param validStrategy 校验处理策略
* 注意: 由于@Column的length/precision/scale有默认值, 一旦启用, 则所有字段都需要覆盖设置! * @return 返回主键编号 * @throws ServiceException 操作失败 * @see DbConditionConverter#convertBeanToInsertMap(Object) 参数转换说明 * @see BatchInsertExecutor 具体实现由BatchInsertExecutor的子类提供 * @since 3.0.0 */ List inserts(List entities, ValidStrategy validStrategy) throws ServiceException; /** * 批量保存实体对象
* 注意: 如果主键编号为空将会自动生成
* 注意: 默认创建参数由entityFieldFillExecutor添加, 如dataState=DataState.NORMAL
* 注意: 根据实现类的不同, 有以下注意事项, 请详查具体实现类的机制:
* -- 大部分的实现类要求实体列表字段对齐
* ---- 例如第1个实体有abcd四个字段,第2个实体只有abc三个字段, 则第2个实体的d字段将被设置为NULL
* ---- 这将会导致数据库设置的默认值不会生效, 因此需要手动设置d字段, 或在d字段上配置默认值
* * @param entities 实体对象列表(只能是entity或map或IdEntity列表, 其他参数将会报错) * @param validStrategy 校验处理策略
* 注意: 由于@Column的length/precision/scale有默认值, 一旦启用, 则所有字段都需要覆盖设置! * @param fillCreateParams 是否自动填充更新参数(创建人/创建时间等) * @return 返回主键编号 * @throws ServiceException 操作失败 * @see DbConditionConverter#convertBeanToInsertMap(Object) 参数转换说明 * @see BatchInsertExecutor 具体实现由BatchInsertExecutor的子类提供 * @since 3.0.0 */ List inserts(List entities, ValidStrategy validStrategy, boolean fillCreateParams) throws ServiceException; /** * 根据主键编号批量更新实体对象
* 注意: 如果主键编号为空将会报错
* 注意: 这里的限制条件只有主键编号, 而不会追加数据状态作为限制条件
* 注意: entity将会自动由entityFieldFillExecutor填充更新参数(修改人/修改时间等)
* 注意: 根据实现类的不同, 有以下注意事项, 请详查具体实现类的机制:
* -- 1.某些实现类可能无法获取到准确的受影响行数
* -- 2.大部分的实现类要求实体列表字段对齐
* ---- 例如第1个实体有abcd四个字段,第2个实体只有abc三个字段, 则第2个实体的d字段将被更新为NULL
* ---- 因此需要手动设置d字段(一般来自数据库查询的记录或用户输入的信息)
* * @param entities 实体对象列表(只能是entity或map或IdEntity列表, 其他参数将会报错)
* 如果实体对象是map, map下不能有where, 否则将会报错 * @param validStrategy 校验处理策略
* 注意: 由于@Column的length/precision/scale有默认值, 一旦启用, 则所有字段都需要覆盖设置! * @return 受影响行数(某些实现类可能无法获取到准确的受影响行数) * @throws ServiceException 操作失败 * @see DbConditionConverter#convertBeanToDbUpdate(Object) entity参数转换说明 * @see BatchUpdateExecutor 具体实现由BatchUpdateExecutor的子类提供 * @since 3.0.0 */ int updates(List entities, ValidStrategy validStrategy) throws ServiceException; /** * 根据主键编号批量更新实体对象
* 注意: 如果主键编号为空将会报错
* 注意: 这里的限制条件只有主键编号, 而不会追加数据状态作为限制条件
* 注意: 根据实现类的不同, 有以下注意事项, 请详查具体实现类的机制:
* -- 1.某些实现类可能无法获取到准确的受影响行数
* -- 2.大部分的实现类要求实体列表字段对齐
* ---- 例如第1个实体有abcd四个字段,第2个实体只有abc三个字段, 则第2个实体的d字段将被更新为NULL
* ---- 因此需要手动设置d字段(一般来自数据库查询的记录或用户输入的信息)
* * @param entities 实体对象列表(只能是entity或map或IdEntity列表, 其他参数将会报错)
* 如果实体对象是map, map下不能有where, 否则将会报错 * @param validStrategy 校验处理策略
* 注意: 由于@Column的length/precision/scale有默认值, 一旦启用, 则所有字段都需要覆盖设置! * @param fillUpdateParams 是否自动填充更新参数(修改人/修改时间等) * @return 受影响行数(某些实现类可能无法获取到准确的受影响行数) * @throws ServiceException 操作失败 * @see DbConditionConverter#convertBeanToDbUpdate(Object) entity参数转换说明 * @see BatchUpdateExecutor 具体实现由BatchUpdateExecutor的子类提供 * @since 3.0.0 */ int updates(List entities, ValidStrategy validStrategy, boolean fillUpdateParams) throws ServiceException; /** * 根据主键编号删除实体对象(逻辑删除)
* 注意: entity将会自动由entityFieldFillExecutor填充更新参数(修改人/修改时间等)
* 注意: 默认查询条件由entityFieldFillExecutor添加, 默认只处理有效项
* UPDATE {tableName} SET DATA_STATE='D' WHERE ID={id} DATA_STATE='E' * * @param id 待删除的主键编号 * @return 删除行数 * @throws ServiceException 删除失败 */ int logicalDeleteById(Serializable id) throws ServiceException; /** * 根据主键编号删除实体对象(逻辑删除)
* 注意: 默认查询条件由entityFieldFillExecutor添加, 默认只处理有效项
* UPDATE {tableName} SET DATA_STATE='D' WHERE ID={id} DATA_STATE='E' * * @param id 待删除的主键编号 * @param fillUpdateParams 是否自动填充更新参数(修改人/修改时间等) * @param errorOnUnaffected 受影响行数为0时是否抛异常 * @return 删除行数 * @throws ServiceException 删除失败 */ int logicalDeleteById(Serializable id, boolean fillUpdateParams, boolean errorOnUnaffected) throws ServiceException; /** * 根据主键编号删除实体对象(逻辑删除)
* 注意: entity将会自动由entityFieldFillExecutor填充更新参数(修改人/修改时间等)
* 注意: 默认查询条件由entityFieldFillExecutor添加, 默认只处理有效项
* UPDATE {tableName} SET DATA_STATE='D' WHERE ID IN ({ids}) DATA_STATE='E' * * @param ids 待删除的主键编号 * @return 删除行数 * @throws ServiceException 删除失败 */ int logicalDeleteByIds(Collection ids) throws ServiceException; /** * 根据主键编号删除实体对象(逻辑删除)
* 注意: 默认查询条件由entityFieldFillExecutor添加, 默认只处理有效项
* UPDATE {tableName} SET DATA_STATE='D' WHERE ID IN ({ids}) DATA_STATE='E' * * @param ids 待删除的主键编号 * @return 删除行数 * @throws ServiceException 删除失败 */ int logicalDeleteByIds(Collection ids, boolean fillUpdateParams, boolean errorOnUnaffected) throws ServiceException; /** * 根据条件批量更新实体对象(逻辑删除)
* 注意: entity将会自动由entityFieldFillExecutor填充更新参数(修改人/修改时间等)
* 注意: 默认查询条件由entityFieldFillExecutor添加, 默认只处理有效项
* UPDATE {tableName} SET DATA_STATE='D' WHERE {whereConditions} AND DATA_STATE='E' * * @param where 匹配条件, 如果要删除全部记录应传入DbWhere.NONE * @return 受影响行数 * @throws ServiceException 操作失败 */ int logicalDelete(T where) throws ServiceException; /** * 根据条件批量更新实体对象(逻辑删除)
* 注意: 默认查询条件由entityFieldFillExecutor添加, 默认只处理有效项
* UPDATE {tableName} SET DATA_STATE='D' WHERE {whereConditions} AND DATA_STATE='E' * * @param where 匹配条件, 如果要删除全部记录应传入DbWhere.NONE * @param fillUpdateParams 是否自动填充更新参数(修改人/修改时间等) * @param errorOnUnaffected 受影响行数为0时是否抛异常 * @return 受影响行数 * @throws ServiceException 操作失败 */ int logicalDelete(T where, boolean fillUpdateParams, boolean errorOnUnaffected) throws ServiceException; /** * 根据条件批量删除实体对象(逻辑删除)
* 注意: entity将会自动由entityFieldFillExecutor填充更新参数(修改人/修改时间等)
* 注意: 默认查询条件由entityFieldFillExecutor添加, 默认只处理有效项
* UPDATE {tableName} SET DATA_STATE='D' WHERE {whereConditions} AND DATA_STATE='E' * * @param where 匹配条件, 如果要删除全部记录应传入DbWhere.NONE * @return 受影响行数 * @throws ServiceException 操作失败 */ int logicalDelete(DbWhere where) throws ServiceException; /** * 根据条件批量删除实体对象(逻辑删除)
* 注意: 默认查询条件由entityFieldFillExecutor添加, 默认只处理有效项
* UPDATE {tableName} SET DATA_STATE='D' WHERE {whereConditions} AND DATA_STATE='E' * * @param where 匹配条件, 如果要删除全部记录应传入DbWhere.NONE * @param fillUpdateParams 是否自动填充更新参数(修改人/修改时间等) * @param errorOnUnaffected 受影响行数为0时是否抛异常 * @return 受影响行数 * @throws ServiceException 操作失败 */ int logicalDelete(DbWhere where, boolean fillUpdateParams, boolean errorOnUnaffected) throws ServiceException; /** * 根据主键编号删除实体对象(物理删除)
* 注意: 默认查询条件由entityFieldFillExecutor添加, 默认只处理有效项
* DELETE FROM {tableName} WHERE ID={id} AND DATA_STATE='E' * * @param id 待删除的主键编号 * @return 删除行数 * @throws ServiceException 删除失败 */ int physicalDeleteById(Serializable id) throws ServiceException; /** * 根据主键编号删除实体对象(物理删除)
* DELETE FROM {tableName} WHERE ID={id} AND DATA_STATE='E' * * @param id 待删除的主键编号 * @param errorOnUnaffected 受影响行数为0时是否抛异常 * @return 删除行数 * @throws ServiceException 删除失败 */ int physicalDeleteById(Serializable id, boolean errorOnUnaffected) throws ServiceException; /** * 根据主键编号删除实体对象(物理删除)
* 注意: 默认查询条件由entityFieldFillExecutor添加, 默认只处理有效项
* DELETE FROM {tableName} WHERE ID IN ({ids}) AND DATA_STATE='E' * * @param ids 待删除的主键编号 * @return 删除行数 * @throws ServiceException 删除失败 */ int physicalDeleteByIds(Collection ids) throws ServiceException; /** * 根据主键编号删除实体对象(物理删除)
* DELETE FROM {tableName} WHERE ID IN ({ids}) AND DATA_STATE='E' * * @param ids 待删除的主键编号 * @param errorOnUnaffected 受影响行数为0时是否抛异常 * @return 删除行数 * @throws ServiceException 删除失败 */ int physicalDeleteByIds(Collection ids, boolean errorOnUnaffected) throws ServiceException; /** * 根据条件批量删除实体对象(物理删除)
* 注意: 默认查询条件由entityFieldFillExecutor添加, 默认只处理有效项
* DELETE FROM {tableName} WHERE {whereConditions} AND DATA_STATE='E' * * @param where 匹配条件, 如果要删除全部记录应传入DbWhere.NONE * @return 受影响行数 * @throws ServiceException 操作失败 */ int physicalDelete(T where) throws ServiceException; /** * 根据条件批量删除实体对象(物理删除)
* 注意: 默认查询条件由entityFieldFillExecutor添加, 默认只处理有效项
* DELETE FROM {tableName} WHERE {whereConditions} AND DATA_STATE='E' * * @param where 匹配条件, 如果要删除全部记录应传入DbWhere.NONE * @param errorOnUnaffected 受影响行数为0时是否抛异常 * @return 受影响行数 * @throws ServiceException 操作失败 */ int physicalDelete(T where, boolean errorOnUnaffected) throws ServiceException; /** * 根据条件批量删除实体对象(物理删除)
* 注意: 默认查询条件由entityFieldFillExecutor添加, 默认只处理有效项
* DELETE FROM {tableName} WHERE {whereConditions} AND DATA_STATE='E' * * @param where 匹配条件, 如果要删除全部记录应传入DbWhere.NONE * @return 受影响行数 * @throws ServiceException 操作失败 */ int physicalDelete(DbWhere where) throws ServiceException; /** * 根据条件批量删除实体对象(物理删除)
* 注意: 默认查询条件由entityFieldFillExecutor添加, 默认只处理有效项
* DELETE FROM {tableName} WHERE {whereConditions} AND DATA_STATE='E' * * @param where 匹配条件, 如果要删除全部记录应传入DbWhere.NONE * @param errorOnUnaffected 受影响行数为0时是否抛异常 * @return 受影响行数 * @throws ServiceException 操作失败 */ int physicalDelete(DbWhere where, boolean errorOnUnaffected) throws ServiceException; /** 获取BeanClass **/ Class getBeanClass(); }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy