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

org.nbone.persistence.model.SqlModel Maven / Gradle / Ivy

package org.nbone.persistence.model;


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

import org.apache.commons.lang3.builder.ToStringStyle;
import org.nbone.context.system.SystemContext;
import org.nbone.mvc.domain.DomainQuery;
import org.nbone.persistence.JdbcConstants;
import org.nbone.persistence.JdbcOptions;
import org.nbone.persistence.SqlConfig;
import org.nbone.persistence.mapper.EntityMapper;
import org.nbone.persistence.mapper.FieldMapper;
import org.nbone.persistence.support.PageSuport;
import org.nbone.util.lang.ToStringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.jdbc.core.RowMapper;

/**
 * 存储sql的Model
 * @author thinking
 * @since 2015-12-12
 *
 */
public class SqlModel {

	protected Logger logger = LoggerFactory.getLogger("SqlModel");
	/**
	 * sql语句
	 */
	private String sql ;
	/**
	 * sql占位符参数 ,可为空
* 占位符是 name时, 参数可以是 Map/Javabean */ private T parameter; /** * 占位符是 ? 时,参数时可以是 Object[]/List
*/ private Object[] parameterArray; /** *实体映射信息 */ private EntityMapper entityMapper; /** * 结果集映射 */ private RowMapper rowMapper; /** * 追加条件 或者 group by/order by 子句 */ private String[] afterWhere; @SuppressWarnings("rawtypes") public static final SqlModel EmptySqlModel = new SqlModel((String)null); public SqlModel(String sql) { this.sql = sql; } public SqlModel(String sql, T parameter) { this.sql = sql; this.parameter = parameter; } public SqlModel(String sql, T parameter, EntityMapper entityMapper) { this.sql = sql; this.parameter = parameter; this.entityMapper = entityMapper; } public SqlModel(String sql, T parameter, EntityMapper entityMapper, SqlConfig sqlConfig) { this.sql = sql; this.parameter = parameter; this.entityMapper = entityMapper; this.afterWhere = sqlConfig.getAfterWhere(); } public static void checkSqlModel(SqlModel sqlModel) { if(sqlModel == null || sqlModel == EmptySqlModel){ } } public String getSql() { String sql = getPlainSql(); print(sql); return sql; } /** * if(afterWhere != null && afterWhere.length > 0) { afterWhereString = afterWhere[0]; } * @return */ private String getPlainSql(){ String afterWhereString = null; //外层where 之后语句 if(afterWhere == null || afterWhere.length == 0) { //实体内where 之后语句 if(parameter instanceof DomainQuery) { DomainQuery domainQuery = (DomainQuery) parameter; StringBuilder sBuilder = new StringBuilder(); String appendWhere = domainQuery.appendWhere(); appendWhere(sBuilder,appendWhere); String groupBy = domainQuery.groupBy(); String having = domainQuery.having(); String orderBy = domainQuery.orderBy(); appendSql(sBuilder,groupBy); appendSql(sBuilder,having); appendSql(sBuilder,orderBy); return sql+ " " + sBuilder.toString(); } } else { StringBuilder sBuilder = new StringBuilder(); for (String append : afterWhere) { appendWhere(sBuilder,append); } afterWhereString = sBuilder.toString(); } if(afterWhereString != null){ return sql+ " " + afterWhereString; } return sql; } private StringBuilder appendSql(StringBuilder sBuilder,String append){ if(sBuilder == null){ return null; } if(append != null && append.length() > 0) { sBuilder.append(" ").append(append); } return sBuilder; } private StringBuilder appendWhere(StringBuilder stringBuilder,String appendWhere){ if(appendWhere != null && appendWhere.length() > 0) { /* String upper = appendWhere.toUpperCase(); if(!upper.startsWith("AND ") && !upper.startsWith(" AND ")){ appendWhere = "and " +appendWhere; }*/ if(sql.contains(" where ") || sql.contains(" WHERE ")){ stringBuilder.append(" ").append(appendWhere); }else { stringBuilder.append(" where 1=1 ").append(appendWhere); } return stringBuilder; } return stringBuilder; } /** * * @param pageNum * @param pageSize * afterWhere order by 子句 * @return */ public String getPageSql(int pageNum ,int pageSize){ String pageSql = ""; String plainSql = getPlainSql(); if (JdbcConstants.MYSQL.equals(SystemContext.CURRENT_DB_TYPE)) { pageSql = PageSuport.toMysqlPage(plainSql, pageNum, pageSize); }else if (JdbcConstants.ORACLE.equals(SystemContext.CURRENT_DB_TYPE)) { pageSql = PageSuport.toOraclePage(plainSql, pageNum, pageSize); } print(pageSql); return pageSql; } public String getOffsetPageSql(long offset ,int pageSize){ String pageSql = ""; String plainSql = getPlainSql(); if (JdbcConstants.MYSQL.equals(SystemContext.CURRENT_DB_TYPE)) { pageSql = PageSuport.mysqlOffsetPage(plainSql, offset, pageSize); } print(pageSql); return pageSql; } public String getCountSql(){ String tempSql = getPlainSql(); String countSql = PageSuport.getCountSqlString(tempSql); return countSql; } public void setSql(String sql) { this.sql = sql; } public T getParameter() { return parameter; } public void setParameter(T parameter) { this.parameter = parameter; } public Object[] getParameterArray() { return parameterArray; } public void setParameterArray(Object[] parameterArray) { this.parameterArray = parameterArray; } public EntityMapper getEntityMapper() { return entityMapper; } public void setEntityMapper(EntityMapper entityMapper) { this.entityMapper = entityMapper; } public FieldMapper getPrimaryKey() { return entityMapper.getPrimaryKeyFieldMapper(); } public List getPrimaryKeys() { return entityMapper.getPrimaryKeyFields(); } public RowMapper getRowMapper() { if (rowMapper != null) { return rowMapper; } return entityMapper.getRowMapper(); } public void setRowMapper(RowMapper rowMapper) { this.rowMapper = rowMapper; } public String[] getAfterWhere() { return afterWhere; } public void setAfterWhere(String[] afterWhere) { this.afterWhere = afterWhere; } private void print(){ if(JdbcOptions.showSql){ //System.out.println(toString()); //System.out.println(getPrintSqlParameter()); logger.info(toString()); logger.info(getPrintSqlParameter().toString()); } } private void print(String printSql){ if(JdbcOptions.showSql){ //System.out.println(printSql); //System.out.println(getPrintSqlParameter()); logger.info(printSql); logger.info(getPrintSqlParameter().toString()); } } public StringBuilder getPrintSqlParameter(){ StringBuilder print = new StringBuilder(); if(parameter != null){ if(parameter instanceof Map){ print .append(">>>>>Jdbc Parameter Map :").append(parameter) ; }else{ String pojoString = ToStringUtils.toString(parameter, ToStringStyle.MULTI_LINE_STYLE,true); print.append(">>>>>Jdbc Parameter POJO : ").append(pojoString); } }else{ if(parameterArray != null){ print.append(">>>>>Jdbc parameterArray : ").append(parameterArray); } } return print; } @Override public String toString() { StringBuilder sqlSb = new StringBuilder("Jdbc sql : "+ getPlainSql()); return sqlSb.toString(); } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy