Skip to content

Commit 199ba72

Browse files
committed
@Entity.Table 注解增加 catalog 和 schema 属性。
1 parent 6e46c24 commit 199ba72

File tree

10 files changed

+52
-18
lines changed

10 files changed

+52
-18
lines changed

src/main/java/io/mybatis/provider/Entity.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,16 @@
5555
*/
5656
String remark() default "";
5757

58+
/**
59+
* catalog 名称,配置后,会在表名前面加上 catalog 名称,规则为:catalog.schema.tableName,支持全局 mybatis.provider.catalog 配置
60+
*/
61+
String catalog() default "";
62+
63+
/**
64+
* schema 名称,配置后,会在表名前面加上 schema 名称,规则为:catalog.schema.tableName,支持全局 mybatis.provider.schema 配置
65+
*/
66+
String schema() default "";
67+
5868
/**
5969
* 名称规则、样式,同时应用于表名和列名,不想用于表名时,直接指定表名 {@link #value()}即可。
6070
* <p>

src/main/java/io/mybatis/provider/EntityTable.java

Lines changed: 27 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
import java.util.regex.Matcher;
4040
import java.util.regex.Pattern;
4141
import java.util.stream.Collectors;
42+
import java.util.stream.Stream;
4243

4344
/**
4445
* 实体表接口,记录实体和表的关系
@@ -55,6 +56,18 @@ public class EntityTable extends EntityProps<EntityTable> {
5556
@Getter
5657
@Setter
5758
protected String table;
59+
/**
60+
* catalog 名称,配置后,会在表名前面加上 catalog 名称,规则为:catalog.schema.tableName,支持全局 mybatis.provider.catalog 配置
61+
*/
62+
@Getter
63+
@Setter
64+
protected String catalog;
65+
/**
66+
* schema 名称,配置后,会在表名前面加上 schema 名称,规则为:catalog.schema.tableName,支持全局 mybatis.provider.schema 配置
67+
*/
68+
@Getter
69+
@Setter
70+
protected String schema;
5871
/**
5972
* 实体类和字段转表名和字段名方式
6073
*/
@@ -77,45 +90,45 @@ public class EntityTable extends EntityProps<EntityTable> {
7790
*/
7891
@Getter
7992
@Setter
80-
protected boolean ready;
93+
protected boolean ready;
8194
/**
8295
* 使用指定的 &lt;resultMap&gt;
8396
*/
8497
@Getter
8598
@Setter
86-
protected String resultMap;
99+
protected String resultMap;
87100
/**
88101
* 自动根据字段生成 &lt;resultMap&gt;
89102
*/
90103
@Getter
91104
@Setter
92-
protected boolean autoResultMap;
105+
protected boolean autoResultMap;
93106
/**
94107
* 已初始化自动ResultMap
95108
*/
96-
protected List<ResultMap> resultMaps;
109+
protected List<ResultMap> resultMaps;
97110
/**
98111
* 排除指定父类的所有字段
99112
*/
100113
@Getter
101114
@Setter
102-
protected Class<?>[] excludeSuperClasses;
115+
protected Class<?>[] excludeSuperClasses;
103116
/**
104117
* 排除指定类型的字段
105118
*/
106119
@Getter
107120
@Setter
108-
protected Class<?>[] excludeFieldTypes;
121+
protected Class<?>[] excludeFieldTypes;
109122
/**
110123
* 排除指定字段名的字段
111124
*/
112125
@Getter
113126
@Setter
114-
protected String[] excludeFields;
127+
protected String[] excludeFields;
115128
/**
116129
* 已经初始化的配置
117130
*/
118-
protected Set<Configuration> initConfiguration = new HashSet<>();
131+
protected Set<Configuration> initConfiguration = new HashSet<>();
119132
//<editor-fold desc="基础方法,必须实现的方法">
120133

121134
protected EntityTable(Class<?> entityClass) {
@@ -130,7 +143,9 @@ public static EntityTable of(Class<?> entityClass) {
130143
* 获取 SQL 语句中使用的表名
131144
*/
132145
public String tableName() {
133-
return table();
146+
return Stream.of(catalog(), schema(), table())
147+
.filter(s -> s != null && !s.isEmpty())
148+
.collect(Collectors.joining("."));
134149
}
135150

136151
/**
@@ -564,16 +579,16 @@ public boolean equals(Object o) {
564579
if (this == o) return true;
565580
if (!(o instanceof EntityTable)) return false;
566581
EntityTable entity = (EntityTable) o;
567-
return table().equals(entity.table());
582+
return tableName().equals(entity.tableName());
568583
}
569584

570585
@Override
571586
public int hashCode() {
572-
return Objects.hash(table());
587+
return Objects.hash(tableName());
573588
}
574589

575590
@Override
576591
public String toString() {
577-
return table();
592+
return tableName();
578593
}
579594
}

src/main/java/io/mybatis/provider/defaults/DefaultEntityTableFactory.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
package io.mybatis.provider.defaults;
1818

19+
import io.mybatis.config.ConfigHelper;
1920
import io.mybatis.provider.Entity;
2021
import io.mybatis.provider.EntityTable;
2122
import io.mybatis.provider.EntityTableFactory;
@@ -34,6 +35,8 @@ public EntityTable createEntityTable(Class<?> entityClass, Chain chain) {
3435
Entity.Table table = entityClass.getAnnotation(Entity.Table.class);
3536
EntityTable entityTable = EntityTable.of(entityClass)
3637
.table(table.value().isEmpty() ? Style.getStyle(table.style()).tableName(entityClass) : table.value())
38+
.catalog(table.catalog().isEmpty() ? ConfigHelper.getStr("mybatis.provider.catalog") : table.catalog())
39+
.schema(table.schema().isEmpty() ? ConfigHelper.getStr("mybatis.provider.schema") : table.schema())
3740
.style(table.style())
3841
.resultMap(table.resultMap())
3942
.autoResultMap(table.autoResultMap())

src/test/java/io/mybatis/provider/EntityInfoMapperTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public void test() {
2828
Assert.assertEquals(User.class, userMapper.entityClass());
2929

3030
EntityTable entityTable = userMapper.entityTable();
31-
Assert.assertEquals("sys_user", entityTable.table());
31+
Assert.assertEquals("public.sys_user", entityTable.tableName());
3232
}
3333

3434
interface UserMapper extends EntityInfoMapper<User> {

src/test/java/io/mybatis/provider/mapper/BaseProvider.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,19 +28,19 @@ public class BaseProvider {
2828

2929
public static String getById(ProviderContext providerContext) {
3030
return SqlScript.caching(providerContext, entity ->
31-
"SELECT " + entity.baseColumnAsPropertyList() + " FROM " + entity.table() +
31+
"SELECT " + entity.baseColumnAsPropertyList() + " FROM " + entity.tableName() +
3232
" WHERE " + entity.idColumns().stream().map(EntityColumn::columnEqualsProperty).collect(Collectors.joining(" AND ")));
3333
}
3434

3535
public static String deleteById(ProviderContext providerContext) {
3636
return SqlScript.caching(providerContext, entity ->
37-
"DELETE FROM " + entity.table() +
37+
"DELETE FROM " + entity.tableName() +
3838
" WHERE " + entity.idColumns().stream().map(EntityColumn::columnEqualsProperty).collect(Collectors.joining(" AND ")));
3939
}
4040

4141
public static String insertSelective(ProviderContext providerContext) {
4242
return SqlScript.caching(providerContext, (entity, util) ->
43-
"INSERT INTO " + entity.table()
43+
"INSERT INTO " + entity.tableName()
4444
+ util.trimSuffixOverrides("(", ")", ",", () ->
4545
entity.insertColumns().stream().map(column ->
4646
util.ifTest(column.notNullTest(), () -> column.column() + ",")

src/test/java/io/mybatis/provider/model/UserExclude.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
import io.mybatis.provider.Entity;
2020

2121
@Entity.Table(value = "user",
22+
catalog = "catalog",
23+
schema = "schema",
2224
excludeSuperClasses = Role.class,
2325
excludeFieldTypes = User1.class,
2426
excludeFields = "age")

src/test/java/io/mybatis/provider/test/UserExcludeTest.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,9 @@ public void testEntityTable() {
4141
Assert.assertEquals(2, entityTable.whereColumns().size());
4242

4343
Assert.assertEquals("user", entityTable.table());
44+
Assert.assertEquals("catalog", entityTable.catalog());
45+
Assert.assertEquals("schema", entityTable.schema());
46+
Assert.assertEquals("catalog.schema.user", entityTable.tableName());
4447
Assert.assertEquals("ID,name", entityTable.baseColumnList());
4548
Assert.assertEquals("ID AS id,name AS username", entityTable.baseColumnAsPropertyList());
4649

src/test/java/io/mybatis/provider/test/UserMapperTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ public void testEntityTable() {
4444
Assert.assertEquals(4, entityTable.updateColumns().size());
4545
Assert.assertEquals(4, entityTable.whereColumns().size());
4646

47-
Assert.assertEquals("user", entityTable.table());
47+
Assert.assertEquals("public.user", entityTable.tableName());
4848
Assert.assertEquals("ID,name,SEX,ADDRESS", entityTable.baseColumnList());
4949
Assert.assertEquals("ID,name,SEX,ADDRESS", entityTable.baseColumnAsPropertyList());
5050
//Entity.Table(value = "user", autoResultMap = true)

src/test/java/io/mybatis/provider/test/UserMoreTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ public void testEntityTable() {
4545
Assert.assertEquals(6, entityTable.updateColumns().size());
4646
Assert.assertEquals(8, entityTable.whereColumns().size());
4747

48-
Assert.assertEquals("sys_user", entityTable.table());
48+
Assert.assertEquals("public.sys_user", entityTable.tableName());
4949
Assert.assertEquals("id,name,is_admin,seq,points,when_created,info", entityTable.baseColumnList());
5050
Assert.assertEquals("id,name,is_admin,seq,points,when_created,info", entityTable.baseColumnAsPropertyList());
5151
Assert.assertEquals("seq DESC,name ASC", entityTable.orderByColumnList().get());

src/test/resources/mybatis-provider.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,3 +18,4 @@ [email protected]
1818
mybatis.provider.style=upper_underscore
1919
mybatis.provider.cacheSql.initSize=16
2020
mybatis.provider.cacheSql.useOnce=true
21+
mybatis.provider.schema=public

0 commit comments

Comments
 (0)