From 66019f7d497628acc19bf2c4d84ebb38a19c7b03 Mon Sep 17 00:00:00 2001 From: wangliang Date: Mon, 1 Feb 2021 19:57:18 +0800 Subject: [PATCH 1/4] mysql split --- pom.xml | 2 +- .../mapper/AutoBuilderMapper.java | 18 +++++ .../simplemybatis/parser/TableInfo.java | 4 +- .../provider/AutoBuilderProvider.java | 24 +++++++ .../simplemybatis/provider/BaseProvider.java | 39 ----------- .../provider/CommandProvider.java | 58 ++++++++--------- .../provider/CommandSQLBuilder.java | 24 +++++++ .../simplemybatis/provider/QueryProvider.java | 28 ++++---- .../provider/QuerySQLBuilder.java | 17 +++++ .../SimpleMybatisProviderContext.java | 47 ++++++++++++++ .../provider/SimpleMybatisSQLBuilder.java | 12 ++++ .../provider/SimpleProviderContext.java | 64 ++++++++++++++++++ .../mysql/MysqlCommandSQLBuilder.java | 65 +++++++++++++++++++ .../provider/mysql/MysqlQuerySQLBuilder.java | 34 ++++++++++ .../provider/mysql/MysqlSqlBuilder.java | 15 +++++ .../mysql/MysqlSqlParser.java} | 29 +++++---- .../simplemybatis/parser/SqlParserTest.java | 37 ++++++----- .../provider/AutoBuilderProviderTest.java | 41 ++++++++++++ .../simplemybatis/query/QueryTest.java | 10 +-- 19 files changed, 445 insertions(+), 123 deletions(-) create mode 100644 src/main/java/com/codingapi/simplemybatis/mapper/AutoBuilderMapper.java create mode 100644 src/main/java/com/codingapi/simplemybatis/provider/AutoBuilderProvider.java delete mode 100644 src/main/java/com/codingapi/simplemybatis/provider/BaseProvider.java create mode 100644 src/main/java/com/codingapi/simplemybatis/provider/CommandSQLBuilder.java create mode 100644 src/main/java/com/codingapi/simplemybatis/provider/QuerySQLBuilder.java create mode 100644 src/main/java/com/codingapi/simplemybatis/provider/SimpleMybatisProviderContext.java create mode 100644 src/main/java/com/codingapi/simplemybatis/provider/SimpleMybatisSQLBuilder.java create mode 100644 src/main/java/com/codingapi/simplemybatis/provider/SimpleProviderContext.java create mode 100644 src/main/java/com/codingapi/simplemybatis/provider/mysql/MysqlCommandSQLBuilder.java create mode 100644 src/main/java/com/codingapi/simplemybatis/provider/mysql/MysqlQuerySQLBuilder.java create mode 100644 src/main/java/com/codingapi/simplemybatis/provider/mysql/MysqlSqlBuilder.java rename src/main/java/com/codingapi/simplemybatis/{parser/SqlParser.java => provider/mysql/MysqlSqlParser.java} (96%) create mode 100644 src/test/java/com/codingapi/simplemybatis/provider/AutoBuilderProviderTest.java diff --git a/pom.xml b/pom.xml index e690f99..18ae23f 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ com.codingapi simple-mybatis - 1.2.1 + 1.2.2 simple-mybatis https://github.com/codingapi/simple-mybatis simple mybatis project for Spring Boot diff --git a/src/main/java/com/codingapi/simplemybatis/mapper/AutoBuilderMapper.java b/src/main/java/com/codingapi/simplemybatis/mapper/AutoBuilderMapper.java new file mode 100644 index 0000000..21be245 --- /dev/null +++ b/src/main/java/com/codingapi/simplemybatis/mapper/AutoBuilderMapper.java @@ -0,0 +1,18 @@ +package com.codingapi.simplemybatis.mapper; + +import com.codingapi.simplemybatis.provider.AutoBuilderProvider; +import org.apache.ibatis.annotations.UpdateProvider; + +/** + * @author lorne + * @since 1.0.0 + */ +public interface AutoBuilderMapper extends BaseMapper{ + + @UpdateProvider(type = AutoBuilderProvider.class, method = "create") + void create(); + + @UpdateProvider(type = AutoBuilderProvider.class, method = "drop") + void drop(); + +} diff --git a/src/main/java/com/codingapi/simplemybatis/parser/TableInfo.java b/src/main/java/com/codingapi/simplemybatis/parser/TableInfo.java index 21ae4a7..1180c0e 100644 --- a/src/main/java/com/codingapi/simplemybatis/parser/TableInfo.java +++ b/src/main/java/com/codingapi/simplemybatis/parser/TableInfo.java @@ -16,7 +16,9 @@ public class TableInfo { private List columnFields; - public TableInfo(String tableName, TableParser.ColumnFiled idColumnFiled, List columnFields) { + public TableInfo(String tableName, + TableParser.ColumnFiled idColumnFiled, + List columnFields) { this.tableName = tableName; this.idColumnFiled = idColumnFiled; this.columnFields = columnFields; diff --git a/src/main/java/com/codingapi/simplemybatis/provider/AutoBuilderProvider.java b/src/main/java/com/codingapi/simplemybatis/provider/AutoBuilderProvider.java new file mode 100644 index 0000000..20ff5d9 --- /dev/null +++ b/src/main/java/com/codingapi/simplemybatis/provider/AutoBuilderProvider.java @@ -0,0 +1,24 @@ +package com.codingapi.simplemybatis.provider; + +import com.codingapi.simplemybatis.parser.TableInfo; + +import java.lang.reflect.InvocationTargetException; + +/** + * @author lorne + * @since 1.0.0 + */ +public class AutoBuilderProvider { + + public String create(org.apache.ibatis.builder.annotation.ProviderContext context) throws IllegalAccessException, InvocationTargetException { + SimpleProviderContext simpleProviderContext = new SimpleProviderContext(context,null); + TableInfo tableInfo = simpleProviderContext.nullTableInfo(); + return "create table "+tableInfo.getTableName(); + } + + public String drop(org.apache.ibatis.builder.annotation.ProviderContext context) throws IllegalAccessException, InvocationTargetException { + SimpleProviderContext simpleProviderContext = new SimpleProviderContext(context,null); + TableInfo tableInfo = simpleProviderContext.nullTableInfo(); + return "drop table "+tableInfo.getTableName(); + } +} diff --git a/src/main/java/com/codingapi/simplemybatis/provider/BaseProvider.java b/src/main/java/com/codingapi/simplemybatis/provider/BaseProvider.java deleted file mode 100644 index d4bcd45..0000000 --- a/src/main/java/com/codingapi/simplemybatis/provider/BaseProvider.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.codingapi.simplemybatis.provider; - -import com.codingapi.simplemybatis.mapper.*; -import com.codingapi.simplemybatis.parser.SqlParser; -import com.codingapi.simplemybatis.parser.TableInfo; -import com.codingapi.simplemybatis.parser.TableParser; -import org.apache.ibatis.builder.annotation.ProviderContext; - -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.ParameterizedType; -import java.util.stream.Stream; - - -public class BaseProvider { - - protected Class entityType(ProviderContext context) { - return Stream.of(context.getMapperType().getGenericInterfaces()) - .filter(ParameterizedType.class::isInstance) - .map(ParameterizedType.class::cast) - .filter( - (type) -> - type.getRawType().getClass().isInstance(BaseMapper.class) - ) - .findFirst() - .map(type -> type.getActualTypeArguments()[0]) - .filter(Class.class::isInstance).map(Class.class::cast) - .orElseThrow(() -> new IllegalStateException( - "not find BaseMapper type " + context.getMapperType().getName() + ".")); - } - - protected SqlParser createParser(Object obj, ProviderContext context) - throws IllegalAccessException, InvocationTargetException { - Class clazz = entityType(context); - TableParser tableParser = new TableParser(clazz); - TableInfo tableInfo = tableParser.parser(obj); - return new SqlParser(tableInfo); - } - -} diff --git a/src/main/java/com/codingapi/simplemybatis/provider/CommandProvider.java b/src/main/java/com/codingapi/simplemybatis/provider/CommandProvider.java index a52411d..536576e 100644 --- a/src/main/java/com/codingapi/simplemybatis/provider/CommandProvider.java +++ b/src/main/java/com/codingapi/simplemybatis/provider/CommandProvider.java @@ -1,54 +1,48 @@ package com.codingapi.simplemybatis.provider; -import com.codingapi.simplemybatis.parser.SqlParser; -import org.apache.ibatis.builder.annotation.ProviderContext; - import java.lang.reflect.InvocationTargetException; -import java.util.List; import java.util.Map; -public class CommandProvider extends BaseProvider { - +public class CommandProvider { - public String save(Object obj, ProviderContext context) throws IllegalAccessException, InvocationTargetException { - SqlParser sqlParser = createParser(obj, context); - return sqlParser.createInsertSql(); + public String save(Object obj, org.apache.ibatis.builder.annotation.ProviderContext context) throws IllegalAccessException, InvocationTargetException { + SimpleProviderContext simpleProviderContext = new SimpleProviderContext(context,obj); + return SimpleMybatisProviderContext.getInstance().getBuilder(CommandSQLBuilder.class).insertSql(simpleProviderContext); } - public String saveAll(Map map, ProviderContext context) throws IllegalAccessException, InvocationTargetException { - List list = (List) map.get("list"); - if (list == null || list.size() == 0) { - throw new RuntimeException("not data."); - } - SqlParser sqlParser = createParser(null, context); - return sqlParser.createInsertAllSql(list); + public String saveAll(Map map, org.apache.ibatis.builder.annotation.ProviderContext context) throws IllegalAccessException, InvocationTargetException { + SimpleProviderContext simpleProviderContext = new SimpleProviderContext(context,map); + return SimpleMybatisProviderContext.getInstance().getBuilder(CommandSQLBuilder.class).insertAllSql(simpleProviderContext); } - public String deleteAll(Map map, ProviderContext context) throws IllegalAccessException, InvocationTargetException { - SqlParser sqlParser = createParser(null, context); - return sqlParser.createDeleteAllSql(); + public String deleteAll(Map map, org.apache.ibatis.builder.annotation.ProviderContext context) throws IllegalAccessException, InvocationTargetException { + SimpleProviderContext simpleProviderContext = new SimpleProviderContext(context,map); + return SimpleMybatisProviderContext.getInstance().getBuilder(CommandSQLBuilder.class).deleteAllSql(simpleProviderContext); } - public String deleteAllById(Map map, ProviderContext context) throws IllegalAccessException, InvocationTargetException { - SqlParser sqlParser = createParser(null, context); - return sqlParser.createDeleteAllByIdSql(); + public String deleteAllById(Map map, org.apache.ibatis.builder.annotation.ProviderContext context) throws IllegalAccessException, InvocationTargetException { + SimpleProviderContext simpleProviderContext = new SimpleProviderContext(context,map); + return SimpleMybatisProviderContext.getInstance().getBuilder(CommandSQLBuilder.class).deleteAllByIdSql(simpleProviderContext); } - - public String update(Object obj, ProviderContext context) throws IllegalAccessException, InvocationTargetException { - SqlParser sqlParser = createParser(obj, context); - return sqlParser.createUpdateSql(); + public String deleteById(Object obj, org.apache.ibatis.builder.annotation.ProviderContext context) throws IllegalAccessException, InvocationTargetException { + SimpleProviderContext simpleProviderContext = new SimpleProviderContext(context,obj); + return SimpleMybatisProviderContext.getInstance().getBuilder(CommandSQLBuilder.class).deleteByIdSql(simpleProviderContext); } - public String delete(Object obj, ProviderContext context) throws IllegalAccessException, InvocationTargetException { - SqlParser sqlParser = createParser(obj, context); - return sqlParser.createDeleteSql(); + public String delete(Object obj, org.apache.ibatis.builder.annotation.ProviderContext context) throws IllegalAccessException, InvocationTargetException { + SimpleProviderContext simpleProviderContext = new SimpleProviderContext(context,obj); + return SimpleMybatisProviderContext.getInstance().getBuilder(CommandSQLBuilder.class).deleteSql(simpleProviderContext); } - public String deleteById(Object obj, ProviderContext context) throws IllegalAccessException, InvocationTargetException { - SqlParser sqlParser = createParser(null, context); - return sqlParser.createDeleteSql(); + + public String update(Object obj, org.apache.ibatis.builder.annotation.ProviderContext context) throws IllegalAccessException, InvocationTargetException { + SimpleProviderContext simpleProviderContext = new SimpleProviderContext(context,obj); + return SimpleMybatisProviderContext.getInstance().getBuilder(CommandSQLBuilder.class).updateSql(simpleProviderContext); } + + + } diff --git a/src/main/java/com/codingapi/simplemybatis/provider/CommandSQLBuilder.java b/src/main/java/com/codingapi/simplemybatis/provider/CommandSQLBuilder.java new file mode 100644 index 0000000..d2e547d --- /dev/null +++ b/src/main/java/com/codingapi/simplemybatis/provider/CommandSQLBuilder.java @@ -0,0 +1,24 @@ +package com.codingapi.simplemybatis.provider; + +import java.lang.reflect.InvocationTargetException; + +/** + * @author lorne + * @since 1.0.0 + */ +public interface CommandSQLBuilder extends SimpleMybatisSQLBuilder { + + String insertSql(SimpleProviderContext context)throws IllegalAccessException, InvocationTargetException; + + String insertAllSql(SimpleProviderContext simpleProviderContext) throws IllegalAccessException,InvocationTargetException; + + String deleteSql(SimpleProviderContext simpleProviderContext)throws IllegalAccessException, InvocationTargetException ; + + String deleteAllSql(SimpleProviderContext simpleProviderContext) throws IllegalAccessException,InvocationTargetException; + + String deleteAllByIdSql(SimpleProviderContext simpleProviderContext) throws IllegalAccessException,InvocationTargetException; + + String deleteByIdSql(SimpleProviderContext simpleProviderContext) throws IllegalAccessException,InvocationTargetException; + + String updateSql(SimpleProviderContext simpleProviderContext) throws IllegalAccessException,InvocationTargetException; +} diff --git a/src/main/java/com/codingapi/simplemybatis/provider/QueryProvider.java b/src/main/java/com/codingapi/simplemybatis/provider/QueryProvider.java index dfef768..d2f3c7e 100644 --- a/src/main/java/com/codingapi/simplemybatis/provider/QueryProvider.java +++ b/src/main/java/com/codingapi/simplemybatis/provider/QueryProvider.java @@ -1,34 +1,36 @@ package com.codingapi.simplemybatis.provider; -import com.codingapi.simplemybatis.parser.SqlParser; +import com.codingapi.simplemybatis.provider.mysql.MysqlSqlParser; import com.codingapi.simplemybatis.query.Query; import com.codingapi.simplemybatis.query.SqlBuilder; import org.apache.ibatis.annotations.Param; -import org.apache.ibatis.builder.annotation.ProviderContext; import java.lang.reflect.InvocationTargetException; -public class QueryProvider extends BaseProvider { +public class QueryProvider { - public String getById(Object obj, ProviderContext context) throws IllegalAccessException, InvocationTargetException { - SqlParser sqlParser = createParser(null, context); - return sqlParser.createGetByIdSql(); + public String getById(Object obj, org.apache.ibatis.builder.annotation.ProviderContext context) throws IllegalAccessException, InvocationTargetException { + SimpleProviderContext simpleProviderContext = new SimpleProviderContext(context,obj); + return SimpleMybatisProviderContext.getInstance().getBuilder(QuerySQLBuilder.class).getById(simpleProviderContext); } - public String findAll(ProviderContext context) throws IllegalAccessException, InvocationTargetException { - SqlParser sqlParser = createParser(null, context); - return sqlParser.createSelectAll(); + public String findAll(org.apache.ibatis.builder.annotation.ProviderContext context) throws IllegalAccessException, InvocationTargetException { + SimpleProviderContext simpleProviderContext = new SimpleProviderContext(context,null); + MysqlSqlParser mysqlSqlParser = new MysqlSqlParser(simpleProviderContext.nullTableInfo()); + return mysqlSqlParser.createSelectAll(); } - public String query(@Param("query") Query query, ProviderContext context) throws IllegalAccessException, InvocationTargetException { - SqlParser sqlParser = createParser(null, context); - return sqlParser.createQuery(query); + public String query(@Param("query") Query query, org.apache.ibatis.builder.annotation.ProviderContext context) throws IllegalAccessException, InvocationTargetException { + SimpleProviderContext simpleProviderContext = new SimpleProviderContext(context,query); + MysqlSqlParser mysqlSqlParser = new MysqlSqlParser(simpleProviderContext.nullTableInfo()); + return mysqlSqlParser.createQuery(query); } - public String queryView(@Param("query") Query query, ProviderContext context) throws IllegalAccessException, InvocationTargetException { + public String queryView(@Param("query") Query query, org.apache.ibatis.builder.annotation.ProviderContext context) throws IllegalAccessException, InvocationTargetException { + SimpleProviderContext simpleProviderContext = new SimpleProviderContext(context,query); SqlBuilder sqlBuilder = new SqlBuilder(query.getSelect(), null, query); return sqlBuilder.getSql(); } diff --git a/src/main/java/com/codingapi/simplemybatis/provider/QuerySQLBuilder.java b/src/main/java/com/codingapi/simplemybatis/provider/QuerySQLBuilder.java new file mode 100644 index 0000000..3be3aea --- /dev/null +++ b/src/main/java/com/codingapi/simplemybatis/provider/QuerySQLBuilder.java @@ -0,0 +1,17 @@ +package com.codingapi.simplemybatis.provider; + +import java.lang.reflect.InvocationTargetException; + + +public interface QuerySQLBuilder extends SimpleMybatisSQLBuilder { + + String getById(SimpleProviderContext simpleProviderContext) throws IllegalAccessException, InvocationTargetException ; + + String findAll(SimpleProviderContext simpleProviderContext) throws IllegalAccessException, InvocationTargetException ; + + String query(SimpleProviderContext simpleProviderContext) throws IllegalAccessException, InvocationTargetException ; + + + String queryView(SimpleProviderContext simpleProviderContext) throws IllegalAccessException, InvocationTargetException; + +} diff --git a/src/main/java/com/codingapi/simplemybatis/provider/SimpleMybatisProviderContext.java b/src/main/java/com/codingapi/simplemybatis/provider/SimpleMybatisProviderContext.java new file mode 100644 index 0000000..1143bcb --- /dev/null +++ b/src/main/java/com/codingapi/simplemybatis/provider/SimpleMybatisProviderContext.java @@ -0,0 +1,47 @@ +package com.codingapi.simplemybatis.provider; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author lorne + * @since 1.0.0 + */ +public class SimpleMybatisProviderContext { + + private final List commandSQLBuilders; + + private SimpleMybatisProviderContext(){ + this.commandSQLBuilders = new ArrayList<>(); + } + + private void addSimpleMybatisSQLBuilder(SimpleMybatisSQLBuilder sqlBuilder){ + this.commandSQLBuilders.add(sqlBuilder); + } + + private static SimpleMybatisProviderContext context; + + public static SimpleMybatisProviderContext getInstance(){ + if(context==null){ + synchronized (SimpleMybatisProviderContext.class){ + context = new SimpleMybatisProviderContext(); + } + } + return context; + } + + public void registerSQLBuilder(SimpleMybatisSQLBuilder sqlBuilder){ + this.addSimpleMybatisSQLBuilder(sqlBuilder); + } + + public T getBuilder(Class clazz){ + for(SimpleMybatisSQLBuilder sqlBuilder: commandSQLBuilders){ + if(clazz.isAssignableFrom(sqlBuilder.getClass())){ + return (T)sqlBuilder; + } + } + return null; + } + + +} diff --git a/src/main/java/com/codingapi/simplemybatis/provider/SimpleMybatisSQLBuilder.java b/src/main/java/com/codingapi/simplemybatis/provider/SimpleMybatisSQLBuilder.java new file mode 100644 index 0000000..9307af4 --- /dev/null +++ b/src/main/java/com/codingapi/simplemybatis/provider/SimpleMybatisSQLBuilder.java @@ -0,0 +1,12 @@ +package com.codingapi.simplemybatis.provider; + +/** + * @author lorne + * @since 1.0.0 + */ +public interface SimpleMybatisSQLBuilder { + + + + +} diff --git a/src/main/java/com/codingapi/simplemybatis/provider/SimpleProviderContext.java b/src/main/java/com/codingapi/simplemybatis/provider/SimpleProviderContext.java new file mode 100644 index 0000000..23c2114 --- /dev/null +++ b/src/main/java/com/codingapi/simplemybatis/provider/SimpleProviderContext.java @@ -0,0 +1,64 @@ +package com.codingapi.simplemybatis.provider; + +import com.codingapi.simplemybatis.mapper.BaseMapper; +import com.codingapi.simplemybatis.parser.TableInfo; +import com.codingapi.simplemybatis.parser.TableParser; +import org.apache.ibatis.builder.annotation.ProviderContext; + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.ParameterizedType; +import java.util.stream.Stream; + + +public final class SimpleProviderContext { + + private ProviderContext providerContext; + private Object parameter; + + SimpleProviderContext(ProviderContext providerContext, Object parameter) { + this.providerContext = providerContext; + this.parameter = parameter; + } + + public Object getParameter() { + return parameter; + } + + public T getParameter(Class clazz) { + return (T)parameter; + } + + public ProviderContext getProviderContext() { + return providerContext; + } + + private Class entityType() { + return Stream.of(providerContext.getMapperType().getGenericInterfaces()) + .filter(ParameterizedType.class::isInstance) + .map(ParameterizedType.class::cast) + .filter( + (type) -> + type.getRawType().getClass().isInstance(BaseMapper.class) + ) + .findFirst() + .map(type -> type.getActualTypeArguments()[0]) + .filter(Class.class::isInstance).map(Class.class::cast) + .orElseThrow(() -> new IllegalStateException( + "not find BaseMapper type " + providerContext.getMapperType().getName() + ".")); + } + + public TableInfo tableInfo() + throws IllegalAccessException, InvocationTargetException { + Class clazz = entityType(); + TableParser tableParser = new TableParser(clazz); + return tableParser.parser(parameter); + } + + public TableInfo nullTableInfo() + throws IllegalAccessException, InvocationTargetException { + Class clazz = entityType(); + TableParser tableParser = new TableParser(clazz); + return tableParser.parser(null); + } + +} diff --git a/src/main/java/com/codingapi/simplemybatis/provider/mysql/MysqlCommandSQLBuilder.java b/src/main/java/com/codingapi/simplemybatis/provider/mysql/MysqlCommandSQLBuilder.java new file mode 100644 index 0000000..24ce8bc --- /dev/null +++ b/src/main/java/com/codingapi/simplemybatis/provider/mysql/MysqlCommandSQLBuilder.java @@ -0,0 +1,65 @@ +package com.codingapi.simplemybatis.provider.mysql; + +import com.codingapi.simplemybatis.parser.TableInfo; +import com.codingapi.simplemybatis.provider.CommandSQLBuilder; +import com.codingapi.simplemybatis.provider.SimpleProviderContext; + +import java.lang.reflect.InvocationTargetException; +import java.util.List; +import java.util.Map; + +/** + * @author lorne + * @since 1.0.0 + */ +public class MysqlCommandSQLBuilder implements CommandSQLBuilder { + + + @Override + public String insertSql(SimpleProviderContext context) throws IllegalAccessException, InvocationTargetException { + TableInfo tableInfo = context.tableInfo(); + MysqlSqlParser mysqlSqlParser = new MysqlSqlParser(tableInfo); + return mysqlSqlParser.createInsertSql(); + } + + @Override + public String insertAllSql(SimpleProviderContext simpleProviderContext) throws IllegalAccessException, InvocationTargetException { + List list = (List) simpleProviderContext.getParameter(Map.class).get("list"); + if (list == null || list.size() == 0) { + throw new RuntimeException("not data."); + } + MysqlSqlParser mysqlSqlParser = new MysqlSqlParser(simpleProviderContext.nullTableInfo()); + return mysqlSqlParser.createInsertAllSql(list); + } + + @Override + public String deleteSql(SimpleProviderContext simpleProviderContext)throws IllegalAccessException, InvocationTargetException { + MysqlSqlParser mysqlSqlParser = new MysqlSqlParser(simpleProviderContext.nullTableInfo()); + return mysqlSqlParser.createDeleteSql(); + } + + @Override + public String deleteByIdSql(SimpleProviderContext simpleProviderContext) throws IllegalAccessException, InvocationTargetException { + MysqlSqlParser mysqlSqlParser = new MysqlSqlParser(simpleProviderContext.nullTableInfo()); + return mysqlSqlParser.createDeleteSql(); + } + + + @Override + public String deleteAllByIdSql(SimpleProviderContext simpleProviderContext) throws IllegalAccessException, InvocationTargetException { + MysqlSqlParser mysqlSqlParser = new MysqlSqlParser(simpleProviderContext.nullTableInfo()); + return mysqlSqlParser.createDeleteAllByIdSql(); + } + + @Override + public String deleteAllSql(SimpleProviderContext simpleProviderContext) throws IllegalAccessException, InvocationTargetException { + MysqlSqlParser mysqlSqlParser = new MysqlSqlParser(simpleProviderContext.nullTableInfo()); + return mysqlSqlParser.createDeleteAllSql(); + } + + @Override + public String updateSql(SimpleProviderContext simpleProviderContext) throws IllegalAccessException, InvocationTargetException { + MysqlSqlParser mysqlSqlParser = new MysqlSqlParser(simpleProviderContext.tableInfo()); + return mysqlSqlParser.createUpdateSql(); + } +} diff --git a/src/main/java/com/codingapi/simplemybatis/provider/mysql/MysqlQuerySQLBuilder.java b/src/main/java/com/codingapi/simplemybatis/provider/mysql/MysqlQuerySQLBuilder.java new file mode 100644 index 0000000..afeca67 --- /dev/null +++ b/src/main/java/com/codingapi/simplemybatis/provider/mysql/MysqlQuerySQLBuilder.java @@ -0,0 +1,34 @@ +package com.codingapi.simplemybatis.provider.mysql; + +import com.codingapi.simplemybatis.provider.QuerySQLBuilder; +import com.codingapi.simplemybatis.provider.SimpleProviderContext; + +import java.lang.reflect.InvocationTargetException; + +/** + * @author lorne + * @since 1.0.0 + */ +public class MysqlQuerySQLBuilder implements QuerySQLBuilder { + + @Override + public String getById(SimpleProviderContext simpleProviderContext) throws IllegalAccessException, InvocationTargetException { + MysqlSqlParser mysqlSqlParser = new MysqlSqlParser(simpleProviderContext.nullTableInfo()); + return mysqlSqlParser.createGetByIdSql(); + } + + @Override + public String findAll(SimpleProviderContext simpleProviderContext) throws IllegalAccessException, InvocationTargetException { + return null; + } + + @Override + public String query(SimpleProviderContext simpleProviderContext) throws IllegalAccessException, InvocationTargetException { + return null; + } + + @Override + public String queryView(SimpleProviderContext simpleProviderContext) throws IllegalAccessException, InvocationTargetException { + return null; + } +} diff --git a/src/main/java/com/codingapi/simplemybatis/provider/mysql/MysqlSqlBuilder.java b/src/main/java/com/codingapi/simplemybatis/provider/mysql/MysqlSqlBuilder.java new file mode 100644 index 0000000..f0e0de4 --- /dev/null +++ b/src/main/java/com/codingapi/simplemybatis/provider/mysql/MysqlSqlBuilder.java @@ -0,0 +1,15 @@ +package com.codingapi.simplemybatis.provider.mysql; + +import com.codingapi.simplemybatis.provider.SimpleMybatisProviderContext; + +/** + * @author lorne + * @since 1.0.0 + */ +public class MysqlSqlBuilder { + + static { + SimpleMybatisProviderContext.getInstance().registerSQLBuilder(new MysqlCommandSQLBuilder()); + SimpleMybatisProviderContext.getInstance().registerSQLBuilder(new MysqlQuerySQLBuilder()); + } +} diff --git a/src/main/java/com/codingapi/simplemybatis/parser/SqlParser.java b/src/main/java/com/codingapi/simplemybatis/provider/mysql/MysqlSqlParser.java similarity index 96% rename from src/main/java/com/codingapi/simplemybatis/parser/SqlParser.java rename to src/main/java/com/codingapi/simplemybatis/provider/mysql/MysqlSqlParser.java index f1c7a99..04acc29 100644 --- a/src/main/java/com/codingapi/simplemybatis/parser/SqlParser.java +++ b/src/main/java/com/codingapi/simplemybatis/provider/mysql/MysqlSqlParser.java @@ -1,16 +1,17 @@ -package com.codingapi.simplemybatis.parser; +package com.codingapi.simplemybatis.provider.mysql; +import com.codingapi.simplemybatis.parser.TableInfo; import com.codingapi.simplemybatis.query.Query; import com.codingapi.simplemybatis.query.SqlBuilder; import java.lang.reflect.InvocationTargetException; import java.util.List; -public class SqlParser { +public class MysqlSqlParser { private TableInfo tableInfo; - public SqlParser(TableInfo tableInfo) { + public MysqlSqlParser(TableInfo tableInfo) { this.tableInfo = tableInfo; } @@ -57,17 +58,6 @@ public String createUpdateSql() { return stringBuilder.toString(); } - public String createDeleteSql() { - StringBuilder stringBuilder = new StringBuilder(); - stringBuilder.append("delete from "); - stringBuilder.append(tableInfo.getTableName()); - stringBuilder.append(" where "); - stringBuilder.append(tableInfo.getIdColumnFiled().getColumnName()); - stringBuilder.append("="); - stringBuilder.append("#{").append(tableInfo.getIdColumnFiled().getFieldName()).append("}"); - return stringBuilder.toString(); - } - public String createInsertAllSql(List list) throws InvocationTargetException, IllegalAccessException { @@ -90,6 +80,17 @@ public String createInsertAllSql(List list) return stringBuilder.toString(); } + public String createDeleteSql() { + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.append("delete from "); + stringBuilder.append(tableInfo.getTableName()); + stringBuilder.append(" where "); + stringBuilder.append(tableInfo.getIdColumnFiled().getColumnName()); + stringBuilder.append("="); + stringBuilder.append("#{").append(tableInfo.getIdColumnFiled().getFieldName()).append("}"); + return stringBuilder.toString(); + } + public String createDeleteAllSql() { StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append("