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不执行,如:
二、直接调用adapter相关方法,这样比较灵活
创建调用buildCreateRun或buildAddRun
删除调用buildDropRun(Table, View, Index...)
如果既要执行DDL,又在执行后返回,可以在service.ddl().create(table)后调用table.ddls()返回执行的SQL
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