diff --git a/mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/sql/SqlUtils.java b/mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/sql/SqlUtils.java index 591c52f2c..521b5ad7c 100644 --- a/mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/sql/SqlUtils.java +++ b/mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/sql/SqlUtils.java @@ -90,6 +90,7 @@ public abstract class SqlUtils implements Constants { return sql; } + @SuppressWarnings("all") public static String getSelectBody(String tableName, String alisa, String asAlisa, String escapeSymbol) { TableInfo tableInfo = TableInfoHelper.getTableInfo(tableName); Assert.notNull(tableInfo, "can not find TableInfo Cache by \"%s\"", tableName); @@ -108,14 +109,17 @@ public abstract class SqlUtils implements Constants { final String sa = alisa.concat(DOT); if (asA) { int as = body.indexOf(AS); + String column; + String property; if (as < 0) { - sb.append(sa).append(body).append(AS).append(escapeColumn(asAlisa.concat(DOT).concat(body), escapeSymbol)); + column = body; + property = StringUtils.getTargetColumn(body); } else { - String column = body.substring(0, as); - String property = body.substring(as + 4); + column = body.substring(0, as); + property = body.substring(as + 4); property = StringUtils.getTargetColumn(property); - sb.append(sa).append(column).append(AS).append(escapeColumn(asAlisa.concat(DOT).concat(property), escapeSymbol)); } + sb.append(sa).append(column).append(AS).append(escapeColumn(asAlisa.concat(DOT).concat(property), escapeSymbol)); } else { sb.append(sa).append(body); } diff --git a/mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/replaceplaceholder/Entity.java b/mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/replaceplaceholder/Entity.java index 06e5f336a..d4f4e2e4b 100644 --- a/mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/replaceplaceholder/Entity.java +++ b/mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/replaceplaceholder/Entity.java @@ -1,5 +1,6 @@ package com.baomidou.mybatisplus.test.replaceplaceholder; +import com.baomidou.mybatisplus.annotation.TableField; import lombok.Data; import java.io.Serializable; @@ -14,5 +15,15 @@ public class Entity implements Serializable { private Long id; + @TableField("`name`") private String name; + + @TableField(exist = false) + private EntitySub es; + + @Data + public static class EntitySub { + private Long id; + private String name; + } } diff --git a/mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/replaceplaceholder/EntityMapper.java b/mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/replaceplaceholder/EntityMapper.java index d724b1749..53bae166c 100644 --- a/mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/replaceplaceholder/EntityMapper.java +++ b/mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/replaceplaceholder/EntityMapper.java @@ -14,6 +14,6 @@ public interface EntityMapper extends BaseMapper { @Select("select {@entity} from entity") List selectAll(); - @Select("select {@entity:e} from entity e") + @Select("select {@entity:e:es} from entity e") List selectAll2(); } diff --git a/mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/replaceplaceholder/EntitySubMapper.java b/mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/replaceplaceholder/EntitySubMapper.java new file mode 100644 index 000000000..037d643c1 --- /dev/null +++ b/mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/replaceplaceholder/EntitySubMapper.java @@ -0,0 +1,19 @@ +package com.baomidou.mybatisplus.test.replaceplaceholder; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Select; + +import java.util.List; + +/** + * @author miemie + * @since 2020-06-23 + */ +public interface EntitySubMapper extends BaseMapper { + + @Select("select {@entity} from entity") + List selectAll(); + + @Select("select {@entity:e} from entity e") + List selectAll2(); +} diff --git a/mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/replaceplaceholder/ReplacePlaceholderTest.java b/mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/replaceplaceholder/ReplacePlaceholderTest.java index e0b3e2d53..6b83e5db7 100644 --- a/mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/replaceplaceholder/ReplacePlaceholderTest.java +++ b/mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/replaceplaceholder/ReplacePlaceholderTest.java @@ -10,6 +10,8 @@ import java.util.Arrays; import java.util.Collections; import java.util.List; +import static org.assertj.core.api.Assertions.assertThat; + /** * @author miemie * @since 2020-06-23 @@ -19,15 +21,17 @@ public class ReplacePlaceholderTest extends BaseDbTest { @Test void replace() { doTest(i -> { - i.selectAll(); - i.selectAll2(); + System.out.println(i.selectAll()); + List list = i.selectAll2(); + System.out.println(list); + assertThat(list.getFirst().getEs().getName()).isNotBlank(); }); } @Override protected List interceptors() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); - interceptor.addInnerInterceptor(new ReplacePlaceholderInnerInterceptor()); + interceptor.addInnerInterceptor(new ReplacePlaceholderInnerInterceptor("\"")); return Collections.singletonList(interceptor); } @@ -41,14 +45,25 @@ public class ReplacePlaceholderTest extends BaseDbTest { @Override protected String tableDataSql() { - return "insert into entity(id,name) values(1,'1'),(2,'2');"; + return "insert into entity(id,name) values(1,'1'),(2,'2');" + + "insert into entity_sub(id,name) values(1,'1'),(2,'2');"; } @Override protected List tableSql() { - return Arrays.asList("drop table if exists entity", "CREATE TABLE IF NOT EXISTS entity (" + + return Arrays.asList("drop table if exists entity","drop table if exists entity_sub", + "CREATE TABLE IF NOT EXISTS entity (" + "id BIGINT NOT NULL," + "name VARCHAR(30) NULL DEFAULT NULL," + - "PRIMARY KEY (id))"); + "PRIMARY KEY (id))", + "CREATE TABLE IF NOT EXISTS entity_sub (" + + "id BIGINT NOT NULL," + + "name VARCHAR(30) NULL DEFAULT NULL," + + "PRIMARY KEY (id))"); + } + + @Override + protected List> otherMapper() { + return List.of(EntitySubMapper.class); } }