From 2d5dd86a847bad1b1bb8faa9ad7f3b9ce6b54c32 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B8=A9=E5=B0=91?= Date: Thu, 10 May 2012 11:10:18 +0800 Subject: [PATCH] refactor mapping --- .../alibaba/druid/mapping/MappingContext.java | 10 +++ .../alibaba/druid/mapping/MappingEngine.java | 80 +++++++++++-------- .../spi/MSSQLServerMappingProvider.java | 8 +- .../druid/mapping/spi/MappingProvider.java | 8 +- .../mapping/spi/MySqlMappingProvider.java | 8 +- .../mapping/spi/OracleMappingProvider.java | 8 +- 6 files changed, 74 insertions(+), 48 deletions(-) diff --git a/src/main/java/com/alibaba/druid/mapping/MappingContext.java b/src/main/java/com/alibaba/druid/mapping/MappingContext.java index b178c01f7e..fd91b0f634 100644 --- a/src/main/java/com/alibaba/druid/mapping/MappingContext.java +++ b/src/main/java/com/alibaba/druid/mapping/MappingContext.java @@ -10,6 +10,8 @@ public class MappingContext { private boolean generateAlias = false; private boolean explainAllColumnToList = false; + private Entity defaultEntity; + public MappingContext(){ this(new ArrayList()); } @@ -42,4 +44,12 @@ public class MappingContext { this.explainAllColumnToList = explainAllColumnToList; } + public Entity getDefaultEntity() { + return defaultEntity; + } + + public void setDefaultEntity(Entity defaultEntity) { + this.defaultEntity = defaultEntity; + } + } diff --git a/src/main/java/com/alibaba/druid/mapping/MappingEngine.java b/src/main/java/com/alibaba/druid/mapping/MappingEngine.java index 21d7d5d2c7..d720a7e200 100644 --- a/src/main/java/com/alibaba/druid/mapping/MappingEngine.java +++ b/src/main/java/com/alibaba/druid/mapping/MappingEngine.java @@ -111,8 +111,8 @@ public class MappingEngine { return toSQL(stmt); } - public SQLSelectQueryBlock explainToSelectSQLObject(String sql) { - return provider.explainToSelectSQLObject(this, sql); + public SQLSelectQueryBlock explainToSelectSQLObject(String sql, MappingContext context) { + return provider.explainToSelectSQLObject(this, sql, context); } public String explainToSelectSQL(String sql) { @@ -124,7 +124,7 @@ public class MappingEngine { } public String explainToSelectSQL(String sql, MappingContext context) { - SQLSelectQueryBlock query = explainToSelectSQLObject(sql); + SQLSelectQueryBlock query = explainToSelectSQLObject(sql, context); MappingVisitor visitor = this.createMappingVisitor(context); query.accept(visitor); @@ -137,9 +137,9 @@ public class MappingEngine { public void afterResole(MappingVisitor visitor) { } - - public SQLDeleteStatement explainToDeleteSQLObject(String sql) { - return provider.explainToDeleteSQLObject(this, sql); + + public SQLDeleteStatement explainToDeleteSQLObject(String sql, MappingContext context) { + return provider.explainToDeleteSQLObject(this, sql, context); } public String explainToDeleteSQL(String sql) { @@ -147,7 +147,7 @@ public class MappingEngine { } public String explainToDeleteSQL(String sql, MappingContext context) { - SQLDeleteStatement stmt = explainToDeleteSQLObject(sql); + SQLDeleteStatement stmt = explainToDeleteSQLObject(sql, context); MappingVisitor visitor = this.createMappingVisitor(context); stmt.accept(visitor); @@ -165,8 +165,8 @@ public class MappingEngine { return property.getDbColumnName(); } - public SQLUpdateStatement explainToUpdateSQLObject(String sql) { - return provider.explainToUpdateSQLObject(this, sql); + public SQLUpdateStatement explainToUpdateSQLObject(String sql, MappingContext context) { + return provider.explainToUpdateSQLObject(this, sql, context); } public String explainToUpdateSQL(String sql) { @@ -174,7 +174,7 @@ public class MappingEngine { } public String explainToUpdateSQL(String sql, MappingContext context) { - SQLUpdateStatement stmt = explainToUpdateSQLObject(sql); + SQLUpdateStatement stmt = explainToUpdateSQLObject(sql, context); MappingVisitor visitor = this.createMappingVisitor(context); stmt.accept(visitor); @@ -184,8 +184,8 @@ public class MappingEngine { return toSQL(stmt); } - public SQLInsertStatement explainToInsertSQLObject(String sql) { - return provider.explainToInsertSQLObject(this, sql); + public SQLInsertStatement explainToInsertSQLObject(String sql, MappingContext context) { + return provider.explainToInsertSQLObject(this, sql, context); } public String explainToInsertSQL(String sql) { @@ -193,7 +193,7 @@ public class MappingEngine { } public String explainToInsertSQL(String sql, MappingContext context) { - SQLInsertStatement stmt = explainToInsertSQLObject(sql); + SQLInsertStatement stmt = explainToInsertSQLObject(sql, context); MappingVisitor visitor = this.createMappingVisitor(context); stmt.accept(visitor); @@ -229,35 +229,51 @@ public class MappingEngine { return out.toString(); } - + public List> select(Connection conn, String sql, List parameters) throws SQLException { - SQLSelectQueryBlock sqlObject = this.explainToSelectSQLObject(sql); - exportParameters(sqlObject, parameters); - String rawSql = this.toSQL(sqlObject); - return JdbcUtils.executeQuery(conn, rawSql, parameters); + return select(conn, sql, new MappingContext(parameters)); } + public List> select(Connection conn, String sql, MappingContext context) throws SQLException { + SQLSelectQueryBlock sqlObject = this.explainToSelectSQLObject(sql, context); + exportParameters(sqlObject, context.getParameters()); + String rawSql = this.toSQL(sqlObject); + return JdbcUtils.executeQuery(conn, rawSql, context.getParameters()); + } + public int delete(Connection conn, String sql, List parameters) throws SQLException { - SQLDeleteStatement sqlObject = this.explainToDeleteSQLObject(sql); - exportParameters(sqlObject, parameters); - String rawSql = this.toSQL(sqlObject); - int updateCount = JdbcUtils.executeUpdate(conn, rawSql, parameters); - return updateCount; + return delete(conn, sql, new MappingContext(parameters)); } + public int delete(Connection conn, String sql, MappingContext context) throws SQLException { + SQLDeleteStatement sqlObject = this.explainToDeleteSQLObject(sql, context); + exportParameters(sqlObject, context.getParameters()); + String rawSql = this.toSQL(sqlObject); + int updateCount = JdbcUtils.executeUpdate(conn, rawSql, context.getParameters()); + return updateCount; + } + public int update(Connection conn, String sql, List parameters) throws SQLException { - SQLUpdateStatement sqlObject = this.explainToUpdateSQLObject(sql); - exportParameters(sqlObject, parameters); - String rawSql = this.toSQL(sqlObject); - int updateCount = JdbcUtils.executeUpdate(conn, rawSql, parameters); - return updateCount; + return update(conn, sql, new MappingContext(parameters)); } - public void insert(Connection conn, String sql, List parameters) throws SQLException { - SQLInsertStatement sqlObject = this.explainToInsertSQLObject(sql); - exportParameters(sqlObject, parameters); + public int update(Connection conn, String sql, MappingContext context) throws SQLException { + SQLUpdateStatement sqlObject = this.explainToUpdateSQLObject(sql, context); + exportParameters(sqlObject, context.getParameters()); String rawSql = this.toSQL(sqlObject); - JdbcUtils.execute(conn, rawSql, parameters); + int updateCount = JdbcUtils.executeUpdate(conn, rawSql, context.getParameters()); + return updateCount; + } + + public void insert(Connection conn, String sql, List parameters) throws SQLException { + insert(conn, sql, new MappingContext(parameters)); + } + + public void insert(Connection conn, String sql, MappingContext context) throws SQLException { + SQLInsertStatement sqlObject = this.explainToInsertSQLObject(sql, context); + exportParameters(sqlObject, context.getParameters()); + String rawSql = this.toSQL(sqlObject); + JdbcUtils.execute(conn, rawSql, context.getParameters()); } public Connection getConnection() throws SQLException { diff --git a/src/main/java/com/alibaba/druid/mapping/spi/MSSQLServerMappingProvider.java b/src/main/java/com/alibaba/druid/mapping/spi/MSSQLServerMappingProvider.java index 4149a9e228..f0802f48b4 100644 --- a/src/main/java/com/alibaba/druid/mapping/spi/MSSQLServerMappingProvider.java +++ b/src/main/java/com/alibaba/druid/mapping/spi/MSSQLServerMappingProvider.java @@ -37,7 +37,7 @@ public class MSSQLServerMappingProvider implements MappingProvider { return new SQLServerOutputVisitor(out); } - public SQLSelectQueryBlock explainToSelectSQLObject(MappingEngine engine, String sql) { + public SQLSelectQueryBlock explainToSelectSQLObject(MappingEngine engine, String sql, MappingContext context) { SQLServerSelectParser selectParser = new SQLServerSelectParser(sql); SQLServerSelectQueryBlock query = (SQLServerSelectQueryBlock) selectParser.query(); @@ -60,7 +60,7 @@ public class MSSQLServerMappingProvider implements MappingProvider { return query; } - public SQLDeleteStatement explainToDeleteSQLObject(MappingEngine engine, String sql) { + public SQLDeleteStatement explainToDeleteSQLObject(MappingEngine engine, String sql, MappingContext context) { SQLServerStatementParser parser = new SQLServerStatementParser(sql); SQLDeleteStatement stmt = parser.parseDeleteStatement(); @@ -69,7 +69,7 @@ public class MSSQLServerMappingProvider implements MappingProvider { return stmt; } - public SQLUpdateStatement explainToUpdateSQLObject(MappingEngine engine, String sql) { + public SQLUpdateStatement explainToUpdateSQLObject(MappingEngine engine, String sql, MappingContext context) { SQLServerStatementParser parser = new SQLServerStatementParser(sql); SQLUpdateStatement stmt = parser.parseUpdateStatement(); @@ -78,7 +78,7 @@ public class MSSQLServerMappingProvider implements MappingProvider { return stmt; } - public SQLInsertStatement explainToInsertSQLObject(MappingEngine engine, String sql) { + public SQLInsertStatement explainToInsertSQLObject(MappingEngine engine, String sql, MappingContext context) { SQLServerStatementParser parser = new SQLServerStatementParser(sql); SQLInsertStatement stmt = (SQLInsertStatement) parser.parseInsert(); diff --git a/src/main/java/com/alibaba/druid/mapping/spi/MappingProvider.java b/src/main/java/com/alibaba/druid/mapping/spi/MappingProvider.java index 8885133739..56c297b83d 100644 --- a/src/main/java/com/alibaba/druid/mapping/spi/MappingProvider.java +++ b/src/main/java/com/alibaba/druid/mapping/spi/MappingProvider.java @@ -24,11 +24,11 @@ public interface MappingProvider { List explain(MappingEngine engine, String sql); - SQLSelectQueryBlock explainToSelectSQLObject(MappingEngine engine, String sql); + SQLSelectQueryBlock explainToSelectSQLObject(MappingEngine engine, String sql, MappingContext context); - SQLDeleteStatement explainToDeleteSQLObject(MappingEngine engine, String sql); + SQLDeleteStatement explainToDeleteSQLObject(MappingEngine engine, String sql, MappingContext context); - SQLUpdateStatement explainToUpdateSQLObject(MappingEngine engine, String sql); + SQLUpdateStatement explainToUpdateSQLObject(MappingEngine engine, String sql, MappingContext context); - SQLInsertStatement explainToInsertSQLObject(MappingEngine engine, String sql); + SQLInsertStatement explainToInsertSQLObject(MappingEngine engine, String sql, MappingContext context); } diff --git a/src/main/java/com/alibaba/druid/mapping/spi/MySqlMappingProvider.java b/src/main/java/com/alibaba/druid/mapping/spi/MySqlMappingProvider.java index 687645a868..55ed45833f 100644 --- a/src/main/java/com/alibaba/druid/mapping/spi/MySqlMappingProvider.java +++ b/src/main/java/com/alibaba/druid/mapping/spi/MySqlMappingProvider.java @@ -37,7 +37,7 @@ public class MySqlMappingProvider implements MappingProvider { return new MySqlOutputVisitor(out); } - public SQLSelectQueryBlock explainToSelectSQLObject(MappingEngine engine, String sql) { + public SQLSelectQueryBlock explainToSelectSQLObject(MappingEngine engine, String sql, MappingContext context) { MySqlSelectParser selectParser = new MySqlSelectParser(sql); MySqlSelectQueryBlock query = (MySqlSelectQueryBlock) selectParser.query(); @@ -60,7 +60,7 @@ public class MySqlMappingProvider implements MappingProvider { return query; } - public MySqlDeleteStatement explainToDeleteSQLObject(MappingEngine engine, String sql) { + public MySqlDeleteStatement explainToDeleteSQLObject(MappingEngine engine, String sql, MappingContext context) { MySqlStatementParser parser = new MySqlStatementParser(sql); MySqlDeleteStatement stmt = parser.parseDeleteStatement(); @@ -69,7 +69,7 @@ public class MySqlMappingProvider implements MappingProvider { return stmt; } - public SQLUpdateStatement explainToUpdateSQLObject(MappingEngine engine, String sql) { + public SQLUpdateStatement explainToUpdateSQLObject(MappingEngine engine, String sql, MappingContext context) { MySqlStatementParser parser = new MySqlStatementParser(sql); SQLUpdateStatement stmt = parser.parseUpdateStatement(); @@ -78,7 +78,7 @@ public class MySqlMappingProvider implements MappingProvider { return stmt; } - public SQLInsertStatement explainToInsertSQLObject(MappingEngine engine, String sql) { + public SQLInsertStatement explainToInsertSQLObject(MappingEngine engine, String sql, MappingContext context) { MySqlStatementParser parser = new MySqlStatementParser(sql); SQLInsertStatement stmt = (SQLInsertStatement) parser.parseInsert(); diff --git a/src/main/java/com/alibaba/druid/mapping/spi/OracleMappingProvider.java b/src/main/java/com/alibaba/druid/mapping/spi/OracleMappingProvider.java index 56821cc89b..41c09a16f6 100644 --- a/src/main/java/com/alibaba/druid/mapping/spi/OracleMappingProvider.java +++ b/src/main/java/com/alibaba/druid/mapping/spi/OracleMappingProvider.java @@ -34,14 +34,14 @@ public class OracleMappingProvider implements MappingProvider { return new OracleOutputVisitor(out, false); } - public SQLSelectQueryBlock explainToSelectSQLObject(MappingEngine engine, String sql) { + public SQLSelectQueryBlock explainToSelectSQLObject(MappingEngine engine, String sql, MappingContext context) { OracleSelectParser selectParser = new OracleSelectParser(sql); OracleSelectQueryBlock query = (OracleSelectQueryBlock) selectParser.query(); return query; } - public OracleDeleteStatement explainToDeleteSQLObject(MappingEngine engine, String sql) { + public OracleDeleteStatement explainToDeleteSQLObject(MappingEngine engine, String sql, MappingContext context) { OracleStatementParser parser = new OracleStatementParser(sql); OracleDeleteStatement stmt = parser.parseDeleteStatement(); @@ -50,7 +50,7 @@ public class OracleMappingProvider implements MappingProvider { return stmt; } - public SQLUpdateStatement explainToUpdateSQLObject(MappingEngine engine, String sql) { + public SQLUpdateStatement explainToUpdateSQLObject(MappingEngine engine, String sql, MappingContext context) { OracleStatementParser parser = new OracleStatementParser(sql); SQLUpdateStatement stmt = parser.parseUpdateStatement(); @@ -59,7 +59,7 @@ public class OracleMappingProvider implements MappingProvider { return stmt; } - public SQLInsertStatement explainToInsertSQLObject(MappingEngine engine, String sql) { + public SQLInsertStatement explainToInsertSQLObject(MappingEngine engine, String sql, MappingContext context) { OracleStatementParser parser = new OracleStatementParser(sql); SQLInsertStatement stmt = (SQLInsertStatement) parser.parseInsert(); MappingVisitorUtils.setTableSource(engine, stmt);