V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
tctc4869
V2EX  ›  程序员

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

  •  
  •   tctc4869 · May 15, 2020 · 2934 views
    This topic created in 2179 days ago, the information mentioned may be changed or developed.

    实现一个页面对数据库里的某一个数据表的增删改查,这是一个最基本也是最容易实现的需求,只要会调 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 个,有什么简便快速实现的方式或思路?

    Supplement 1  ·  May 15, 2020
    可以搭建基础的处理实体与数据表来实现
    Supplement 2  ·  May 15, 2020
    我想知道的是,如果“book“这个例子出现多个,例如 10 个,比如 10 个页面对各自对应的数据表实现增删改查,但不能在后端代码文件里出现包含它们的字眼,那么有没有快速的配置方式?或者是怎么设计这个快速方式的配置思路?
    11 replies    2020-05-15 19:15:44 +08:00
    wangyanrui
        1
    wangyanrui  
       May 15, 2020
    Spring Data REST
    Boyce
        2
    Boyce  
       May 15, 2020
    Dataway?
    wm123450405
        3
    wm123450405  
       May 15, 2020
    graphql
    krixaar
        4
    krixaar  
       May 15, 2020
    没看明白什么意思,从 url 取得"book"之后,all_tables/all_views 里看看有没有,没有就报错,有就 desc 一下,然后接下来该干什么还干什么?
    hellotitan
        5
    hellotitan  
       May 15, 2020 via Android
    data rest
    tctc4869
        6
    tctc4869  
    OP
       May 15, 2020
    @krixaar 是的,差不多是这个意思,后端的任何地方是不能出现“book“字眼的,也包括后端写死的请求 action 方法。只有前端和数据库那里才能出现“book"字眼。
    aguesuka
        7
    aguesuka  
       May 15, 2020 via Android
    三种方法,1.发明或者拿来一个 dsl,和解释器。2.先看执行计划,靠谱就执行。3.面相数据库编程,把 sql 写数据库里。
    tctc4869
        8
    tctc4869  
    OP
       May 15, 2020
    @krixaar 我想知道的是,如果“book“这个例子出现多个,例如 10 个,比如 10 个页面对各自对应的数据表实现增删改查,但不能在后端代码文件里出现包含它们的字眼,那么有没有快速的配置方式?或者是怎么设计这个快速方式的配置思路?
    krixaar
        9
    krixaar  
       May 15, 2020
    #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  
       May 15, 2020
    动态根据表结构生成 Model
    siweipancc
        11
    siweipancc  
       May 15, 2020 via iPhone
    @JsonField,我胡说的
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2425 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 71ms · UTC 10:06 · PVG 18:06 · LAX 03:06 · JFK 06:06
    ♥ Do have faith in what you're doing.