Relax ORM
A lite ORM Designed to reduce the stress you feel while leading with OracleDB.
Inspired by Sequelize and SequelizeTypescript
Please see change log to checkout new functions.
ChangeLog | TypeScript Demo App
Getting started
Relax ORM depens on OracleDB instant client. Please follow the instruction. Official: OracleDB Client Install Guid
After installing the OracleDB client, run the script below on terminal.
npm i oracledb relax-orm -S
Creating Connection and Entities
To create an Entity, you just extends Entity class and declare the generics type like example. Also you need to declare table name with @Table, one @PrimaryKey and Columns. Optionaly you can declare the use of sequence witch will be used on INSERT.
After creating Entities, you need to create and initialize connection and registering Entities.
;conn.addEntities;await conn.init;
Optionaly you can change oracledb config before creating ConnectionManager
ConnectionManager.config.maxRows = 100;ConnectionManager.config.fetchAsString = ;;
Query Example
After registering you can use the basic queries.
User.findAll/* Generages: SELECT SEQ_NUM_USER, NAME FROM RLXORM.TB_USE*/ User.findAll ;/* Generages: SELECT SEQ_NUM_USER, NAME FROM RLXORM.TB_USER WHERE SEQ_NUM_USER = :id$ AND NAME = :name$*/ User.create/* Generages: INSERT INTO RLXORM.TB_USER ( SEQ_NUM_USER, NAME ) VALUES ( RLXORM.SQ_USER.NEXTVAL, :name$ ) RETURNING SEQ_NUM_USER, NAME INTO :out$id, :out$name*/ // Saving entity;/* Generages: SELECT SEQ_NUM_USER, NAME FROM RLXORM.TB_USER WHERE SEQ_NUM_USER = :id$*/ user.name = 'style';user.save;/* Generages: UPDATE RLXORM.TB_USER SET SEQ_NUM_USER = :id$, NAME = :name$ WHERE SEQ_NUM_USER = :key$id RETURNING SEQ_NUM_USER, NAME INTO :out$id, :out$name*/ User.destroy;/* Generages: **NOTE** IT WILL DELETE RECORDS USING WHERE FILTERDELETE FROM RLXORM.TB_USER WHERE NAME = :name$*/ User.destroyAll;/* Generages: **NOTE** IT WILL DELETE ALL RECORDS FROM TABLEDELETE FROM RLXORM.TB_USER*/
Query FindOptions
In findAll and findOne queries you can use options and combine them like examples below.
;/* Generates:SELECT SEQ_NUM_USER, NAME FROM RLXORM.TB_USER WHERE ( SEQ_NUM_USER = :id$ ) OR ( SEQ_NUM_USER = :id$ ) AND NAME = :name$*/ res = await User.findOne;/* Generates:SELECT SEQ_NUM_USER, NAME FROM RLXORM.TB_USER WHERE ( SEQ_NUM_USER = :id$ ) AND ( NAME = :name$ )*/ res = await User.findAll;/* Generates:SELECT SEQ_NUM_USER, NAME FROM RLXORM.TB_USER ORDER BY SEQ_NUM_USER ASC, NAME DESC*/ res = await User.findAll;/* Generates:SELECT SEQ_NUM_USER, NAME FROM RLXORM.TB_USER WHERE NAME = :name$ ORDER BY SEQ_NUM_USER ASC, NAME DESC*/ res = await User.findAll;/* Generates:SELECT SEQ_NUM_USER, NAME FROM ( SELECT SEQ_NUM_USER, NAME, ROWNUM as TMP$ROWNUMBER FROM RLXORM.TB_USER ) WHERE TMP$ROWNUMBER <= :TMP$LIMIT */ res = await User.findAll;/* Generates: it uses ROW_NUMBER function with over to use ordered resultSELECT SEQ_NUM_USER, NAME FROM( SELECT SEQ_NUM_USER, NAME, ROW_NUMBER() OVER( ORDER BY NAME ASC ) as TMP$ROWNUMBER FROM RLXORM.TB_USER ORDER BY NAME ASC ) WHERE TMP$ROWNUMBER <= :TMP$LIMIT*/ res = await User.findAll;/* GenaratesSELECT SEQ_NUM_USER, NAME FROM ( SELECT SEQ_NUM_USER, NAME, ROW_NUMBER() OVER( ORDER BY SEQ_NUM_USER ASC ) as TMP$ROWNUMBER FROM RLXORM.TB_USER ORDER BY SEQ_NUM_USER ASC ) WHERE TMP$ROWNUMBER > :TMP$OFFSET AND TMP$ROWNUMBER <= :TMP$LIMIT*/ res = await User.findAll;/* GeneratesSELECT SEQ_NUM_USER, NAME FROM RLXORM.TB_USER WHERE ( SEQ_NUM_USER IN ( :id$in$0, :id$in$1 ) ) OR ( NAME = :name$ )*/