Conflicts:
	mybatis-flex-core/src/main/java/com/mybatisflex/core/table/TableInfoFactory.java
This commit is contained in:
开源海哥 2023-08-10 12:33:37 +08:00
commit fa4f2030bd
9 changed files with 167 additions and 39 deletions

View File

@ -8,13 +8,15 @@ SpringBoot 配置文件(`application.yml` 等)主要是用于对 MyBatis 原
mybatis-flex:
#......
datasource:
#......
#......
configuration:
#......
#......
global-config:
#......
#......
admin-config:
#......
#......
seata-config:
#......
```
## mybatis-flex
@ -129,7 +131,28 @@ TypeHandler 扫描路径如果配置了该属性SqlSessionFactoryBean 会
- 类型:`java.lang.Object`
- 默认值:`1`
逻辑删除数据删除标记值,
逻辑删除数据删除标记值。
### logic-delete-column
- 类型:`java.lang.String`
- 默认值:`del_flag`
默认的逻辑删除字段。
### tenant-column
- 类型:`java.lang.String`
- 默认值:`tenant_id`
默认的多租户字段。
### version-column
- 类型:`java.lang.String`
- 默认值:`version`
默认的乐观锁字段。
## admin-config
@ -152,4 +175,20 @@ MyBatis-Flex-Admin 连接端点。
- 类型:`String`
- 默认值:`null`
MyBatis-Flex-Admin 连接密钥。
MyBatis-Flex-Admin 连接密钥。
## seata-config
### enable
- 类型:`boolean`
- 默认值:`false`
是否启用 Seata 代理数据源。
### seata-mode
- 类型:`com.mybatisflex.spring.boot.MybatisFlexProperties.SeataMode`
- 默认值:`AT`
使用 Seata AT 模式代理数据源。

View File

@ -88,6 +88,21 @@ public class FlexGlobalConfig {
*/
private int defaultRelationQueryDepth = 2;
/**
* 默认的逻辑删除字段允许设置 {@code null} 忽略匹配
*/
private String logicDeleteColumn = "del_flag";
/**
* 默认的多租户字段允许设置 {@code null} 忽略匹配
*/
private String tenantColumn = "tenant_id";
/**
* 默认的乐观锁字段允许设置 {@code null} 忽略匹配
*/
private String versionColumn = "version";
public boolean isPrintBanner() {
return printBanner;
}
@ -337,6 +352,30 @@ public class FlexGlobalConfig {
this.defaultRelationQueryDepth = defaultRelationQueryDepth;
}
public String getLogicDeleteColumn() {
return logicDeleteColumn;
}
public void setLogicDeleteColumn(String logicDeleteColumn) {
this.logicDeleteColumn = logicDeleteColumn;
}
public String getTenantColumn() {
return tenantColumn;
}
public void setTenantColumn(String tenantColumn) {
this.tenantColumn = tenantColumn;
}
public String getVersionColumn() {
return versionColumn;
}
public void setVersionColumn(String versionColumn) {
this.versionColumn = versionColumn;
}
public FlexDataSource getDataSource() {
return (FlexDataSource) getConfiguration().getEnvironment().getDataSource();
}

View File

@ -196,6 +196,8 @@ public class TableInfoFactory {
List<Field> entityFields = getColumnFields(entityClass);
FlexGlobalConfig config = FlexGlobalConfig.getDefaultConfig();
for (Field field : entityFields) {
Column column = field.getAnnotation(Column.class);
@ -233,7 +235,8 @@ public class TableInfoFactory {
String columnName = getColumnName(tableInfo.isCamelToUnderline(), field, column);
//逻辑删除字段
if (column != null && column.isLogicDelete()) {
if ((column != null && column.isLogicDelete())
|| columnName.equals(config.getLogicDeleteColumn())) {
if (logicDeleteColumn == null) {
logicDeleteColumn = columnName;
} else {
@ -242,7 +245,8 @@ public class TableInfoFactory {
}
//乐观锁版本字段
if (column != null && column.version()) {
if ((column != null && column.version())
|| columnName.equals(config.getVersionColumn())) {
if (versionColumn == null) {
versionColumn = columnName;
} else {
@ -251,7 +255,8 @@ public class TableInfoFactory {
}
//租户ID 字段
if (column != null && column.tenantId()) {
if ((column != null && column.tenantId())
|| columnName.equals(config.getTenantColumn())) {
if (tenantIdColumn == null) {
tenantIdColumn = columnName;
} else {

View File

@ -778,22 +778,36 @@ public class MybatisFlexProperties {
private Object normalValueOfLogicDelete = FlexConsts.LOGIC_DELETE_NORMAL;
/**
* 逻辑删除数据删除标记值
* 逻辑删除数据删除标记值
*/
private Object deletedValueOfLogicDelete = FlexConsts.LOGIC_DELETE_DELETED;
/**
* 默认的分页查询时的每页数据量
* 默认的分页查询时的每页数据量
*/
private int defaultPageSize = 10;
/**
* 默认的 Relation 注解查询深度
* 默认的 Relation 注解查询深度
*/
private int defaultRelationQueryDepth = 2;
/**
* 默认的逻辑删除字段
*/
private String logicDeleteColumn = "del_flag";
/**
* 默认的多租户字段
*/
private String tenantColumn = "tenant_id";
/**
* 默认的乐观锁字段
*/
private String versionColumn = "version";
public boolean isPrintBanner() {
return printBanner;
@ -843,6 +857,30 @@ public class MybatisFlexProperties {
this.defaultRelationQueryDepth = defaultRelationQueryDepth;
}
public String getLogicDeleteColumn() {
return logicDeleteColumn;
}
public void setLogicDeleteColumn(String logicDeleteColumn) {
this.logicDeleteColumn = logicDeleteColumn;
}
public String getTenantColumn() {
return tenantColumn;
}
public void setTenantColumn(String tenantColumn) {
this.tenantColumn = tenantColumn;
}
public String getVersionColumn() {
return versionColumn;
}
public void setVersionColumn(String versionColumn) {
this.versionColumn = versionColumn;
}
void applyTo(FlexGlobalConfig target) {
PropertyMapper mapper = PropertyMapper.get().alwaysApplyingWhenNonNull();
mapper.from(isPrintBanner()).to(target::setPrintBanner);
@ -851,6 +889,9 @@ public class MybatisFlexProperties {
mapper.from(getDeletedValueOfLogicDelete()).to(target::setDeletedValueOfLogicDelete);
mapper.from(getDefaultPageSize()).to(target::setDefaultPageSize);
mapper.from(getDefaultRelationQueryDepth()).to(target::setDefaultRelationQueryDepth);
mapper.from(getLogicDeleteColumn()).to(target::setLogicDeleteColumn);
mapper.from(getVersionColumn()).to(target::setVersionColumn);
mapper.from(getTenantColumn()).to(target::setTenantColumn);
}
}

View File

@ -49,7 +49,7 @@ public class Account extends BaseEntity implements Serializable, AgeAware {
@Column(typeHandler = Fastjson2TypeHandler.class)
private Map<String, Object> options;
@Column(isLogicDelete = true)
// @Column(isLogicDelete = true)
private Boolean isDelete;
private List<Article> articles;

View File

@ -15,6 +15,7 @@
*/
package com.mybatisflex.test;
import com.mybatisflex.core.FlexGlobalConfig;
import com.mybatisflex.core.MybatisFlexBootstrap;
import com.mybatisflex.core.audit.AuditManager;
import com.mybatisflex.core.audit.ConsoleMessageCollector;
@ -53,6 +54,9 @@ public class AccountTester {
.addScript("data.sql")
.build();
FlexGlobalConfig.getDefaultConfig()
.setLogicDeleteColumn("is_delete");
MybatisFlexBootstrap bootstrap = MybatisFlexBootstrap.getInstance()
.setDataSource(dataSource)
.setLogImpl(StdOutImpl.class)
@ -72,6 +76,11 @@ public class AccountTester {
articleMapper = bootstrap.getMapper(ArticleMapper.class);
}
@Test
public void testLogicDelete() {
accountMapper.selectAll().forEach(System.out::println);
}
@Test
public void testExecutor() {
DbChain.create()

View File

@ -16,7 +16,10 @@
package com.mybatisflex.test;
import com.mybatisflex.annotation.*;
import com.mybatisflex.annotation.ColumnMask;
import com.mybatisflex.annotation.Id;
import com.mybatisflex.annotation.KeyType;
import com.mybatisflex.annotation.Table;
import com.mybatisflex.core.mask.Masks;
import java.util.Date;
@ -34,7 +37,7 @@ public class TenantAccount {
private Date birthday;
@Column(tenantId = true)
// @Column(tenantId = true)
private Long tenantId;
public Long getId() {

View File

@ -18,8 +18,6 @@ package com.mybatisflex.test;
import com.mybatisflex.core.MybatisFlexBootstrap;
import com.mybatisflex.core.audit.AuditManager;
import com.mybatisflex.core.audit.ConsoleMessageCollector;
import com.mybatisflex.core.query.QueryWrapper;
import com.mybatisflex.core.tenant.TenantFactory;
import com.mybatisflex.core.tenant.TenantManager;
import com.mybatisflex.mapper.TenantAccountMapper;
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder;
@ -27,10 +25,6 @@ import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType;
import javax.sql.DataSource;
import static com.mybatisflex.core.query.QueryMethods.select;
import static com.mybatisflex.test.table.AccountTableDef.ACCOUNT;
import static com.mybatisflex.test.table.TenantAccountTableDef.TENANT_ACCOUNT;
public class TenantTester {
public static void main(String[] args) {
@ -52,24 +46,22 @@ public class TenantTester {
AuditManager.setMessageCollector(new ConsoleMessageCollector());
//配置 tenantFactory
TenantManager.setTenantFactory(new TenantFactory() {
@Override
public Object[] getTenantIds() {
return new Object[]{1, 2};
}
});
TenantManager.setTenantFactory(() -> new Object[]{1, 2});
TenantAccountMapper mapper = MybatisFlexBootstrap.getInstance().getMapper(TenantAccountMapper.class);
TenantAccountMapper mapper = MybatisFlexBootstrap.getInstance()
.getMapper(TenantAccountMapper.class);
mapper.selectListByQuery(QueryWrapper.create()
.select(TENANT_ACCOUNT.ALL_COLUMNS)
.from(TENANT_ACCOUNT.as("c"), ACCOUNT.as("b"))
.where(TENANT_ACCOUNT.ID.eq(ACCOUNT.ID))
.and(TENANT_ACCOUNT.ID.eq(1))
.unionAll(select(TENANT_ACCOUNT.ALL_COLUMNS).from(TENANT_ACCOUNT)
.where(TENANT_ACCOUNT.ID.eq(2))
)
);
mapper.selectAll().forEach(System.out::println);
// mapper.selectListByQuery(QueryWrapper.create()
// .select(TENANT_ACCOUNT.ALL_COLUMNS)
// .from(TENANT_ACCOUNT.as("c"), ACCOUNT.as("b"))
// .where(TENANT_ACCOUNT.ID.eq(ACCOUNT.ID))
// .and(TENANT_ACCOUNT.ID.eq(1))
// .unionAll(select(TENANT_ACCOUNT.ALL_COLUMNS).from(TENANT_ACCOUNT)
// .where(TENANT_ACCOUNT.ID.eq(2))
// )
// );
// mapper.deleteBatchByIds(Arrays.asList(1, 2));

View File

@ -4,5 +4,5 @@ CREATE TABLE IF NOT EXISTS `tb_account`
`user_name` VARCHAR(100),
`age` INTEGER,
`birthday` DATETIME,
`tenant_id` INTEGER(11)
);
`tenant_id` INTEGER
);