/*
* Copyright 2006-2023 www.anyline.org
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.anyline.data.adapter.init;
import org.anyline.adapter.DataReader;
import org.anyline.adapter.DataWriter;
import org.anyline.adapter.EntityAdapter;
import org.anyline.adapter.KeyAdapter;
import org.anyline.data.adapter.DriverWorker;
import org.anyline.proxy.ConvertProxy;
import org.anyline.data.adapter.DriverAdapter;
import org.anyline.data.prepare.SyntaxHelper;
import org.anyline.data.prepare.init.DefaultVariable;
import org.anyline.metadata.graph.EdgeTable;
import org.anyline.metadata.graph.VertexTable;
import org.anyline.util.SQLUtil;
import org.anyline.metadata.adapter.MetadataAdapterHolder;
import org.anyline.data.cache.PageLazyStore;
import org.anyline.data.listener.DDListener;
import org.anyline.data.listener.DMListener;
import org.anyline.data.metadata.TypeMetadataAlias;
import org.anyline.metadata.adapter.ColumnMetadataAdapter;
import org.anyline.metadata.adapter.IndexMetadataAdapter;
import org.anyline.metadata.adapter.PrimaryMetadataAdapter;
import org.anyline.metadata.adapter.TableMetadataAdapter;
import org.anyline.metadata.type.init.StandardTypeMetadata;
import org.anyline.data.param.Config;
import org.anyline.data.param.ConfigParser;
import org.anyline.data.param.ConfigStore;
import org.anyline.data.param.init.DefaultConfigStore;
import org.anyline.data.prepare.RunPrepare;
import org.anyline.data.prepare.Variable;
import org.anyline.data.prepare.auto.TablePrepare;
import org.anyline.data.prepare.auto.TextPrepare;
import org.anyline.data.prepare.auto.init.DefaultTablePrepare;
import org.anyline.data.prepare.auto.init.DefaultTextPrepare;
import org.anyline.data.prepare.xml.XMLPrepare;
import org.anyline.data.run.*;
import org.anyline.data.runtime.DataRuntime;
import org.anyline.data.util.DataSourceUtil;
import org.anyline.entity.*;
import org.anyline.entity.generator.GeneratorConfig;
import org.anyline.entity.generator.PrimaryGenerator;
import org.anyline.exception.AnylineException;
import org.anyline.exception.SQLUpdateException;
import org.anyline.metadata.*;
import org.anyline.metadata.type.TypeMetadata;
import org.anyline.metadata.type.DatabaseType;
import org.anyline.proxy.CacheProxy;
import org.anyline.proxy.EntityAdapterProxy;
import org.anyline.proxy.InterceptorProxy;
import org.anyline.util.*;
import org.anyline.util.regular.Regular;
import org.anyline.util.regular.RegularUtil;
import java.lang.reflect.Field;
import java.util.*;
/**
* SQL生成 子类主要实现与分页相关的SQL 以及delimiter
*/
public abstract class AbstractDriverAdapter implements DriverAdapter {
protected DMListener dmListener;
protected DDListener ddListener;
protected PrimaryGenerator primaryGenerator;
protected DriverWorker worker;
protected DMListener getListener() {
return dmListener;
}
public void setListener(DMListener listener) {
this.dmListener = listener;
}
public DMListener getDMListener(){
return this.dmListener;
}
public void setListener(DDListener listener) {
this.ddListener = listener;
}
public DDListener getDDListener(){
return this.ddListener;
}
public void setGenerator(PrimaryGenerator generator){
this.primaryGenerator = generator;
}
public PrimaryGenerator getPrimaryGenerator() {
return primaryGenerator;
}
protected String delimiterFr = "";
protected String delimiterTo = "";
//拼写兼容 下划线空格兼容
protected static Map<String, String> spells = new HashMap<>();
//根据名称定位数据类型
protected LinkedHashMap<String, TypeMetadata> alias = new LinkedHashMap();
static {
for(StandardTypeMetadata type: StandardTypeMetadata.values()){
String name = type.name().toUpperCase();//变量名
String standard = type.getName().toUpperCase(); //标准SQL类型名
spells.put(name, standard);
if(name.contains(" ")) {
spells.put(name.replace(" ", "_"), standard);
}
if(name.contains("_")){
spells.put(name.replace("_", " "), standard);
}
if(standard.contains(" ")) {
spells.put(standard.replace(" ", "_"), standard);
}
if(standard.contains("_")) {
spells.put(standard.replace("_", " "), standard);
}
}
}
@Override
public void setWorker(DriverWorker worker){
this.worker = worker;
}
@Override
public DriverWorker getWorker(){
return worker;
}
@Override
public String getDelimiterFr(){
return this.delimiterFr;
}
@Override
public String getDelimiterTo(){
return this.delimiterTo;
}
public void setDelimiter(String delimiter){
if(BasicUtil.isNotEmpty(delimiter)){
delimiter = delimiter.replaceAll("\\s","");
if(delimiter.length() == 1){
this.delimiterFr = delimiter;
this.delimiterTo = delimiter;
}else{
this.delimiterFr = delimiter.substring(0,1);
this.delimiterTo = delimiter.substring(1,2);
}
}
}
public DatabaseType compatible(){
return null;
}
public AbstractDriverAdapter(){
//当前数据库支持的数据类型,子类根据情况覆盖
for(StandardTypeMetadata type: StandardTypeMetadata.values()){
reg(type, type.config());
List<DatabaseType> dbs = type.databaseTypes();
for(DatabaseType db:dbs){
if(db == this.type()){
//column type支持当前db
alias(type.getName(), type);
alias(type.name(), type);
break;
}
}
}
MetadataAdapterHolder.reg(type(), TypeMetadata.CATEGORY.CHAR, new TypeMetadata.Config(0, 1, 1));
MetadataAdapterHolder.reg(type(), TypeMetadata.CATEGORY.TEXT, new TypeMetadata.Config(1, 1, 1));
MetadataAdapterHolder.reg(type(), TypeMetadata.CATEGORY.BOOLEAN, new TypeMetadata.Config( 1,1, 1));
MetadataAdapterHolder.reg(type(), TypeMetadata.CATEGORY.BYTES, new TypeMetadata.Config(0, 1, 1));
MetadataAdapterHolder.reg(type(), TypeMetadata.CATEGORY.BLOB, new TypeMetadata.Config(1,1,1));
MetadataAdapterHolder.reg(type(), TypeMetadata.CATEGORY.INT, new TypeMetadata.Config(1, 1, 1));
MetadataAdapterHolder.reg(type(), TypeMetadata.CATEGORY.FLOAT, new TypeMetadata.Config(1, 0, 0));
MetadataAdapterHolder.reg(type(), TypeMetadata.CATEGORY.DATE, new TypeMetadata.Config(1, 1, 1));
MetadataAdapterHolder.reg(type(), TypeMetadata.CATEGORY.TIME, new TypeMetadata.Config(1, 1, 1));
MetadataAdapterHolder.reg(type(), TypeMetadata.CATEGORY.DATETIME, new TypeMetadata.Config( 1, 1, 1));
MetadataAdapterHolder.reg(type(), TypeMetadata.CATEGORY.TIMESTAMP, new TypeMetadata.Config(1, 1, 1));
MetadataAdapterHolder.reg(type(), TypeMetadata.CATEGORY.COLLECTION, new TypeMetadata.Config(1, 1, 1));
MetadataAdapterHolder.reg(type(), TypeMetadata.CATEGORY.GEOMETRY, new TypeMetadata.Config(1, 1, 1));
MetadataAdapterHolder.reg(type(), TypeMetadata.CATEGORY.OTHER, new TypeMetadata.Config( 1, 1, 1));
}
public LinkedHashMap<String, TypeMetadata> alias(){
return alias;
}
/**
* 注册数据类型别名(包含对应的标准类型、length/precision/scale等配置)
* @param alias 数据类型别名
* @return Config
*/
@Override
public TypeMetadata.Config reg(TypeMetadataAlias alias){
TypeMetadata standard = alias.standard();
if(standard == StandardTypeMetadata.NONE){
return null;
}
alias(alias.input(), standard); //根据别名
alias(standard.getName(), standard); //根据实现SQL数据类型名称
TypeMetadata.Config config = alias.config();
reg(alias.input(), config);
reg(alias.standard(), config);
return config;
}
protected void alias(String key, TypeMetadata value){
if(null != k
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
本项目是一个基于Spring生态的动态数据库ORM设计源码,共包含739个文件,其中包括545个Java文件、93个XML文件等。系统采用了Java和HTML技术,为用户提供了一个功能丰富的动态数据库解决方案。系统设计注重用户体验和响应速度,采用了模块化的开发方式,便于后续的扩展和维护。
资源推荐
资源详情
资源评论
收起资源包目录
基于Spring生态的动态数据库ORM设计源码 (792个子文件)
spring.factories 1KB
spring.factories 359B
spring.factories 345B
spring.factories 337B
spring.factories 285B
spring.factories 197B
spring.factories 176B
spring.factories 151B
spring.factories 128B
spring.factories 113B
spring.factories 113B
spring.factories 113B
spring.factories 111B
spring.factories 111B
spring.factories 111B
spring.factories 111B
spring.factories 111B
spring.factories 111B
spring.factories 110B
spring.factories 109B
spring.factories 109B
spring.factories 109B
spring.factories 107B
spring.factories 107B
spring.factories 107B
spring.factories 107B
spring.factories 105B
spring.factories 105B
spring.factories 105B
spring.factories 105B
spring.factories 105B
spring.factories 105B
spring.factories 105B
spring.factories 105B
spring.factories 103B
spring.factories 103B
spring.factories 103B
spring.factories 103B
spring.factories 103B
spring.factories 103B
spring.factories 103B
spring.factories 103B
spring.factories 102B
spring.factories 101B
spring.factories 101B
spring.factories 99B
spring.factories 99B
spring.factories 97B
spring.factories 97B
spring.factories 0B
package.html 5KB
package.html 270B
package.html 266B
package.html 250B
package.html 241B
org.springframework.boot.autoconfigure.AutoConfiguration.imports 1KB
org.springframework.boot.autoconfigure.AutoConfiguration.imports 288B
org.springframework.boot.autoconfigure.AutoConfiguration.imports 269B
org.springframework.boot.autoconfigure.AutoConfiguration.imports 264B
org.springframework.boot.autoconfigure.AutoConfiguration.imports 209B
org.springframework.boot.autoconfigure.AutoConfiguration.imports 129B
org.springframework.boot.autoconfigure.AutoConfiguration.imports 109B
org.springframework.boot.autoconfigure.AutoConfiguration.imports 87B
org.springframework.boot.autoconfigure.AutoConfiguration.imports 63B
org.springframework.boot.autoconfigure.AutoConfiguration.imports 50B
org.springframework.boot.autoconfigure.AutoConfiguration.imports 50B
org.springframework.boot.autoconfigure.AutoConfiguration.imports 48B
org.springframework.boot.autoconfigure.AutoConfiguration.imports 48B
org.springframework.boot.autoconfigure.AutoConfiguration.imports 48B
org.springframework.boot.autoconfigure.AutoConfiguration.imports 48B
org.springframework.boot.autoconfigure.AutoConfiguration.imports 48B
org.springframework.boot.autoconfigure.AutoConfiguration.imports 46B
org.springframework.boot.autoconfigure.AutoConfiguration.imports 46B
org.springframework.boot.autoconfigure.AutoConfiguration.imports 46B
org.springframework.boot.autoconfigure.AutoConfiguration.imports 46B
org.springframework.boot.autoconfigure.AutoConfiguration.imports 46B
org.springframework.boot.autoconfigure.AutoConfiguration.imports 45B
org.springframework.boot.autoconfigure.AutoConfiguration.imports 44B
org.springframework.boot.autoconfigure.AutoConfiguration.imports 44B
org.springframework.boot.autoconfigure.AutoConfiguration.imports 44B
org.springframework.boot.autoconfigure.AutoConfiguration.imports 44B
org.springframework.boot.autoconfigure.AutoConfiguration.imports 42B
org.springframework.boot.autoconfigure.AutoConfiguration.imports 42B
org.springframework.boot.autoconfigure.AutoConfiguration.imports 42B
org.springframework.boot.autoconfigure.AutoConfiguration.imports 42B
org.springframework.boot.autoconfigure.AutoConfiguration.imports 42B
org.springframework.boot.autoconfigure.AutoConfiguration.imports 42B
org.springframework.boot.autoconfigure.AutoConfiguration.imports 42B
org.springframework.boot.autoconfigure.AutoConfiguration.imports 42B
org.springframework.boot.autoconfigure.AutoConfiguration.imports 40B
org.springframework.boot.autoconfigure.AutoConfiguration.imports 40B
org.springframework.boot.autoconfigure.AutoConfiguration.imports 40B
org.springframework.boot.autoconfigure.AutoConfiguration.imports 40B
org.springframework.boot.autoconfigure.AutoConfiguration.imports 40B
org.springframework.boot.autoconfigure.AutoConfiguration.imports 40B
org.springframework.boot.autoconfigure.AutoConfiguration.imports 40B
org.springframework.boot.autoconfigure.AutoConfiguration.imports 39B
org.springframework.boot.autoconfigure.AutoConfiguration.imports 38B
org.springframework.boot.autoconfigure.AutoConfiguration.imports 38B
org.springframework.boot.autoconfigure.AutoConfiguration.imports 38B
共 792 条
- 1
- 2
- 3
- 4
- 5
- 6
- 8
资源评论
沐知全栈开发
- 粉丝: 4743
- 资源: 3374
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功