CustomJdbcTemplateWrapperTenantInterface.java 5.72 KB
package com.taover.repository;

import java.util.Collection;
import java.util.List;
import java.util.Map;

import com.taover.repository.exception.MultiRowException;
import com.taover.repository.exception.NoShardingKeyException;
import com.taover.repository.exception.NotFoundException;

public interface CustomJdbcTemplateWrapperTenantInterface<T, ID extends Number> {
	
	/**
	 * 按主键查询
	 */
	public T findEntityByID(ID id, Long tenantId) throws NotFoundException;

	/**
	 * 按主键查询
	 * isLock 是否锁定, 默认不锁
	 * fromWriteDB  是否从写库读写,默认从读库查询
	 */
	public T findEntityByID(ID id, Long tenantId, boolean isLock) throws NotFoundException;

	/**
	 * 根据条件List<Object[]>查询
	 * Object[]数组长度是3
	 * Object[], 第一个参数是列名,第二个参数是操作符,第三个参数是查询条件的值。
	 */
	public T findEntityByCondition(List<Object[]> condition, Long tenantId) throws NotFoundException,MultiRowException,NoShardingKeyException;

	/**
	 * 根据条件sql查询
	 * sqlCondition 为where 后面的条件。
	 */
	public T findEntityBySql(String sqlCondition, Long tenantId) throws NotFoundException,MultiRowException,NoShardingKeyException;
	
	/**
	 * 根据条件List<Object[]>查询
	 * Object[]数组长度是3
	 * Object[], 第一个参数是列名,第二个参数是操作符,第三个参数是查询条件的值。
	 */
	public List<T> findListByCondition(List<Object[]> condition, Long tenantId);

	/**
	 * 根据条件List<Object[]>查询
	 * Object[]数组长度是3
	 * Object[], 第一个参数是列名,第二个参数是操作符,第三个参数是查询条件的值。
	 */
	public List<T> findListByCondition(List<Object[]> condition, String sortCondition, Long tenantId);
	
	/**
	 * 根据条件sql查询
	 * sqlCondition 为where 后面的条件。
	 */
	public List<T> findListBySql(String sqlCondition, Long tenantId);

	/**
	 * 按条件分页查询
	 * Object[]数组长度是3
	 * Object[], 第一个参数是列名,第二个参数是操作符,第三个参数是查询条件的值。
	 */
	public Map<String, Object> findPageByCondition(List<Object[]> condition, int page, int pageSize, Long tenantId);
	
	/**
	 * 按条件分页查询
	 * Object[]数组长度是3
	 * Object[]第一个参数是列名,第二个参数是操作符,第三个参数是查询条件的值。
	 * boolean isUseCache, 是否用缓存,默认用。
	 * boolean isAddCache, 是否添加缓存,默认添加。
	 */
	public Map<String, Object> findPageByCondition(List<Object[]> condition, String sortCondition, int page, int pageSize, Long tenantId);
	
	/**
	 * 按sql分页查询, sqlCondition为where 后条件sql
	 */
	public Map<String, Object> findPageBySql(String sqlCondition, int page, int pageSize, Long tenantId);

	/**
	 * 添加
	 */
	public Number addEntity(T entity, Long tenantId);
	
	/**
	 * 批量添加
	 * @throws Exception 
	 */
	public List<Number> addEntityList(List<T> entityList, Long tenantId) throws Exception;

	/**
	 * 按ID删除
	 */
	public int deleteEntityByID(ID id, Long tenantId);
	
	/**
	 * 删除按List<Object[]>条件
	 * Object[]数组长度是3
	 * Object[], 第一个参数是列名,第二个参数是操作符,第三个参数是查询条件的值。
	 */
	public int deleteEntityByCondition(List<Object[]> condition, Long tenantId);
	
	/**
	 * 删除按condition条件
	 * 建议使用deleteTByCondition(List<Object[]> condition), 如果removeTByCondition(List<Object[]> condition)满足不了where条件可以使用此方法。
	 * condition为where后面的条件,condition不能为空。
	 */
	public int deleteEntityBySql(String sqlCondition, Long tenantId);
	
	/**
	 * 根据list对象逐个删除。
	 * @throws NoShardingKeyException 
	 */
	public int deleteEntityList(List<ID> idList, Long tenantId);
	
	/**
	 * 根据ID修改指定的值
	 */
	public int updateEntityById(List<Object[]> changeList, ID id, Long tenantId);
	
	/**
	 * 根据ID列表修改指定数据
	 * @param changeList
	 * @param idList
	 * @param tenantId
	 * @return
	 */
	public void updateEntityByIdList(List<Object[]> changeList, Collection<ID> idList, Long tenantId);
	
	/**
	 * 根据ID列表修改指定数据
	 * @param changeList
	 * @param idList
	 * @param batchSize
	 * @param tenantId
	 */
	public void updateEntityByIdList(List<Object[]> changeList, Collection<ID> idList, Integer batchSize, Long tenantId);

	/**
	 * List<Object[]> updateObj 要修改成的值,数组长度为2,第一个值为列名,第二个值是要改成的值。
	 * List<Object[]> condition 修改的条件, 数组长度是3, 第一个参数是列名,第二个参数是操作符,第三个参数是查询条件的值。
	 */
	public int updateEntityByCondition(List<Object[]> updateObj, List<Object[]> condition, Long tenantId);
	
	/**
	 * List<Object[]> updateObj 要修改成的值,数组长度为2,第一个值为列名,第二个值是要改成的值。
	 * String sqlCondition 修改的条件。
	 */
	public int updateEntityBySql(List<Object[]> updateObj, String sqlCondition, Long tenantId);

	/**
	 * 获取分页数据
	 * @param coreSql
	 * @param orderByPartSql
	 * @param page
	 * @param pageSize
	 * @return
	 */
	public Map<String, Object> getPageData(String coreSql, String orderByPartSql, Integer page, Integer pageSize, Long tenantId);
	
	/**
	 * 获取分页数据
	 * @param selectSql
	 * @param fromAndWhereSql
	 * @param orderByPartSql
	 * @param page
	 * @param pageSize
	 * @return
	 */
	public Map<String, Object> getPageData(String selectSql, String fromAndWhereSql, String orderByPartSql, Integer page, Integer pageSize, Long tenantId);

	String getTableFieldNameListGapWithComma();

	String getIdTableFieldName();

	String getDbName();

	String getTableName();

	Class<T> getTClassInfo();
	
}