StringBuffer封装sql查询模板

public abstract class FolderSQLGenerater {

	/**
	 * 查询总数时,拼接外层调用
	 * @param sql
	 * @return
	 */
	public static String wrapTotalCountSql(String sql) {
		return "select count(*) from (" + sql + ")";
		}

	/**
	 * 查询分页专用方法
	 * @param sql
	 * @param firstElement
	 * @param lastElement
	 * @return
	 */
	public static String wrapPaginatedSql(String sql, int firstElement, int lastElement) {
		StringBuffer sb = new StringBuffer();
		sb.append("select * from (");
		sb.append("select query.*, rownum rnum from (");
		sb.append(sql);
		sb.append(") query where rownum <= " + (lastElement + firstElement));
		sb.append(") where rnum >" + firstElement + " order by rnum");
		return new String(sb);
	}

	/**
	 * 查询总数 isCount= true
	 * @param sortField
	 * @return
	 */
	public static String makeSelectCase(String sortField,boolean isCount) {
		if(!isCount){//查询总数
			return "select distinct pi.instanceId FROM ";
		}
		return "select distinct pi.instanceId," + sortField + " FROM ";
	}

	//拼接表
	public static String makeSelectTable(Set<String> tables){
		StringBuffer stringBuffer = new StringBuffer();
		stringBuffer.append("pi,");
		stringBuffer.append("wi");
		for(String table:tables){
			stringBuffer.append(","+table + " ");
		}
		return stringBuffer.toString();
	}

	/**
	 * 查询总数 isCount= true
	 * @param
	 * @param tableRelations
	 * @param selectSqls
	 * @param sort
	 * @return
	 */
	public static String makeSelectTerm(String instanceState,Set<String> tableRelations,List<String> selectSqls,String sort,boolean isCount,String loginID) {
		StringBuffer stringBuffer = new StringBuffer();
		stringBuffer.append(" where pi.instanceid = wi.instanceid ");
		for(String tableRelation:tableRelations){
			stringBuffer.append(" and "+ tableRelation + " ");
		}

		if (instanceState.equals(ProcessInstanceState.TODO.getValue())) {
			
		} else if(instanceState.equals(ProcessInstanceState.DONE.getValue())){
			

		} else if(instanceState.equals(ProcessInstanceState.FINISH.getValue())){
			
		}else if (instanceState.equals(ProcessInstanceState.DRAFT.getValue())){
			

		}else if (instanceState.equals(ProcessInstanceState.DELETE.getValue())){
			stringBuffer.append( "and pi.deleted  = '1' ");

		}else if(instanceState.equals("findAlltodo")){
			
		}

		for(String selectSql:selectSqls){
			stringBuffer.append(" and "+ selectSql + " ");
		}
		if(!isCount) {//查询总数
			stringBuffer.append(" order by " + sort);
		}

		return stringBuffer.toString();
	}
	
}

然后调用的时候,类似这样:

String valueSql = ""; //拼接查询的值
Set<String> joinTables  = new HashSet<String>(); //拼接表
Set<String> tableRelations  = new HashSet<String>(); //拼接表之间关联条件 类似这种:  and pi.instanceid = wi.instanceid
List<String> conditions = new ArrayList<>(); //对应makeSelectTerm方法里面的selectSqls参数,拼接查询条件  and ... = ...
if (processid.equals(ProcessId.QB_PROCESS)) {
     joinTables.add("d_gw_q q");
     tableRelations.add("q.qbuid = pi.businesskey");
     valueSql += "q.wenhao      ," +
             "q.tiaoma      ," +
             "q.serialnumber," +
             "q.ypld        ," +
             "q.cbdeptname ";
     //拼接
     if(StringUtils.isNotBlank(serialNumber)){
         conditions.add("q.serialnumber like '%"+serialNumber+"%' "); //流水号
     }

}

最后:

String getInstanceIdSql = FolderSQLGenerater.makeSelectCase("pi.created", true)
                + FolderSQLGenerater.makeSelectTable(joinTables)
                + FolderSQLGenerater.makeSelectTerm(instanceState, tableRelations, conditions, "pi.created desc", false,loginID);
List results = this.getObjectsBySql(getInstanceIdSql);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值