Kaynağa Gözat

下划线转驼峰

mxd 5 yıl önce
ebeveyn
işleme
8ca0992bd0

+ 46 - 36
src/main/java/org/ssssssss/script/functions/DatabaseQuery.java

@@ -1,6 +1,7 @@
 package org.ssssssss.script.functions;
 
 import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.jdbc.core.RowMapper;
 import org.springframework.jdbc.datasource.DataSourceUtils;
 import org.ssssssss.magicapi.config.DynamicDataSource;
 import org.ssssssss.magicapi.dialect.Dialect;
@@ -20,7 +21,7 @@ import java.sql.SQLException;
 import java.util.*;
 import java.util.concurrent.atomic.AtomicBoolean;
 
-public class DatabaseQuery extends HashMap<String,DatabaseQuery> {
+public class DatabaseQuery extends HashMap<String, DatabaseQuery> {
 
 	private DynamicDataSource dataSource;
 
@@ -28,108 +29,117 @@ public class DatabaseQuery extends HashMap<String,DatabaseQuery> {
 
 	private PageProvider pageProvider;
 
-	public DatabaseQuery(JdbcTemplate template,DynamicDataSource dataSource,PageProvider pageProvider) {
+	private RowMapper<Map<String, Object>> rowMapper;
+
+	public DatabaseQuery(JdbcTemplate template, DynamicDataSource dataSource, PageProvider pageProvider, RowMapper<Map<String, Object>> rowMapper) {
 		this.template = template;
 		this.dataSource = dataSource;
 		this.pageProvider = pageProvider;
+		this.rowMapper = rowMapper;
 	}
 
-	public DatabaseQuery(DynamicDataSource dataSource,PageProvider pageProvider) {
+	public DatabaseQuery(DynamicDataSource dataSource, PageProvider pageProvider, RowMapper<Map<String, Object>> rowMapper) {
 		this.dataSource = dataSource;
 		this.pageProvider = pageProvider;
+		this.rowMapper = rowMapper;
 		this.template = dataSource.getJdbcTemplate(null);
 
 	}
 
 	@Override
 	public DatabaseQuery get(Object key) {
-		if(key == null){
-			return new DatabaseQuery(dataSource.getJdbcTemplate(null),this.dataSource,this.pageProvider);
+		if (key == null) {
+			return new DatabaseQuery(dataSource.getJdbcTemplate(null), this.dataSource, this.pageProvider, this.rowMapper);
 		}
-		return new DatabaseQuery(dataSource.getJdbcTemplate(key.toString()),this.dataSource,this.pageProvider);
+		return new DatabaseQuery(dataSource.getJdbcTemplate(key.toString()), this.dataSource, this.pageProvider, this.rowMapper);
 	}
 
 
-	public Object select(String sql){
+	public Object select(String sql) {
 		BoundSql boundSql = new BoundSql(sql);
-		return template.queryForList(boundSql.getSql(),boundSql.getParameters());
+		return template.query(boundSql.getSql(), this.rowMapper, boundSql.getParameters());
 	}
-	public Object page(String sql){
+
+	public Object page(String sql) {
 		Page page = pageProvider.getPage(MagicScriptContext.get());
-		return page(sql,page.getLimit(),page.getOffset());
+		return page(sql, page.getLimit(), page.getOffset());
 	}
-	public Object page(String sql,long limit,long offset){
+
+	public Object page(String sql, long limit, long offset) {
 		BoundSql boundSql = new BoundSql(sql);
 		Connection connection = null;
 		int count;
-		PageResult<Map<String,Object>> result = new PageResult<>();
+		PageResult<Map<String, Object>> result = new PageResult<>();
 		Dialect dialect;
 		try {
 			connection = template.getDataSource().getConnection();
 			dialect = DialectUtils.getDialectFromUrl(connection.getMetaData().getURL());
-			count = template.queryForObject(dialect.getCountSql(boundSql.getSql()),Integer.class,boundSql.getParameters());
+			count = template.queryForObject(dialect.getCountSql(boundSql.getSql()), Integer.class, boundSql.getParameters());
 			result.setTotal(count);
 		} catch (SQLException e) {
-			throw new MagicAPIException("自动获取数据库方言失败",e);
-		} finally{
-			DataSourceUtils.releaseConnection(connection,template.getDataSource());
+			throw new MagicAPIException("自动获取数据库方言失败", e);
+		} finally {
+			DataSourceUtils.releaseConnection(connection, template.getDataSource());
 		}
-		if(count > 0){
-			result.setList(template.queryForList(dialect.getPageSql(boundSql.getSql(), boundSql,offset,limit),boundSql.getParameters()));
+		if (count > 0) {
+			String pageSql = dialect.getPageSql(boundSql.getSql(), boundSql, offset, limit);
+			result.setList(template.query(pageSql, this.rowMapper, boundSql.getParameters()));
 		}
 		return result;
 	}
-	public Integer selectInt(String sql){
+
+	public Integer selectInt(String sql) {
 		BoundSql boundSql = new BoundSql(sql);
-		return template.queryForObject(boundSql.getSql(),boundSql.getParameters(),Integer.class);
+		return template.queryForObject(boundSql.getSql(), boundSql.getParameters(), Integer.class);
 	}
 
-	public Map<String,Object> selectOne(String sql){
+	public Map<String, Object> selectOne(String sql) {
 		BoundSql boundSql = new BoundSql(sql);
-		List<Map<String, Object>> list = template.queryForList(boundSql.getSql(),boundSql.getParameters());
-		return list!= null && list.size() > 0 ? list.get(0) : null;
+		List<Map<String, Object>> list = template.query(boundSql.getSql(), this.rowMapper, boundSql.getParameters());
+		return list != null && list.size() > 0 ? list.get(0) : null;
 	}
 
-	public Object selectValue(String sql){
+	public Object selectValue(String sql) {
 		BoundSql boundSql = new BoundSql(sql);
-		return template.queryForObject(boundSql.getSql(),boundSql.getParameters(),Object.class);
+		return template.queryForObject(boundSql.getSql(), boundSql.getParameters(), Object.class);
 	}
 
 	private static Tokenizer tokenizer = new Tokenizer();
 
-	private static GenericTokenParser concatTokenParser = new GenericTokenParser("${","}",false);
+	private static GenericTokenParser concatTokenParser = new GenericTokenParser("${", "}", false);
 
-	private static GenericTokenParser replaceTokenParser = new GenericTokenParser("#{","}",true);
+	private static GenericTokenParser replaceTokenParser = new GenericTokenParser("#{", "}", true);
 
-	private static GenericTokenParser ifTokenParser = new GenericTokenParser("?{","}",true);
+	private static GenericTokenParser ifTokenParser = new GenericTokenParser("?{", "}", true);
 
-	private static GenericTokenParser ifParamTokenParser = new GenericTokenParser("?{",",",true);
+	private static GenericTokenParser ifParamTokenParser = new GenericTokenParser("?{", ",", true);
 
-	public static class BoundSql{
+	public static class BoundSql {
 		private String sql;
 		private List<Object> parameters = new ArrayList<>();
-		BoundSql(String sql){
+
+		BoundSql(String sql) {
 			MagicScriptContext context = MagicScriptContext.get();
-			this.sql = ifTokenParser.parse(sql,text->{
+			this.sql = ifTokenParser.parse(sql, text -> {
 				AtomicBoolean ifTrue = new AtomicBoolean(false);
 				String val = ifParamTokenParser.parse("?{" + text, param -> {
 					Object result = Parser.parseExpression(new TokenStream(tokenizer.tokenize(param))).evaluate(context);
 					ifTrue.set(Objects.equals(true, result));
 					return null;
 				});
-				if(ifTrue.get()){
+				if (ifTrue.get()) {
 					return val;
 				}
 				return "";
 			});
-			this.sql = concatTokenParser.parse(this.sql,text->String.valueOf(Parser.parseExpression(new TokenStream(tokenizer.tokenize(text))).evaluate(context)));
-			this.sql = replaceTokenParser.parse(this.sql,text->{
+			this.sql = concatTokenParser.parse(this.sql, text -> String.valueOf(Parser.parseExpression(new TokenStream(tokenizer.tokenize(text))).evaluate(context)));
+			this.sql = replaceTokenParser.parse(this.sql, text -> {
 				parameters.add(Parser.parseExpression(new TokenStream(tokenizer.tokenize(text))).evaluate(context));
 				return "?";
 			});
 		}
 
-		public void addParameter(Object value){
+		public void addParameter(Object value) {
 			parameters.add(value);
 		}