Tab sis hauv Hibernate / JPA nws yooj yim heev los sau code "hauv Java".
tiag tiag. Rau Hibernate thiab nws cov neeg siv, qhov no yog ob qho txiaj ntsig thiab kev foom phem. Hauv Hibernate, koj tuaj yeem sau ob peb qhov chaw, zoo li no:
@Entity
class Book {
@Id
int id;
String title;
}
Thiab yuav luag txhua yam yog npaj txhij. Tam sim no qhov ntau ntawm Hibernate yog los tsim kom muaj "cov ntsiab lus" ntawm qhov tseeb ntawm qhov chaw no yuav raug txhais li cas hauv DDL ntawm koj "dialect" ntawm SQL:
CREATE TABLE book (
id INTEGER PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
title VARCHAR(50),
CONSTRAINT pk_book PRIMARY KEY (id)
);
CREATE INDEX i_book_title ON book (title);
Txij no mus thiab mus ib txhis koj yuav tau sau DDL migration scripts, xws li siv Flyway. Thiab yuav ua li cas rau koj cov koom haum hauv qhov xwm txheej no? Koj tuaj yeem tsim kho lawv tus kheej (thiab muab ob npaug rau koj cov haujlwm ua haujlwm) lossis muaj Hibernate rov tsim dua tshiab rau koj (yuav ua li cas yuav yog tus tsim txoj hauv kev no kom tau raws li koj qhov kev cia siab?) Koj poob ob txoj kev.
Yog li, sai li sai tau thaum koj tsiv mus rau hauv kev tsim khoom, koj yuav xav tau cov khoom kub. Thiab lawv yuav tsum tau coj mus rau kev tsim khoom sai heev. Txij li thaum koj tsis tau npaj thiab txhim kho cov kav dej ntawm koj txoj kev tsiv teb tsaws chaw rau kev tsim khoom, koj nyob nraum patching wildly. Thiab tom qab ntawd koj tsis muaj sijhawm los ua txhua yam zoo. Thiab koj cem Hibernate, vim nws ib txwm ua txhaum, tab sis tsis yog koj ...
Hloov chaw, txij thaum pib, txhua yam tuaj yeem ua tiav txawv kiag li. Piv txwv li, muab lub log puag ncig ntawm lub tsheb kauj vab.
Database ua ntej
Qhov tseeb "qhov tseeb" nyob rau hauv koj database schema thiab "sovereignty" tshaj nws nyob rau hauv lub database. Lub schema txhais tau hais tias tsuas yog nyob rau hauv cov ntaub ntawv nws tus kheej thiab tsis nyob qhov twg, thiab txhua tus ntawm cov neeg siv khoom muaj ib daim qauv ntawm cov qauv no, yog li nws ua rau muaj kev nkag siab zoo los tswj kev ua raws li schema thiab nws txoj kev ncaj ncees, ua nws txoj cai hauv database - qhov twg cov ntaub ntawv raug khaws cia.
Qhov no yog qub txawm hackneyed txawj ntse. Cov yuam sij tseem ceeb thiab tshwj xeeb yog qhov zoo. Cov yuam sij txawv teb chaws zoo. Kev ntsuam xyuas kev txwv yog qhov zoo. Kev lees paub - Zoo.
Thiab, tsis yog tag nrho. Piv txwv li, siv Oracle, tej zaum koj yuav xav qhia meej:
Lub rooj zaum twg yog koj lub rooj nyob hauv
Nws tus nqi PCTFRE yog dab tsi
Dab tsi yog qhov cache loj hauv koj cov kab ke (tom qab tus ID)
Tag nrho cov no yuav tsis muaj teeb meem hauv cov tshuab me me, tab sis nws tsis tas yuav tos kom txog thaum hloov mus rau thaj tsam ntawm "cov ntaub ntawv loj" - koj tuaj yeem pib tau txais txiaj ntsig los ntawm cov neeg muag khoom muab kev cia zoo, xws li cov tau hais los saum no, ntau dhau los. Tsis muaj ORMs kuv tau pom (xws li jOOQ) muab kev nkag mus rau tag nrho cov txheej txheem DDL uas koj xav siv hauv koj cov ntaub ntawv. ORMs muab qee cov cuab yeej los pab koj sau DDL.
Raws li tau hais los saum toj no, ntawm tus neeg siv khoom koj yuav xav tau daim ntawv theej ntawm koj lub database schema, tus neeg siv saib. Needless hais, tus neeg saib no yuav tsum nyob rau hauv sync nrog tus qauv tiag. Dab tsi yog txoj hauv kev zoo tshaj kom ua tiav qhov no? Nrog ib tug code generator.
Tag nrho cov databases muab lawv cov ntaub ntawv meta-cov ntaub ntawv ntawm SQL. Nov yog yuav ua li cas kom tau txais tag nrho cov lus hauv SQL dialects los ntawm koj cov ntaub ntawv:
-- H2, HSQLDB, MySQL, PostgreSQL, SQL Server
SELECT table_schema, table_name
FROM information_schema.tables
-- DB2
SELECT tabschema, tabname
FROM syscat.tables
-- Oracle
SELECT owner, table_name
FROM all_tables
-- SQLite
SELECT name
FROM sqlite_master
-- Teradata
SELECT databasename, tablename
FROM dbc.tables
Cov lus nug no (los yog cov uas zoo sib xws, nyob ntawm seb koj puas yuav tsum tau xav txog cov kev xav, cov ntsiab lus pom, cov lus muaj nuj nqis) kuj raug txiav txim los ntawm kev hu. DatabaseMetaData.getTables() los ntawm JDBC, lossis siv jOOQ meta-module.
Los ntawm cov txiaj ntsig ntawm cov lus nug no, nws yog qhov yooj yim los tsim cov neeg siv khoom-sab sawv cev ntawm koj tus qauv database, txawm li cas los xij koj siv thev naus laus zis ntawm tus neeg siv khoom.
Los yog kho tshiab jOOQ chav kawm. Feem ntau cov kev hloov DDL tseem cuam tshuam rau cov ntsiab lus, tsis yog syntax xwb. Yog li ntawd, nws tuaj yeem yooj yim pom hauv cov ntawv sau ua ke dab tsi code yuav (lossis tuaj yeem yog) cuam tshuam los ntawm kev nce koj cov ntaub ntawv.
Qhov tseeb xwb
Txawm hais tias koj siv thev naus laus zis twg, yeej ib txwm muaj ib tus qauv uas tsuas yog qhov tseeb ntawm qee qhov subsystem - lossis tsawg kawg peb yuav tsum siv zog rau qhov no thiab zam kev lag luam tsis meej pem qhov twg "qhov tseeb" nyob txhua qhov chaw thiab tam sim no nyob qhov twg. Txhua yam tuaj yeem yooj yim dua. Yog tias koj tsuas yog pauv cov ntaub ntawv XML nrog qee qhov system, tsuas yog siv XSD. Ua tibzoo saib jOOQ's INFORMATION_SCHEMA meta-model hauv XML daim ntawv: https://www.jooq.org/xsd/jooq-meta-3.10.0.xsd
XSD tau nkag siab zoo
XSD cim XML cov ntsiab lus zoo heev thiab tso cai rau kev siv tau hauv txhua hom lus neeg siv
XSD yog qhov zoo tshaj plaws thiab rov qab tau zoo heev
XSD tuaj yeem txhais ua Java code siv XJC
Lub ntsiab lus kawg yog qhov tseem ceeb. Thaum sib txuas lus nrog rau sab nraud siv cov lus XML, peb xav kom paub tseeb tias peb cov lus siv tau. Qhov no yooj yim heev kom ua tiav nrog JAXB, XJC thiab XSD. Nws yuav yog kev npau taws heev los xav tias, nyob rau hauv Java-thawj tsim txoj hauv kev uas peb ua peb cov lus li Java khoom, lawv tuaj yeem ua tau zoo rau XML thiab xa mus rau lwm qhov system. XML tsim los ntawm txoj kev no yuav tsis zoo, tsis muaj ntaub ntawv, thiab nyuaj rau kev txhim kho. Yog tias muaj kev pom zoo ntawm qib kev pabcuam zoo (SLA) ntawm qhov kev sib txuas, peb yuav tam sim ntawd ntsia nws.
Yuav kom ncaj ncees, qhov no yog qhov tshwm sim txhua lub sijhawm nrog JSON API, tab sis qhov ntawd yog lwm zaj dab neeg, kuv yuav sib cav lwm zaus ...
Databases: lawv yog tib yam
Ua haujlwm nrog databases, koj nkag siab tias lawv txhua tus yeej zoo ib yam. Lub database muaj nws cov ntaub ntawv thiab yuav tsum tswj cov schema. Txhua qhov kev hloov kho uas ua rau lub tswv yim yuav tsum tau ua ncaj qha rau hauv DDL kom qhov tseeb ntawm ib qho kev hloov kho.
Thaum qhov hloov tshiab tau tshwm sim, txhua tus neeg siv khoom yuav tsum hloov kho lawv cov qauv ntawm cov qauv. Qee tus neeg siv yuav raug sau rau hauv Java siv jOOQ thiab Hibernate lossis JDBC (los yog ob qho tib si). Lwm tus neeg tuaj yeem sau rau hauv Perl (cia peb xav kom lawv muaj hmoo), lwm tus hauv C #. Tsis muaj teeb meem. Tus qauv tseem ceeb yog nyob rau hauv lub database. Cov qauv tsim ORM feem ntau yog cov khoom tsis zoo, cov ntaub ntawv tsis zoo, thiab nyuaj rau kev tsim kho.
Yog li tsis txhob ua yuam kev. Tsis txhob ua yuam kev txij thaum pib. Ua haujlwm los ntawm database. Tsim ib lub raj xa dej uas tuaj yeem siv tau. Pab kom code generators kom yooj yim luam koj cov qauv database thiab muab pov tseg rau cov neeg siv khoom. Thiab tsis txhob txhawj txog cov code generators. Lawv zoo. Nrog lawv, koj yuav ua tau ntau dua. Txhua yam koj yuav tsum tau ua yog siv sijhawm me ntsis teeb tsa lawv los ntawm qhov pib, thiab koj yuav muaj ntau xyoo ntawm kev ua tau zoo los tsim koj qhov project zaj dab neeg.
Tsis txhob ua tsaug rau kuv, tom qab ntawd.
Lus piav qhia
Kom meej meej: Kab lus no tsis nyob rau hauv ib txoj kev tawm tswv yim hais tias tag nrho cov system (piv txwv li, sau, lag luam logic, thiab lwm yam) yuav tsum tau flexed kom haum koj database qauv. Qhov kuv tab tom tham txog hauv tsab xov xwm no yog cov neeg siv code uas cuam tshuam nrog lub database yuav tsum ua raws li cov qauv database kom nws tsis rov tsim dua cov qauv database hauv "thawj chav kawm" xwm txheej. Xws li logic feem ntau yog nyob ntawm cov ntaub ntawv nkag txheej ntawm koj tus neeg siv khoom.
Nyob rau hauv ob-theem architectures, uas yog tseem khaws cia nyob rau hauv tej qhov chaw, xws li ib tug system qauv yuav tsuas yog ib tug ua tau. Txawm li cas los xij, hauv ntau lub tshuab, cov ntaub ntawv nkag mus rau txheej zoo li kuv ua "subsystem" uas encapsulates tus qauv database.
Tsis suav
Muaj kev zam rau txhua txoj cai, thiab kuv tau hais ua ntej tias cov ntaub ntawv ua ntej thiab cov txheej txheem tsim tawm tuaj yeem qee zaum tsis tsim nyog. Nov yog ob peb qhov kev zam no (tej zaum yuav muaj lwm tus):
Thaum lub schema tsis paub thiab yuav tsum tau qhib. Piv txwv li, koj muab ib lub cuab yeej los pab cov neeg siv taw qhia txhua daim duab. Phew. Tsis muaj code tiam ntawm no. Tab sis tseem - lub database ua ntej ntawm tag nrho cov.
Thaum lub voj voog yuav tsum tau tsim tawm ntawm ya mus los daws qee qhov teeb meem. Qhov piv txwv no zoo li yog me ntsis frilly version ntawm tus qauv tus nqi attribute, i.e., koj tsis tshua muaj lub tswv yim zoo. Hauv qhov no, koj feem ntau tsis tuaj yeem paub tseeb tias RDBMS yuav haum koj.
Kev zam yog los ntawm qhov tshwj xeeb. Feem ntau hais txog kev siv RDBMS, schema paub ua ntej, nws nyob hauv RDBMS thiab tsuas yog qhov "qhov tseeb", thiab txhua tus neeg siv khoom yuav tsum tau txais cov ntawv luam los ntawm nws. Qhov zoo tshaj plaws, qhov no yuav tsum koom nrog lub tshuab hluav taws xob code.