Commit a2601092 by yuwei

2.0.0项目初始化

parent 67f6c572
......@@ -59,6 +59,14 @@ public interface DbQuery {
int count(String sql, Object[] args);
/**
* 获取总数带查询参数 NamedParameterJdbcTemplate
*
* @param sql
* @return
*/
int count(String sql, Map<String, Object> params);
/**
* 查询结果列表
*
* @param sql
......@@ -94,4 +102,14 @@ public interface DbQuery {
* @return
*/
PageResult<Map<String, Object>> queryByPage(String sql, Object[] args, long offset, long size);
/**
* 查询结果分页带查询参数 NamedParameterJdbcTemplate
* @param sql
* @param params
* @param offset
* @param size
* @return
*/
PageResult<Map<String, Object>> queryByPage(String sql, Map<String, Object> params, long offset, long size);
}
......@@ -9,6 +9,7 @@ import cn.datax.common.database.exception.DataQueryException;
import com.zaxxer.hikari.HikariDataSource;
import lombok.Setter;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import javax.sql.DataSource;
import java.sql.Connection;
......@@ -62,6 +63,17 @@ public class DbQueryTemplate implements DbQuery {
}
@Override
public int count(String sql, Object[] args) {
return jdbcTemplate.queryForObject(dbDialect.count(sql), args, Integer.class);
}
@Override
public int count(String sql, Map<String, Object> params) {
NamedParameterJdbcTemplate namedJdbcTemplate = new NamedParameterJdbcTemplate(jdbcTemplate);
return namedJdbcTemplate.queryForObject(dbDialect.count(sql), params, Integer.class);
}
@Override
public List<Map<String, Object>> queryList(String sql) {
return jdbcTemplate.queryForList(sql);
}
......@@ -88,7 +100,11 @@ public class DbQueryTemplate implements DbQuery {
}
@Override
public int count(String sql, Object[] args) {
return jdbcTemplate.queryForObject(dbDialect.count(sql), args, Integer.class);
public PageResult<Map<String, Object>> queryByPage(String sql, Map<String, Object> params, long offset, long size) {
int total = count(sql, params);
String pageSql = dbDialect.buildPaginationSql(sql, offset, size);
NamedParameterJdbcTemplate namedJdbcTemplate = new NamedParameterJdbcTemplate(jdbcTemplate);
List<Map<String, Object>> records = namedJdbcTemplate.queryForList(pageSql, params);
return new PageResult<>(total, records);
}
}
......@@ -76,11 +76,9 @@ public class ApiCallServiceImpl implements ApiCallService {
ThreadUtil.getInstance().get().setMsg(e.getMessage());
throw new DataException("API调用动态构造SQL语句出错");
}
Object[] args = new Object[] {};
Map<String, Object> acceptedFilters = sqlFilterResult.getAcceptedFilters();
args = acceptedFilters.values().toArray();
try {
PageResult<Map<String, Object>> pageResult = dbQuery.queryByPage(sqlFilterResult.getSql(), args, offset, pageSize);
PageResult<Map<String, Object>> pageResult = dbQuery.queryByPage(sqlFilterResult.getSql(), acceptedFilters, offset, pageSize);
pageResult.setPageNum(pageNum).setPageSize(pageSize);
ThreadUtil.getInstance().get().setCallerSize(pageResult.getData().size());
return pageResult;
......
......@@ -137,10 +137,12 @@ public class SqlBuilderUtil {
log.debug("The filter namedParameters=" + parsedSql.getParamNames() + " is accepted on segment=" + sql.substring(start, end + MARK_KEY_END.length()));
}
// 下面方法2选1可以获取条件代码块
// select id, name from user where 1 = 1 and id = :id
// String segment = sql.substring(start + MARK_KEY_START.length(), end);
// String segment = parsedSql.getOriginalSql();
String segment = parsedSql.getOriginalSql();
// 转换命名参数:为?
String segment = NamedParameterUtil.substituteNamedParams(parsedSql, filters);
// select id, name from user where 1 = 1 and id = ?
// String segment = NamedParameterUtil.substituteNamedParams(parsedSql, filters);
// 获取传参中包含命名参数的数据
LinkedHashMap<String, Object> linkAcceptedFilters = NamedParameterUtil.buildValueArray(parsedSql, filters);
acceptedFilters.putAll(linkAcceptedFilters);
......
......@@ -5,13 +5,15 @@ public enum WhereType {
EQUALS(1, "=", "等于"),
NOT_EQUALS(2, "!=", "不等于"),
LIKE(3, "LIKE", "全模糊查询"),
LIKE_LEFT(4, "LIKE_LEFT", "左模糊查询"),
LIKE_RIGHT(5, "LIKE_RIGHT", "右模糊查询"),
LIKE_LEFT(4, "LIKE", "左模糊查询"),
LIKE_RIGHT(5, "LIKE", "右模糊查询"),
GREATER_THAN(6, ">", "大于"),
GREATER_THAN_EQUALS(7, ">=", "大于等于"),
LESS_THAN(8, "<", "小于"),
LESS_THAN_EQUALS(9, "<=", "小于等于"),
IN(10, "IN", "IN");
NULL(10, "IS NULL", "是否为空"),
NOT_NULL(11, "IS NOT NULL", "是否不为空"),
IN(12, "IN", "IN");
private final Integer type;
......@@ -25,6 +27,18 @@ public enum WhereType {
this.desc = desc;
}
public Integer getType() {
return type;
}
public String getKey() {
return key;
}
public String getDesc() {
return desc;
}
public static WhereType getWhereType(Integer whereType) {
for (WhereType type : WhereType.values()) {
if (type.type == whereType) {
......
......@@ -79,13 +79,29 @@ public class SqlBuilderUtil {
*/
private final String WHERE_INIT = WHERE_SQL + " 1 = 1";
/**
* 左括号
*/
private final String LEFT_BRACKET = "(";
/**
* 右括号
*/
private final String RIGHT_BRACKET = ")";
/**
* 百分号%
*/
private final String PERCENT_SIGN = "%";
/**
* 单引号 '
*/
private final String SINGLE_QUOTE = "'";
/**
* 条件代码块标记开始
*/
public String MARK_KEY_START = "${";
public final String MARK_KEY_START = "${";
/**
* 条件代码块标记结束
*/
public String MARK_KEY_END = "}";
public final String MARK_KEY_END = "}";
/**
* 拼接命名参数sql
......@@ -105,7 +121,34 @@ public class SqlBuilderUtil {
sql.append(SPACE).append(WHERE_INIT);
for (int i = 0; i < params.size(); i++) {
ReqParam reqParam = params.get(i);
sql.append(SPACE).append(MARK_KEY_START).append(WHERE_AND).append(SPACE).append(reqParam.getParamName()).append(SPACE).append(WhereType.getWhereType(reqParam.getWhereType())).append(SPACE).append(COLON).append(reqParam.getParamName()).append(MARK_KEY_END);
sql.append(SPACE).append(MARK_KEY_START).append(WHERE_AND).append(SPACE).append(reqParam.getParamName());
if (WhereType.LIKE.getType() == reqParam.getWhereType()) {
// LIKE '%' :username '%' ,:username 两边一定要有空格,如果没有空格,是查询不到数据的
sql.append(SPACE).append(WhereType.getWhereType(reqParam.getWhereType()).getKey())
.append(SPACE).append(SINGLE_QUOTE).append(PERCENT_SIGN).append(SINGLE_QUOTE).append(SPACE)
.append(COLON).append(reqParam.getParamName())
.append(SPACE).append(SINGLE_QUOTE).append(PERCENT_SIGN).append(SINGLE_QUOTE).append(MARK_KEY_END);
} else if(WhereType.LIKE_LEFT.getType() == reqParam.getWhereType()) {
sql.append(SPACE).append(WhereType.getWhereType(reqParam.getWhereType()).getKey())
.append(SPACE).append(SINGLE_QUOTE).append(PERCENT_SIGN).append(SINGLE_QUOTE).append(SPACE)
.append(COLON).append(reqParam.getParamName()).append(MARK_KEY_END);
} else if(WhereType.LIKE_RIGHT.getType() == reqParam.getWhereType()) {
sql.append(SPACE).append(WhereType.getWhereType(reqParam.getWhereType()).getKey())
.append(SPACE).append(COLON).append(reqParam.getParamName())
.append(SPACE).append(SINGLE_QUOTE).append(PERCENT_SIGN).append(SINGLE_QUOTE).append(MARK_KEY_END);
} else if(WhereType.NULL.getType() == reqParam.getWhereType() || WhereType.NOT_NULL.getType() == reqParam.getWhereType()){
// is null或is not null不需要参数值
sql.append(SPACE).append(WhereType.getWhereType(reqParam.getWhereType()).getKey()).append(MARK_KEY_END);
} else if(WhereType.IN.getType() == reqParam.getWhereType()){
// in (:ids)
sql.append(SPACE).append(WhereType.getWhereType(reqParam.getWhereType()).getKey())
.append(SPACE).append(LEFT_BRACKET)
.append(COLON).append(reqParam.getParamName())
.append(RIGHT_BRACKET).append(MARK_KEY_END);
} else {
sql.append(SPACE).append(WhereType.getWhereType(reqParam.getWhereType()).getKey())
.append(SPACE).append(COLON).append(reqParam.getParamName()).append(MARK_KEY_END);
}
}
return sql.toString();
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment