Spring Data JDBC with jOOQ

Spring Data JDBC with jOOQ demonstrates how to access a database with jOOQ in combination with Spring Data JDBC. The domain model is based on Q&A Board example.

Q&A Board DB Schema

DROP TABLE IF EXISTS ANSWER CASCADE;
DROP TABLE IF EXISTS QUESTION CASCADE;
DROP TABLE IF EXISTS CHANNEL CASCADE;
DROP TABLE IF EXISTS USERS CASCADE;
DROP TABLE IF EXISTS TAG CASCADE;
DROP TABLE IF EXISTS CONTENT_LIKE CASCADE;

CREATE TABLE USERS (
    ID                 VARCHAR(100)  NOT NULL,
    VERSION            BIGINT       NOT NULL,
    NAME               VARCHAR(100)  NOT NULL,
    CREATED_AT         TIMESTAMP(6) NOT NULL,
    PRIMARY KEY (ID)
);

CREATE TABLE CHANNEL (
    ID                 BIGINT AUTO_INCREMENT  NOT NULL,
    VERSION            BIGINT       NOT NULL,
    NAME               VARCHAR(100)  NOT NULL,
    DESCRIPTION        VARCHAR(255)  NOT NULL,
    CREATED_BY         VARCHAR(100),
    CREATED_AT         TIMESTAMP(6) NOT NULL,
    PRIMARY KEY (ID)
);
ALTER TABLE CHANNEL ADD FOREIGN KEY(CREATED_BY) REFERENCES USERS(ID);

CREATE TABLE QUESTION (
    ID          BIGINT AUTO_INCREMENT  NOT NULL,
    VERSION     BIGINT       NOT NULL,
    CHANNEL_ID  BIGINT,
    STATUS      VARCHAR(100)  NOT NULL,
    TITLE       VARCHAR(200)  NOT NULL,
    CONTENT        VARCHAR(200)  NOT NULL,
    CREATED_BY  VARCHAR(100),
    CREATED_AT  TIMESTAMP(6) NOT NULL,
    PRIMARY KEY (ID)
);
ALTER TABLE QUESTION ADD FOREIGN KEY(CHANNEL_ID) REFERENCES CHANNEL(ID);
ALTER TABLE QUESTION ADD FOREIGN KEY(CREATED_BY) REFERENCES USERS(ID);

CREATE TABLE TAG (
    ID          BIGINT AUTO_INCREMENT  NOT NULL,
    QUESTION_ID BIGINT       NOT NULL,
    NAME        VARCHAR(100)  NOT NULL,
    PRIMARY KEY (ID, QUESTION_ID)
);
ALTER TABLE TAG ADD FOREIGN KEY(QUESTION_ID) REFERENCES QUESTION(ID);

CREATE TABLE CONTENT_LIKE (
    ID          BIGINT AUTO_INCREMENT  NOT NULL,
    QUESTION_ID BIGINT                 NOT NULL,
    COUNT       BIGINT                 NOT NULL,
    PRIMARY KEY (ID, QUESTION_ID)
);
ALTER TABLE CONTENT_LIKE ADD FOREIGN KEY(QUESTION_ID) REFERENCES QUESTION(ID);

CREATE TABLE ANSWER (
    ID          BIGINT AUTO_INCREMENT  NOT NULL,
    VERSION     BIGINT       NOT NULL,
    QUESTION_ID BIGINT       NOT NULL,
    CONTENT        VARCHAR(200)  NOT NULL,
    CREATED_BY  VARCHAR(100),
    CREATED_AT  TIMESTAMP(6) NOT NULL,
    PRIMARY KEY (ID)
);
ALTER TABLE ANSWER ADD FOREIGN KEY(QUESTION_ID) REFERENCES QUESTION(ID);
ALTER TABLE ANSWER ADD FOREIGN KEY(CREATED_BY) REFERENCES USERS(ID);

To execute the tests, execute:

$ mvn test