DriverAdapter

最后更新:2024-04-22 17:13:46 | 状态:未完成
通常情况下我们会用Controller/Service/Dao来操作数据库
controller负责提取http参数;service根据controller提供的参数值件封装成不同类型的SQL参数(RunPrepare);dao根据RunPrepare调用相应数据库的Adapter生成最终可执行的SQL
每一个数据库类型对应一个实现类,如MySQLAdapter/OracleAdapter
在一些低代码平台、数据中台、报表工具等场景中可以跨过service/dao直接调用adapter用来生成SQL(只生成不执行)
注意DDL经常会生成多条SQL,详细调用方式可以参考【DriverAdapter源码】和【AnylineDao调用示例
两种方式可以获取DDL而不执行。
一、调用service.ddl().create()/drop()/alter()/rename()等方法
在Table/Column等参数上设置ddl不执行,如:
Table table = ...
table.setExecute(false);//设置只生成DDL但不执行
service.ddl().cretae(table);
List<String> sql = table.ddls();//可以返回生成的DDL SQL

二、直接调用adapter相关方法,这样比较灵活
Table table = new Table("TAB_A");
table.addColumn("ID", "int").setAutoIncrement(true).setPrimaryKey(true);
table.addColumn("CODE", "VARCHAR(10)").setDefaultValue("ABC");
//如果确定数据库类型直接创建adapter实例
DriverAdapter adapter = new OracleAdapter();
List<Run> runs = adapter.buildCreateRunSQL(table);
for(String run:runs){
	System.out.println(run.getFinalUpdate());
}

//如果在运行时有多个数据库可以通过DriverAdapterHolder辅助确定数据库类型
DataRuntime runtime = RuntimeHolder.getRuntime();
adapter = DriverAdapterHolder.getAdapter(DatabaseType type)
//为什么需要两个参数,getAdapter调用非常频繁,解析过程中有可能需要连接数据库比较耗时,第一个参数是用于缓存,第一次成功解析数据库类型后会缓存起来,后续不再解析
adapter = DriverAdapterHolder.getAdapter(String datasource, DataRuntime runtime)

List<Run> runs = adapter.buildCreateRunSQL(table);
for(Run run:runs){
    System.out.println(run.getFinalUpdate());
}

创建调用buildCreateRun或buildAddRun
删除调用buildDropRun(Table, View, Index...)
如果既要执行DDL,又在执行后返回,可以在service.ddl().create(table)后调用table.ddls()返回执行的SQL
首页 最近更新 搜索 提交 回复