首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jOOQ -- jOOQ是否支持定义文件或创建jOOQ创建脚本?

jOOQ -- jOOQ是否支持定义文件或创建jOOQ创建脚本?
EN

Stack Overflow用户
提问于 2015-11-16 18:32:31
回答 1查看 422关注 0票数 1

在我们的项目中,concepts定义在一个配置文件中。举一个例子:

代码语言:javascript
复制
<concepts>
    <concept name="person">
        <property name="age" type="integer"/>
        ...
    </concept>
    ...
</concepts>

虽然这与SQL没有多大关系,但这个配置文件恰好可以映射到SQL表、列、.

从这个配置文件开始,我需要能够做两件事:

  • 生成SQL创建脚本(CREATE TABLE person ( ... ))。
  • 产生的jOOQ POJO,表,.可供开发人员使用

我想在这个项目中开始使用jOOQ。jOOQ是否支持任何类型的生成( SQL创建脚本及其POJO、表、.)哪一个不是从现有的数据库开始的?我翻阅了这些文件,但找不到多少。

如果没有,我正在考虑两种选择:

  1. 产生的jOOQ POJO,表,.基于配置文件(自定义开发)
  2. 基于jOOQ POJO、表、.生成SQL创建脚本在步骤1(自定义开发)中生成的

  1. 基于配置文件生成SQL创建脚本(自定义开发)
  2. 在一个可嵌入的数据库中执行这些脚本,如H2或SQLite (非常直接)(虽然脚本也将在“真实”数据库中执行,但最好在这里使用内存数据库,以避免任何依赖)。
  3. 产生的jOOQ POJO,表,.基于这个数据库(由jOOQ库提供)

虽然我认为第一个选项需要更多的努力,但它目前得到了我的青睐,因为第二个选项中的步骤3可能会导致信息丢失。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-16 21:08:46

这显然应该用XSLT解决。

生成SQL脚本:

代码语言:javascript
复制
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:template match="/">
        <result>
            <xsl:apply-templates select="concepts/concept"/>
        </result>
    </xsl:template>

    <xsl:template match="concept">
        <xsl:text>CREATE TABLE </xsl:text>
        <xsl:value-of select="@name"/>
        <xsl:text>(</xsl:text>
        <xsl:apply-templates select="property"/>
        <xsl:text>
);
</xsl:text>
    </xsl:template>

    <xsl:template match="property">
        <xsl:choose>
            <xsl:when test="position() > 1">
                <xsl:text>
, </xsl:text>
            </xsl:when>
            <xsl:otherwise>
                <xsl:text>
  </xsl:text>
            </xsl:otherwise>
        </xsl:choose>
        <xsl:value-of select="@name"/>
        <xsl:text> </xsl:text>
        <xsl:value-of select="@type"/>
    </xsl:template>
</xsl:stylesheet>

生成jOOQ元XML

jOOQ-meta支持使用XMLDatabase从XML导入模式元信息。

代码语言:javascript
复制
<configuration>
    <generator>
        <database>
            <name>org.jooq.util.xml.XMLDatabase</name>
            <properties>
                <property>
                    <key>dialect</key>
                    <value>ORACLE</value>
                </property>
                <property>
                    <key>xml-file</key>
                    <value>src/main/resources/concepts-transformed.xml</value>
                </property>
            </properties>

只需将XML文件转换为以下格式:http://www.jooq.org/xsd/jooq-meta-3.5.4.xsd

..。例如,使用以下XSLT:

代码语言:javascript
复制
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:variable name="schema" select="'MY_SCHEMA'"/>

    <xsl:template match="/">
        <information_schema xmlns="http://www.jooq.org/xsd/jooq-meta-3.5.4.xsd">
            <schemata>
                <schema>
                    <schema_name><xsl:value-of select="$schema"/></schema_name>
                </schema>
            </schemata>
            <tables>
                <xsl:apply-templates select="concepts/concept"/>
            </tables>
            <columns>
                <xsl:apply-templates select="concepts/concept/property"/>
            </columns>
        </information_schema>
    </xsl:template>

    <xsl:template match="concept">
        <table>
            <schema_name><xsl:value-of select="$schema"/></schema_name>
            <table_name><xsl:value-of select="@name"/></table_name>
        </table>
    </xsl:template>

    <xsl:template match="property">
        <column>
            <schema_name><xsl:value-of select="$schema"/></schema_name>
            <table_name><xsl:value-of select="../@name"/></table_name>
            <column_name><xsl:value-of select="@name"/></column_name>
            <data_type><xsl:value-of select="@type"/></data_type>
        </column>
    </xsl:template>
</xsl:stylesheet>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33742190

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档