实现对数据表的增删查改的页面,在后端不能编写 model,不能出现包含表名的字符串常量,标识符的情况下,有哪些实现思路? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
tctc4869
V2EX    程序员

实现对数据表的增删查改的页面,在后端不能编写 model,不能出现包含表名的字符串常量,标识符的情况下,有哪些实现思路?

  •  
  •   tctc4869 2020-05-15 11:06:06 +08:00 2629 次点击
    这是一个创建于 1978 天前的主题,其中的信息可能已经有所发展或是发生改变。

    实现一个页面对数据库里的某一个数据表的增删改查,这是一个最基本也是最容易实现的需求,只要会调 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 条附言    2020-05-15 12:35:02 +08:00
    可以搭建基础的处理实体与数据表来实现
    第 2 条附言    2020-05-15 12:43:31 +08:00
    我想知道的是,如果“book“这个例子出现多个,例如 10 个,比如 10 个页面对各自对应的数据表实现增删改查,但不能在后端代码文件里出现包含它们的字眼,那么有没有快速的配置方式?或者是怎么设计这个快速方式的配置思路?
    11 条回复    2020-05-15 19:15:44 +08:00
    wangyanrui
        1
    wangyanrui  
       2020-05-15 11:08:55 +08:00
    Spring Data REST
    Boyce
        2
    Boyce  
       2020-05-15 11:17:42 +08:00
    Dataway?
    wm123450405
        3
    wm123450405  
       2020-05-15 11:22:34 +08:00
    graphql
    krixaar
        4
    krixaar  
       2020-05-15 11:59:27 +08:00
    没看明白什么意思,从 url 取得"book"之后,all_tables/all_views 里看看有没有,没有就报错,有就 desc 一下,然后接下来该干什么还干什么?
    hellotitan
        5
    hellotitan  
       2020-05-15 12:12:33 +08:00 via Android
    data rest
    tctc4869
        6
    tctc4869  
    OP
       2020-05-15 12:28:58 +08:00
    @krixaar 是的,差不多是这个意思,后端的任何地方是不能出现“book“字眼的,也包括后端写死的请求 action 方法。只有前端和数据库那里才能出现“book"字眼。
    aguesuka
        7
    aguesuka  
       2020-05-15 12:39:13 +08:00 via Android
    三种方法,1.发明或者拿来一个 dsl,和解释器。2.先看执行计划,靠谱就执行。3.面相数据库编程,把 sql 写数据库里。
    tctc4869
        8
    tctc4869  
    OP
       2020-05-15 12:41:08 +08:00
    @krixaar 我想知道的是,如果“book“这个例子出现多个,例如 10 个,比如 10 个页面对各自对应的数据表实现增删改查,但不能在后端代码文件里出现包含它们的字眼,那么有没有快速的配置方式?或者是怎么设计这个快速方式的配置思路?
    krixaar
        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,关联到对应的问卷,增删查改就一份代码,只要在后台改问卷内容就能生成新问卷,感觉和这个意思差不多。
    lordofhollows
        10
    lordofhollows  
       2020-05-15 15:06:24 +08:00
    动态根据表结构生成 Model
    siweipancc
        11
    siweipancc  
       2020-05-15 19:15:44 +08:00 via iPhone
    @JsonField,我胡说的
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2965 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 14:11 PVG 22:11 LAX 07:11 JFK 10:11
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86