V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
tctc4869
V2EX  ›  程序员

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

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

    实现一个页面对数据库里的某一个数据表的增删改查,这是一个最基本也是最容易实现的需求,只要会调 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   ·   实用小工具   ·   2806 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 11:51 · PVG 19:51 · LAX 03:51 · JFK 06:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.