
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 extends Serializable> 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 extends Serializable> 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 extends Serializable> 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 extends Serializable> 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 extends Serializable> 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 extends Serializable> 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