实现一个页面对数据库里的某一个数据表的增删改查,这是一个最基本也是最容易实现的需求,只要会调 jdbc 和请求方法就会弄。
最简单的方式就是,建立 Controller,编写增删改查 action 请求方法,在这些请求方法里直接写 sql 语句通过 jdbc 去调用数据库,比较规范的是分成 model,service,dao,controller 四个类处理。然后编写或用快速生成
但把要求变一下,不能编写与数据表对应的 model,在后端的代码里也不能出现跟数据表名相关的字符串常量,不能出现包含数据表名的标识符,包含方法名称,类名,请求 action 名称。增删改查的数据表信息只能在 demo 程序启动后从数据库获得,在这个约束下要如何实现?
#-------------- 例:
数据库里有一个叫 Book 的表,编写前端界面,并通过 /cms/book/Form 请求访问页面,构造请求方法,实现对服务器内的数据库的 book 表的增删改查四个请求,即是 /cms/book/query,/cms/book/delete,/cms/book/add,/cms/book/update 。四个请求
在后端(非数据库)的代码里,不能有数据表对应的 Model,不能出现包含"book"字眼的字符串常量,标识符,例如 var tableName="Book",SelectBookAll(),BookController,"/cms/book/add" queryBook(request);等类似代码不能出现在后端代码文件里,只能在 demo 程序启动后从数据库里获得 book 数据表的表名和字段,在这个约束下如何实现 book 页面对 book 数据表的增删改查。有什么实现思路?
#---------------
把以上的例子增加 10 个,有什么简便快速实现的方式或思路?
1
wangyanrui 2020-05-15 11:08:55 +08:00
Spring Data REST
|
2
Boyce 2020-05-15 11:17:42 +08:00
Dataway?
|
3
wm123450405 2020-05-15 11:22:34 +08:00
graphql
|
4
krixaar 2020-05-15 11:59:27 +08:00
没看明白什么意思,从 url 取得"book"之后,all_tables/all_views 里看看有没有,没有就报错,有就 desc 一下,然后接下来该干什么还干什么?
|
5
hellotitan 2020-05-15 12:12:33 +08:00 via Android
data rest
|
6
tctc4869 OP @krixaar 是的,差不多是这个意思,后端的任何地方是不能出现“book“字眼的,也包括后端写死的请求 action 方法。只有前端和数据库那里才能出现“book"字眼。
|
7
aguesuka 2020-05-15 12:39:13 +08:00 via Android
三种方法,1.发明或者拿来一个 dsl,和解释器。2.先看执行计划,靠谱就执行。3.面相数据库编程,把 sql 写数据库里。
|
8
tctc4869 OP @krixaar 我想知道的是,如果“book“这个例子出现多个,例如 10 个,比如 10 个页面对各自对应的数据表实现增删改查,但不能在后端代码文件里出现包含它们的字眼,那么有没有快速的配置方式?或者是怎么设计这个快速方式的配置思路?
|
9
krixaar 2020-05-15 14:59:05 +08:00
#8 搞一个配置表,里面存真实表名、url 对应关键字、增删查改对应的 action 关键字:
所有者--表名--URL 关键字--增--删--查--改 owner | tbl_book | book | add | delete | query | update url 过来之后(比如 /book/query )按照关键字"book"在配置表 select 到这行,然后程序就有了真实的表名( owner.tbl_book )和增删查改的关键字,再判断传过来的关键字( query )是不是和数据库一样,执行对应的代码。 规定这些表( owner.tbl_book )必须有个自增的 id 作为主键,然后用数据库字段的类型判断用什么表单元素,比如 varchar 就出个文本框,datetime 就出个日期时间框,或者自己在配置表存哪些字段是什么。 之后增删查改的 SQL 根据配置表或者 DESCRIPTION 跑一下直接就能拼出来。 编译好之后只要修改数据库的配置表,问题就解决了,不管加了多少表,你要做的就是修改配置表,可以再写个程序自动维护配置表…… 我自己之前学 Django 的时候撸过一个匿名问卷 demo,问卷是个 model,下面挂一堆选项 model,问卷提交之后把提交的内容存到结果 model,关联到对应的问卷,增删查改就一份代码,只要在后台改问卷内容就能生成新问卷,感觉和这个意思差不多。 |
10
lordofhollows 2020-05-15 15:06:24 +08:00
动态根据表结构生成 Model
|
11
siweipancc 2020-05-15 19:15:44 +08:00 via iPhone
@JsonField,我胡说的
|