diff --git a/.travis.yml b/.travis.yml index 17ed049..f688b51 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,6 +5,7 @@ jdk: openjdk8 branches: only: - master + - dev before_install: - pip install --user codecov @@ -17,4 +18,4 @@ after_success: env: global: - - CODECOV_TOKEN=5ee0f56b-7d1e-4e5c-870a-f6c128fa62eb \ No newline at end of file + - CODECOV_TOKEN=5ee0f56b-7d1e-4e5c-870a-f6c128fa62eb 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/AutoGeneratorMapper.java b/src/main/java/com/codingapi/simplemybatis/mapper/AutoGeneratorMapper.java new file mode 100644 index 0000000..d0200df --- /dev/null +++ b/src/main/java/com/codingapi/simplemybatis/mapper/AutoGeneratorMapper.java @@ -0,0 +1,18 @@ +package com.codingapi.simplemybatis.mapper; + +import com.codingapi.simplemybatis.provider.AutoGeneratorProvider; +import org.apache.ibatis.annotations.UpdateProvider; + +/** + * @author lorne + * @since 1.0.0 + */ +public interface AutoGeneratorMapper extends BaseMapper{ + + @UpdateProvider(type = AutoGeneratorProvider.class, method = "create") + void create(); + + @UpdateProvider(type = AutoGeneratorProvider.class, method = "drop") + void drop(); + +} diff --git a/src/main/java/com/codingapi/simplemybatis/parser/FieldTypeConvertorContext.java b/src/main/java/com/codingapi/simplemybatis/parser/FieldTypeConvertorContext.java new file mode 100644 index 0000000..814fcd4 --- /dev/null +++ b/src/main/java/com/codingapi/simplemybatis/parser/FieldTypeConvertorContext.java @@ -0,0 +1,54 @@ +package com.codingapi.simplemybatis.parser; + + +import java.util.HashMap; +import java.util.Map; + +/** + * @author lorne + * @since 1.0.0 + */ +public class FieldTypeConvertorContext { + + private static FieldTypeConvertorContext context; + + public static FieldTypeConvertorContext getInstance(){ + if(context==null){ + synchronized (FieldTypeConvertorContext.class){ + context = new FieldTypeConvertorContext(); + } + } + return context; + } + + private final Map,String> convertors; + + private FieldTypeConvertorContext(){ + this.convertors = new HashMap<>(); + this.init(); + } + + private void init(){ + addConvertor(String.class,"varchar(%d)"); + addConvertor(Integer.class,"int(%d)"); + addConvertor(int.class,"int(%d)"); + addConvertor(long.class,"int(%d)"); + addConvertor(Long.class,"int(%d)"); + addConvertor(boolean.class,"int(1)"); + addConvertor(Boolean.class,"int(1)"); + } + + public void addConvertor(Class key,String value){ + convertors.put(key, value); + } + + + public String convertor(Class type,int length){ + String format = convertors.get(type); + if(format==null){ + throw new RuntimeException("cont find convertor match type:"+type); + } + return String.format(format,length); + } + +} 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/parser/TableParser.java b/src/main/java/com/codingapi/simplemybatis/parser/TableParser.java index a76b6cf..9e43949 100644 --- a/src/main/java/com/codingapi/simplemybatis/parser/TableParser.java +++ b/src/main/java/com/codingapi/simplemybatis/parser/TableParser.java @@ -59,20 +59,34 @@ private void loadColumnNames(Object obj) throws IllegalAccessException, Invocati if (transientField != null) { continue; } + Column column = field.getAnnotation(Column.class); + String columnName = getColumnName(column, field); + String columnDefinition = getColumnDefinition(column,field); + if (idColumn == null) { Id id = field.getAnnotation(Id.class); if (id != null) { - String idColumnName = getColumnName(field.getAnnotation(Column.class), field); Object idValue = getFieldValue(method, obj); String fieldName = field.getName(); - idColumn = new ColumnFiled(fieldName, idColumnName, idValue, method); + idColumn = new ColumnFiled(fieldName, columnName,columnDefinition, idValue, method); continue; } } - Column column = field.getAnnotation(Column.class); - String columnName = getColumnName(column, field); + Object value = getFieldValue(method, obj); - columns.add(new ColumnFiled(field.getName(), columnName, value, method)); + columns.add(new ColumnFiled(field.getName(), columnName,columnDefinition, value, method)); + } + } + + private String getColumnDefinition(Column column, Field field) { + if (column == null) { + return FieldTypeConvertorContext.getInstance().convertor(field.getType(),255); + } else { + String columnDefinition = column.columnDefinition(); + if(StringUtils.isEmpty(columnDefinition)){ + return FieldTypeConvertorContext.getInstance().convertor(field.getType(),column.length()); + } + return columnDefinition; } } @@ -144,47 +158,39 @@ private String getColumnStyleName(String name) { public static class ColumnFiled { private String fieldName; private String columnName; + private String columnDefinition; private Object value; private Method method; - public ColumnFiled(String fieldName, String columnName, Object value, Method method) { + public ColumnFiled(String fieldName, String columnName,String columnDefinition, Object value, Method method) { this.fieldName = fieldName; this.columnName = columnName; + this.columnDefinition = columnDefinition; this.value = value; this.method = method; } + public String getColumnDefinition() { + return columnDefinition; + } + public String getFieldName() { return fieldName; } - public void setFieldName(String fieldName) { - this.fieldName = fieldName; - } public String getColumnName() { return columnName; } - public void setColumnName(String columnName) { - this.columnName = columnName; - } - public Object getValue() { return value; } - public void setValue(Object value) { - this.value = value; - } - public Method getMethod() { return method; } - public void setMethod(Method method) { - this.method = method; - } } diff --git a/src/main/java/com/codingapi/simplemybatis/provider/AutoGeneratorProvider.java b/src/main/java/com/codingapi/simplemybatis/provider/AutoGeneratorProvider.java new file mode 100644 index 0000000..06b0324 --- /dev/null +++ b/src/main/java/com/codingapi/simplemybatis/provider/AutoGeneratorProvider.java @@ -0,0 +1,20 @@ +package com.codingapi.simplemybatis.provider; + +import java.lang.reflect.InvocationTargetException; + +/** + * @author lorne + * @since 1.0.0 + */ +public class AutoGeneratorProvider { + + public String create(org.apache.ibatis.builder.annotation.ProviderContext context) throws IllegalAccessException, InvocationTargetException { + SimpleProviderContext simpleProviderContext = new SimpleProviderContext(context,null); + return SimpleMybatisProviderContext.getInstance().getBuilder(AutoGeneratorSQLBuilder.class).create(simpleProviderContext); + } + + public String drop(org.apache.ibatis.builder.annotation.ProviderContext context) throws IllegalAccessException, InvocationTargetException { + SimpleProviderContext simpleProviderContext = new SimpleProviderContext(context,null); + return SimpleMybatisProviderContext.getInstance().getBuilder(AutoGeneratorSQLBuilder.class).drop(simpleProviderContext); + } +} diff --git a/src/main/java/com/codingapi/simplemybatis/provider/AutoGeneratorSQLBuilder.java b/src/main/java/com/codingapi/simplemybatis/provider/AutoGeneratorSQLBuilder.java new file mode 100644 index 0000000..5d0247f --- /dev/null +++ b/src/main/java/com/codingapi/simplemybatis/provider/AutoGeneratorSQLBuilder.java @@ -0,0 +1,15 @@ +package com.codingapi.simplemybatis.provider; + +import java.lang.reflect.InvocationTargetException; + +/** + * @author lorne + * @since 1.0.0 + */ +public interface AutoGeneratorSQLBuilder extends SimpleMybatisSQLBuilder{ + + String create(SimpleProviderContext simpleProviderContext) throws IllegalAccessException, InvocationTargetException ; + + String drop(SimpleProviderContext simpleProviderContext) throws IllegalAccessException, InvocationTargetException ; + +} 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..6a240ea 100644 --- a/src/main/java/com/codingapi/simplemybatis/provider/QueryProvider.java +++ b/src/main/java/com/codingapi/simplemybatis/provider/QueryProvider.java @@ -1,36 +1,33 @@ package com.codingapi.simplemybatis.provider; -import com.codingapi.simplemybatis.parser.SqlParser; 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); + return SimpleMybatisProviderContext.getInstance().getBuilder(QuerySQLBuilder.class).findAll(simpleProviderContext); } - 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); + return SimpleMybatisProviderContext.getInstance().getBuilder(QuerySQLBuilder.class).query(simpleProviderContext); } - public String queryView(@Param("query") Query query, ProviderContext context) throws IllegalAccessException, InvocationTargetException { - SqlBuilder sqlBuilder = new SqlBuilder(query.getSelect(), null, query); - return sqlBuilder.getSql(); + public String queryView(@Param("query") Query query, org.apache.ibatis.builder.annotation.ProviderContext context) throws IllegalAccessException, InvocationTargetException { + SimpleProviderContext simpleProviderContext = new SimpleProviderContext(context,query); + return SimpleMybatisProviderContext.getInstance().getBuilder(QuerySQLBuilder.class).queryView(simpleProviderContext); } 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/builder/BasicAutoGeneratorSQLBuilder.java b/src/main/java/com/codingapi/simplemybatis/provider/builder/BasicAutoGeneratorSQLBuilder.java new file mode 100644 index 0000000..d988426 --- /dev/null +++ b/src/main/java/com/codingapi/simplemybatis/provider/builder/BasicAutoGeneratorSQLBuilder.java @@ -0,0 +1,28 @@ +package com.codingapi.simplemybatis.provider.builder; + +import com.codingapi.simplemybatis.parser.TableInfo; +import com.codingapi.simplemybatis.provider.AutoGeneratorSQLBuilder; +import com.codingapi.simplemybatis.provider.SimpleProviderContext; + +import java.lang.reflect.InvocationTargetException; + +/** + * @author lorne + * @since 1.0.0 + */ +public class BasicAutoGeneratorSQLBuilder implements AutoGeneratorSQLBuilder { + + @Override + public String create(SimpleProviderContext simpleProviderContext) throws IllegalAccessException, InvocationTargetException { + TableInfo tableInfo = simpleProviderContext.nullTableInfo(); + BasicTableBuilder builder = new BasicTableBuilder(tableInfo); + builder.builder(); + return builder.sql(); + } + + @Override + public String drop(SimpleProviderContext simpleProviderContext) throws IllegalAccessException, InvocationTargetException { + TableInfo tableInfo = simpleProviderContext.nullTableInfo(); + return "drop table "+tableInfo.getTableName(); + } +} diff --git a/src/main/java/com/codingapi/simplemybatis/provider/builder/BasicCommandSQLBuilder.java b/src/main/java/com/codingapi/simplemybatis/provider/builder/BasicCommandSQLBuilder.java new file mode 100644 index 0000000..6ce7698 --- /dev/null +++ b/src/main/java/com/codingapi/simplemybatis/provider/builder/BasicCommandSQLBuilder.java @@ -0,0 +1,65 @@ +package com.codingapi.simplemybatis.provider.builder; + +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 BasicCommandSQLBuilder implements CommandSQLBuilder { + + + @Override + public String insertSql(SimpleProviderContext context) throws IllegalAccessException, InvocationTargetException { + TableInfo tableInfo = context.tableInfo(); + BasicSqlParser basicSqlParser = new BasicSqlParser(tableInfo); + return basicSqlParser.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."); + } + BasicSqlParser basicSqlParser = new BasicSqlParser(simpleProviderContext.nullTableInfo()); + return basicSqlParser.createInsertAllSql(list); + } + + @Override + public String deleteSql(SimpleProviderContext simpleProviderContext)throws IllegalAccessException, InvocationTargetException { + BasicSqlParser basicSqlParser = new BasicSqlParser(simpleProviderContext.nullTableInfo()); + return basicSqlParser.createDeleteSql(); + } + + @Override + public String deleteByIdSql(SimpleProviderContext simpleProviderContext) throws IllegalAccessException, InvocationTargetException { + BasicSqlParser basicSqlParser = new BasicSqlParser(simpleProviderContext.nullTableInfo()); + return basicSqlParser.createDeleteSql(); + } + + + @Override + public String deleteAllByIdSql(SimpleProviderContext simpleProviderContext) throws IllegalAccessException, InvocationTargetException { + BasicSqlParser basicSqlParser = new BasicSqlParser(simpleProviderContext.nullTableInfo()); + return basicSqlParser.createDeleteAllByIdSql(); + } + + @Override + public String deleteAllSql(SimpleProviderContext simpleProviderContext) throws IllegalAccessException, InvocationTargetException { + BasicSqlParser basicSqlParser = new BasicSqlParser(simpleProviderContext.nullTableInfo()); + return basicSqlParser.createDeleteAllSql(); + } + + @Override + public String updateSql(SimpleProviderContext simpleProviderContext) throws IllegalAccessException, InvocationTargetException { + BasicSqlParser basicSqlParser = new BasicSqlParser(simpleProviderContext.tableInfo()); + return basicSqlParser.createUpdateSql(); + } +} diff --git a/src/main/java/com/codingapi/simplemybatis/provider/builder/BasicQuerySQLBuilder.java b/src/main/java/com/codingapi/simplemybatis/provider/builder/BasicQuerySQLBuilder.java new file mode 100644 index 0000000..7a88f54 --- /dev/null +++ b/src/main/java/com/codingapi/simplemybatis/provider/builder/BasicQuerySQLBuilder.java @@ -0,0 +1,41 @@ +package com.codingapi.simplemybatis.provider.builder; + +import com.codingapi.simplemybatis.provider.QuerySQLBuilder; +import com.codingapi.simplemybatis.provider.SimpleProviderContext; +import com.codingapi.simplemybatis.query.Query; +import com.codingapi.simplemybatis.query.SqlBuilder; + +import java.lang.reflect.InvocationTargetException; + +/** + * @author lorne + * @since 1.0.0 + */ +public class BasicQuerySQLBuilder implements QuerySQLBuilder { + + @Override + public String getById(SimpleProviderContext simpleProviderContext) throws IllegalAccessException, InvocationTargetException { + BasicSqlParser basicSqlParser = new BasicSqlParser(simpleProviderContext.nullTableInfo()); + return basicSqlParser.createGetByIdSql(); + } + + @Override + public String findAll(SimpleProviderContext simpleProviderContext) throws IllegalAccessException, InvocationTargetException { + BasicSqlParser basicSqlParser = new BasicSqlParser(simpleProviderContext.nullTableInfo()); + return basicSqlParser.createSelectAll(); + } + + @Override + public String query(SimpleProviderContext simpleProviderContext) throws IllegalAccessException, InvocationTargetException { + BasicSqlParser basicSqlParser = new BasicSqlParser(simpleProviderContext.nullTableInfo()); + Query query = simpleProviderContext.getParameter(Query.class); + return basicSqlParser.createQuery(query); + } + + @Override + public String queryView(SimpleProviderContext simpleProviderContext) throws IllegalAccessException, InvocationTargetException { + Query query = simpleProviderContext.getParameter(Query.class); + SqlBuilder sqlBuilder = new SqlBuilder(query.getSelect(), null, query); + return sqlBuilder.getSql(); + } +} diff --git a/src/main/java/com/codingapi/simplemybatis/provider/builder/BasicSqlBuilder.java b/src/main/java/com/codingapi/simplemybatis/provider/builder/BasicSqlBuilder.java new file mode 100644 index 0000000..3ea8a70 --- /dev/null +++ b/src/main/java/com/codingapi/simplemybatis/provider/builder/BasicSqlBuilder.java @@ -0,0 +1,16 @@ +package com.codingapi.simplemybatis.provider.builder; + +import com.codingapi.simplemybatis.provider.SimpleMybatisProviderContext; + +/** + * @author lorne + * @since 1.0.0 + */ +public class BasicSqlBuilder { + + static { + SimpleMybatisProviderContext.getInstance().registerSQLBuilder(new BasicCommandSQLBuilder()); + SimpleMybatisProviderContext.getInstance().registerSQLBuilder(new BasicQuerySQLBuilder()); + SimpleMybatisProviderContext.getInstance().registerSQLBuilder(new BasicAutoGeneratorSQLBuilder()); + } +} diff --git a/src/main/java/com/codingapi/simplemybatis/parser/SqlParser.java b/src/main/java/com/codingapi/simplemybatis/provider/builder/BasicSqlParser.java similarity index 96% rename from src/main/java/com/codingapi/simplemybatis/parser/SqlParser.java rename to src/main/java/com/codingapi/simplemybatis/provider/builder/BasicSqlParser.java index f1c7a99..7f243ce 100644 --- a/src/main/java/com/codingapi/simplemybatis/parser/SqlParser.java +++ b/src/main/java/com/codingapi/simplemybatis/provider/builder/BasicSqlParser.java @@ -1,16 +1,17 @@ -package com.codingapi.simplemybatis.parser; +package com.codingapi.simplemybatis.provider.builder; +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 BasicSqlParser { private TableInfo tableInfo; - public SqlParser(TableInfo tableInfo) { + public BasicSqlParser(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("