eojuk
์ด์ฃฝ์ ํ
์ด๋ธ ์์ฑ ์ฟผ๋ฆฌ๋ฅผ ORM ์ฝ๋๋ค๋ก ๋ณํํด์ฃผ๋ ์ ์ฉํ ๋๊ตฌ์
๋๋ค.
๊ธฐ์กด RAW Query๋ฅผ ๋ง์ด๊ทธ๋ ์ด์
ํ๊ฑฐ๋ ERD ๋๊ตฌ์์ ์ถ์ถํด๋ธ ์ฟผ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ํฐํฐ ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ์ข์ต๋๋ค.
https://myyrakle.github.io/eojuk-guksu-page/
์ค์น
์ค์น๋ npm์ ์ด์ฉํด ๊ฐ๋จํ๊ฒ ์ํํ ์ ์์ต๋๋ค.
npm install -g eojuk
์ฌ์ฉ๋ก
๋ค์๊ณผ ๊ฐ์ ์ฟผ๋ฆฌ ํ์ผ์ด ์์ ๊ฒฝ์ฐ
CREATE TABLE "tb_user" (
"user_no" serial8 NOT NULL,
"reg_date" timestamptz DEFAULT CURRENT_TIMESTAMP NOT NULL,
"foo" varchar(100) DEFAULT '' NOT NULL,
"complete_yn" boolean DEFAULT false NOT NULL
);
COMMENT ON COLUMN "tb_user"."user_no" IS '๊ธฐ๋ณธํค';
COMMENT ON COLUMN "tb_user"."nickname" IS '๋๋ค์';
COMMENT ON COLUMN "tb_user"."user_uuid" IS 'UUID';
COMMENT ON COLUMN "tb_user"."language" IS '์ฌ์ฉ์ธ์ด';
COMMENT ON COLUMN "tb_user"."correct_count" IS '๋ง์ถ ๋ฌธ์ ';
COMMENT ON COLUMN "tb_user"."wrong_count" IS 'ํ๋ฆฐ ๋ฌธ์ ';
COMMENT ON COLUMN "tb_user"."device_type" IS 'PC์ธ์ง ๋ชจ๋ฐ์ผ์ธ์ง';
COMMENT ON COLUMN "tb_user"."reg_date" IS '๋ฑ๋ก์ผ์';
COMMENT ON COLUMN "tb_user"."complete_yn" IS '๋ค ํ์๋์ง';
ALTER TABLE "tb_user" ADD CONSTRAINT "PK_TB_USER" PRIMARY KEY (
"user_no"
);
์ด์ฃฝ์ ์ฌ์ฉํ๊ธฐ๋ง ํ๋ฉด ์๋์ ๊ฐ์ด ํ
์ด๋ธ ์ฝ๋๋ฅผ ์๋์ผ๋ก ์์ฑํด์ค๋๋ค.
import { literal } from 'sequelize';
import {
Model,
Table,
Column,
HasMany,
CreatedAt,
UpdatedAt,
DeletedAt,
DataType,
Sequelize,
HasOne,
DefaultScope,
Scopes,
Index,
createIndexDecorator,
ForeignKey,
BelongsTo,
PrimaryKey,
AllowNull,
Default,
Comment,
} from 'sequelize-typescript';
@Table({
tableName: 'tb_user',
paranoid: false,
freezeTableName: true,
timestamps: false,
createdAt: false,
updatedAt: false,
deletedAt: false,
// schema: 'cp',
})
export class tb_user extends Model {
@Comment(`๊ธฐ๋ณธํค`)
@Column({
primaryKey: true,
autoIncrement: true,
type: DataType.INTEGER,
allowNull: false,
})
user_no: number;
@Comment(`๋ฑ๋ก์ผ์`)
@Column({
type: 'timestamptz',
allowNull: false,
default: litreal("current_timestamp"),
})
reg_date: Date;
@Comment(``)
@Column({
type: DataType.STRING,
allowNull: false,
})
foo: string;
@Comment(`๋ค ํ์๋์ง`)
@Column({
type: DataType.BOOLEAN,
allowNull: false,
})
complete_yn: boolean;
}
๋ช
๋ น์ค ์ต์
- -i --in: ์
๋ ฅํ์ผ๋ค์ ๋ํ ๊ฒฝ๋ก์
๋๋ค.
- -dir --outdir: ํ์ผ์ ์ถ๋ ฅํ ๊ฒฝ๋ก์
๋๋ค.
- -db --database: ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ์์
๋๋ค. ๊ธฐ๋ณธ๊ฐ์ postgresql์
๋๋ค.
- -o --orm: ์ถ๋ ฅํ ORM ํ์์
๋๋ค. ๊ธฐ๋ณธ๊ฐ์ sequelize-typescript์
๋๋ค.
- -cn --classname: ์ถ๋ ฅํ ํด๋์ค๋ช
ํ์์
๋๋ค.
- -fn --fieldname: ์ถ๋ ฅํ ํด๋์ค์ ํ๋๋ช
ํ์์
๋๋ค.
- -s --schema: ์ถ๋ ฅํ ํด๋์ค์ schema ์ด๋ฆ์
๋๋ค.
- -pk --primarykey: ์ถ๋ ฅํ ํด๋์ค์ primary key์
๋๋ค.
- -ca --createdat: ์ถ๋ ฅํ ํด๋์ค์ CreatedAt ์ปฌ๋ผ ํญ๋ชฉ์
๋๋ค.
- -ua, --updatedat: ์ถ๋ ฅํ ํด๋์ค์ UpdatedAt ์ปฌ๋ผ ํญ๋ชฉ์
๋๋ค.
- -da, --deletedat: ์ถ๋ ฅํ ํด๋์ค์ DeletedAt ์ปฌ๋ผ ํญ๋ชฉ์
๋๋ค.
์ง์๋๋ ์
๋ ฅํ์
์ง์๋๋ ์ถ๋ ฅํ์ (-o option)
- sequelize (์์ )
- sequelize-typescript
- typeorm
- jpa
- jpa-kotlin
์ฌ์ฉ๋ก
mysql ์ฟผ๋ฆฌ๋ฅผ typeorm ํ์์ผ๋ก ๋ด๋ณด๋ด๊ธฐ
eojuk -i .\test\mysql\test1.sql -dir .\test\ -db mysql -o typeorm
postgresql ์ฟผ๋ฆฌ๋ฅผ sequelize-typescript ํ์์ผ๋ก ๋ด๋ณด๋ด๊ธฐ
eojuk -i .\test\pg\test2.sql -dir .\test\ -db pg -o sequelize-typescript --schema foo