Commit a2601092 by yuwei

2.0.0项目初始化

parent 67f6c572
...@@ -59,6 +59,14 @@ public interface DbQuery { ...@@ -59,6 +59,14 @@ public interface DbQuery {
int count(String sql, Object[] args); int count(String sql, Object[] args);
/** /**
* 获取总数带查询参数 NamedParameterJdbcTemplate
*
* @param sql
* @return
*/
int count(String sql, Map<String, Object> params);
/**
* 查询结果列表 * 查询结果列表
* *
* @param sql * @param sql
...@@ -94,4 +102,14 @@ public interface DbQuery { ...@@ -94,4 +102,14 @@ public interface DbQuery {
* @return * @return
*/ */
PageResult<Map<String, Object>> queryByPage(String sql, Object[] args, long offset, long size); 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; ...@@ -9,6 +9,7 @@ import cn.datax.common.database.exception.DataQueryException;
import com.zaxxer.hikari.HikariDataSource; import com.zaxxer.hikari.HikariDataSource;
import lombok.Setter; import lombok.Setter;
import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import javax.sql.DataSource; import javax.sql.DataSource;
import java.sql.Connection; import java.sql.Connection;
...@@ -62,6 +63,17 @@ public class DbQueryTemplate implements DbQuery { ...@@ -62,6 +63,17 @@ public class DbQueryTemplate implements DbQuery {
} }
@Override @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) { public List<Map<String, Object>> queryList(String sql) {
return jdbcTemplate.queryForList(sql); return jdbcTemplate.queryForList(sql);
} }
...@@ -88,7 +100,11 @@ public class DbQueryTemplate implements DbQuery { ...@@ -88,7 +100,11 @@ public class DbQueryTemplate implements DbQuery {
} }
@Override @Override
public int count(String sql, Object[] args) { public PageResult<Map<String, Object>> queryByPage(String sql, Map<String, Object> params, long offset, long size) {
return jdbcTemplate.queryForObject(dbDialect.count(sql), args, Integer.class); 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 { ...@@ -76,11 +76,9 @@ public class ApiCallServiceImpl implements ApiCallService {
ThreadUtil.getInstance().get().setMsg(e.getMessage()); ThreadUtil.getInstance().get().setMsg(e.getMessage());
throw new DataException("API调用动态构造SQL语句出错"); throw new DataException("API调用动态构造SQL语句出错");
} }
Object[] args = new Object[] {};
Map<String, Object> acceptedFilters = sqlFilterResult.getAcceptedFilters(); Map<String, Object> acceptedFilters = sqlFilterResult.getAcceptedFilters();
args = acceptedFilters.values().toArray();
try { 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); pageResult.setPageNum(pageNum).setPageSize(pageSize);
ThreadUtil.getInstance().get().setCallerSize(pageResult.getData().size()); ThreadUtil.getInstance().get().setCallerSize(pageResult.getData().size());
return pageResult; return pageResult;
......
...@@ -137,10 +137,12 @@ public class SqlBuilderUtil { ...@@ -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())); log.debug("The filter namedParameters=" + parsedSql.getParamNames() + " is accepted on segment=" + sql.substring(start, end + MARK_KEY_END.length()));
} }
// 下面方法2选1可以获取条件代码块 // 下面方法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 = 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); LinkedHashMap<String, Object> linkAcceptedFilters = NamedParameterUtil.buildValueArray(parsedSql, filters);
acceptedFilters.putAll(linkAcceptedFilters); acceptedFilters.putAll(linkAcceptedFilters);
......
...@@ -5,13 +5,15 @@ public enum WhereType { ...@@ -5,13 +5,15 @@ public enum WhereType {
EQUALS(1, "=", "等于"), EQUALS(1, "=", "等于"),
NOT_EQUALS(2, "!=", "不等于"), NOT_EQUALS(2, "!=", "不等于"),
LIKE(3, "LIKE", "全模糊查询"), LIKE(3, "LIKE", "全模糊查询"),
LIKE_LEFT(4, "LIKE_LEFT", "左模糊查询"), LIKE_LEFT(4, "LIKE", "左模糊查询"),
LIKE_RIGHT(5, "LIKE_RIGHT", "右模糊查询"), LIKE_RIGHT(5, "LIKE", "右模糊查询"),
GREATER_THAN(6, ">", "大于"), GREATER_THAN(6, ">", "大于"),
GREATER_THAN_EQUALS(7, ">=", "大于等于"), GREATER_THAN_EQUALS(7, ">=", "大于等于"),
LESS_THAN(8, "<", "小于"), LESS_THAN(8, "<", "小于"),
LESS_THAN_EQUALS(9, "<=", "小于等于"), 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; private final Integer type;
...@@ -25,6 +27,18 @@ public enum WhereType { ...@@ -25,6 +27,18 @@ public enum WhereType {
this.desc = desc; this.desc = desc;
} }
public Integer getType() {
return type;
}
public String getKey() {
return key;
}
public String getDesc() {
return desc;
}
public static WhereType getWhereType(Integer whereType) { public static WhereType getWhereType(Integer whereType) {
for (WhereType type : WhereType.values()) { for (WhereType type : WhereType.values()) {
if (type.type == whereType) { if (type.type == whereType) {
......
...@@ -79,13 +79,29 @@ public class SqlBuilderUtil { ...@@ -79,13 +79,29 @@ public class SqlBuilderUtil {
*/ */
private final String WHERE_INIT = WHERE_SQL + " 1 = 1"; 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 * 拼接命名参数sql
...@@ -105,7 +121,34 @@ public class SqlBuilderUtil { ...@@ -105,7 +121,34 @@ public class SqlBuilderUtil {
sql.append(SPACE).append(WHERE_INIT); sql.append(SPACE).append(WHERE_INIT);
for (int i = 0; i < params.size(); i++) { for (int i = 0; i < params.size(); i++) {
ReqParam reqParam = params.get(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(); 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