Spring Boot 如何使用PostgreSQL查询为getter生成代码[已关闭]

j2qf4p5b  于 6个月前  发布在  Spring
关注(0)|答案(1)|浏览(53)

已关闭。此问题需要details or clarity。目前不接受回答。
**要改进此问题吗?**通过editing this post添加详细信息并阐明问题。

12天前关闭
Improve this question
这个问题完全取决于我之前的问题。链接到下面提到的那个问题。(Spring Boot 中的接口投影)
我必须像下面这样将数据库列Map到getter:

interface UserAccess {
        Optional<Long> getUserId();
        Optional<String> getUserName();
        Optional<Long> getRoleId();
        Optional<String> getRoleName();
        Optional<Boolean> getUserRoleReadOnly();
        Optional<Long> getFormId();
        Optional<String> getFormName();
        Optional<String> getUrlPath();
        Optional<Boolean> getFormAccessReadOnly();
        Optional<Long> getFormTabId();
        Optional<String> getFormTabName();
        Optional<Boolean> getFormTabAccessReadOnly();
        Optional<Long> getBranchId();
        Optional<String> getBranchName();
        Optional<Boolean> getBranchAccessReadOnly();
        Optional<Long> getEntityId();
        Optional<String> getEntityName();
        Optional<Boolean> getEntityAccessReadOnly();
        Optional<Long> getOrgId();
        Optional<String> getOrgName();
    }

字符串
我可以手工完成。但是,实现这样的getter需要大量的劳动。我被告知这可以通过代码生成来完成。我想知道如何通过SQL来完成。
我该怎么做?

zujrkrfu

zujrkrfu1#

首先,代码:

Schema

CREATE TABLE my_test(
    id SERIAL PRIMARY KEY,
    user_name VARCHAR(32),
    "Count" INT,
    is_deleted BOOLEAN
);

字符串
以上仅为示例。

查询

SELECT
      'Optional<' ||
       CASE
           WHEN data_type = 'integer' THEN 'Long'
           WHEN data_type = 'character varying' THEN 'String'
           WHEN data_type = 'boolean' THEN 'Boolean'
           ELSE data_type
       END ||
       '> get' ||
       replace(initcap(replace(column_name, '_', ' ')), ' ', '') ||
       '();' AS script
  FROM information_schema.columns
 WHERE table_schema = 'public'
   AND table_name   = 'my_test'
;

小提琴

http://sqlfiddle.com/#!17/45c0a8/10

说明

  • information_schema.columns是一个table,它包含有关数据库columns的信息
  • 我们从public模式中选择my_testtable,当然,您可能有不同的表和不同的模式,请随意相应地替换它
  • 我们在SELECT子句中通过生成一个以data_typecolumn_name作为输入的字符串并连接这些部分来生成代码
  • case-当部分解析类型Map时,这只是一个概念证明,您可能有更多不同的数据类型,因此请考虑这只是一个概念证明,而不是实际实现,这就是为什么这里不处理非整数,而不是空性
  • replace(initcap(replace(column_name, '_', ' ')), ' ', '')将蛇形大小写的名称(如user_name)转换为 Camel 大小写的名称(如UserName),因此,当您的查询将其连接到“get”时,您将得到类似getUserName()的结果

结果

它应该看起来像这样:
x1c 0d1x的数据
我们已经成功地编写了为我们编写代码的代码,如果有成千上万的列需要实现getter,这将特别有用。

相关问题