ProHoster > Blog > Pulega > O le mea moni muamua, poʻo le mafuaʻaga e manaʻomia ai le faʻatulagaina o le faiga faʻavae i luga o le fausaga o faʻamaumauga
O le mea moni muamua, poʻo le mafuaʻaga e manaʻomia ai le faʻatulagaina o le faiga faʻavae i luga o le fausaga o faʻamaumauga
Ei Habr!
E faaauau pea ona matou suʻesuʻeina le mataupu Java и vaipuna, e aofia ai ile tulaga fa'amaumauga. I aso nei matou te valaaulia oe e faitau pe aisea, pe a mamanuina talosaga tetele, o le faʻamaumauga o faʻamaumauga, ae le o le Java code, e tatau ona taua tele, pe faʻapefea ona faia lenei mea, ma o a ni tuusaunoaga o loʻo i ai i lenei tulafono.
I lenei tala tuai, o le a ou faʻamatalaina pe aisea ou te talitonu ai e toetoe lava o tulaga uma, o le faʻataʻitaʻiga o faʻamatalaga i totonu o se talosaga e tatau ona mamanuina "mai le database" nai lo le "mai le gafatia o Java" (poʻo le a lava le gagana a le tagata o tausia oe. galulue faatasi). I le faia o le auala lona lua, o loʻo e faʻatulagaina oe lava mo se ala umi o tiga ma mafatiaga pe a amata ona tupu lau poloketi.
O le tusiga na tusia e faavae i luga tasi le fesili, tuuina atu i luga o le Stack Overflow.
Maʻeu loʻu ofo ona o loʻo i ai se vaega itiiti o tagata faʻaoga, o loʻo masani i le jOOQ, ua ita i le mea moni e faʻalagolago tele le jOOQ i le faʻatupuina o tulafono e faʻagaioia ai. E leai se tasi e taofia oe mai le faʻaaogaina o le jOOQ e te manaʻo e fetaui, pe faʻamalosia oe e faʻaaoga le faʻasologa o tulafono. Ae o le faaletonu (e pei ona faamatalaina i le tusi lesona) auala e galue ai ma le jOOQ o le e amata i se (talatuu) database schema, fesuiaʻi inisinia e faʻaaoga ai le generator code jOOQ e maua ai se seti o vasega e fai ma sui o au laulau, ona tusi lea o le ituaiga. -sefe fesili ile laulau nei:
for (Record2<String, String> record : DSL.using(configuration)
// ^^^^^^^^^^^^^^^^^^^^^^^ Информация о типах выведена на
// основании сгенерированного кода, на который ссылается приведенное
// ниже условие SELECT
.select(ACTOR.FIRST_NAME, ACTOR.LAST_NAME)
// vvvvv ^^^^^^^^^^^^ ^^^^^^^^^^^^^^^ сгенерированные имена
.from(ACTOR)
.orderBy(1, 2)) {
// ...
}
E i ai filosofia eseese, lelei ma le le lelei e fesoʻotaʻi ma nei auala i le faʻatulagaina o tulafono - tusi lesona ma otometi - o le a ou le talanoaina auiliili i lenei tusiga. Ae, i se tulaga lautele, o le manatu atoa o le tulafono faʻavae e mafai ai ona tatou toe gaosia i Java lena "upu moni" tatou te le amanaiaina, pe i totonu o la tatou polokalama poʻo fafo atu. I se isi itu, o le mea lea e fai e le au faʻapipiʻi pe a latou gaosia le bytecode, masini code, poʻo se isi ituaiga o faʻamatalaga puna - matou te maua se faʻaaliga o la matou "upu moni" i se isi gagana, e tusa lava po o a mafuaaga patino.
O loʻo i ai se mea moni (i totonu poʻo fafo) - mo se faʻataʻitaʻiga, se faʻamatalaga, se faʻataʻitaʻiga faʻamatalaga, ma isi.
Matou te manaʻomia se faʻataʻitaʻiga faʻapitonuʻu o lenei mea moni i la matou gagana polokalame.
E le gata i lea, e toetoe lava o taimi uma e fautuaina ai le faʻatupuina o sea faʻaaliga ina ia aloese mai le toe faʻaaogaina.
Ituaiga Tulaga ma Fa'amatalaga Fa'amatalaga
Faʻaaliga: o le isi, sili atu faʻaonaponei ma faʻapitoa auala i le fausiaina o code mo le jOOQ o loʻo faʻaaogaina ituaiga e tuʻuina atu, a'o fa'atinoina ile F#. I lenei tulaga, o le code e gaosia e le tagata faʻapipiʻi, o le mea moni i le tulaga o le tuʻufaʻatasia. I le mataupu faavae, e le o iai sea code i le puna puna. Java e tutusa, e ui lava e le o se mea matagofie, meafaigaluega - faʻamatalaga faʻamatalaga, mo se faʻataʻitaʻiga, Lombok.
I se tulaga, o mea lava e tasi e tupu iinei e pei o le tulaga muamua, sei vagana ai:
E te le o vaʻaia le faʻailoga faʻavae (atonu o lenei tulaga e foliga mai e le faʻafefe i se tasi?)
E tatau ona e mautinoa e mafai ona tuʻuina atu ituaiga, o lona uiga, "moni" e tatau ona avanoa i taimi uma. E faigofie lenei i le tulaga o Lombok, lea e faʻamatalaina ai le "upu moni". E fai si lavelave i fa'ata'ita'iga fa'amaumauga e fa'alagolago i se feso'ota'iga ola maua pea.
O le a le fa'afitauli i le fa'atupuina o tulafono?
I le faaopoopo atu i le fesili taufaasese o le auala sili e faʻatautaia ai le faʻasologa o tulafono - ma le lima poʻo le otometi, e tatau foi ona tatou taʻua o loʻo i ai tagata e talitonu e le manaʻomia se faʻasologa o tulafono. O le faʻamaoniaga o lenei manatu, lea e masani ona ou oʻo i ai, e faigata ona faʻatutuina se paipa faufale. Ioe, e matua faigata lava. E alia'e mai tau fa'aopoopo o aseta. Afai o loʻo e amataina i se oloa faʻapitoa (pe o le jOOQ, poʻo le JAXB, poʻo le Hibernate, ma isi), o le faʻatulagaina o se siosiomaga gaosiga e manaʻomia ai le taimi e te manaʻo ai e faʻaalu le aʻoaʻoina o le API lava ia ina ia mafai ona e maua mai ai le tau. .
Afai o tau e fesoʻotaʻi ma le malamalama i le fausaga o le afi e maualuga tele, o lona uiga, o le mea moni, na faia e le API se galuega le lelei i luga o le faʻaaogaina o le generator code (ma mulimuli ane e foliga mai o le faʻaogaina o tagata i totonu e faigata foi). O le fa'aogaina e tatau ona avea ma fa'amuamua sili mo so'o se API. Ae ua na'o le tasi lea finauga e faasaga i le fa'atupu tulafono. A leai, o le tusi lesona atoa lava e tusi ai se fa'aaliga fa'apitonu'u o le mea moni i totonu po'o fafo.
E toatele o le a faapea mai e leai so latou taimi e fai ai nei mea uma. Ua leai ni taimi fa'agata mo a latou Super Product. E i ai se aso o le a tatou tapenaina ai le afi o le fono, e maua ai le taimi. Ou te tali atu ia i latou:
Ae i Hibernate / JPA e matua faigofie lava ona tusia Java code.
E moni lava. Mo Hibernate ma ona tagata faʻaoga, o se faʻamanuiaga ma se malaia. I le Hibernate e mafai ona e tusia ni nai faʻalapotopotoga, pei o lenei:
@Entity
class Book {
@Id
int id;
String title;
}
Ma toetoe lava o mea uma ua saunia. O lea la ua o'o ia Hibernate e fa'atupuina le lavelave "fa'amatalaga" pe fa'apefea ona fa'amatalaina tonu lenei vaega i le DDL o lau SQL "dialect":
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);
... ma amata faʻagaoioi le talosaga. O se avanoa manaia tele e amata vave ai ma taumafai mea eseese.
Ae peitai, faamolemole faataga mai a’u. Sa ou pepelo.
O le a fa'amalosia moni ea e Hibernate le fa'auigaina o lenei igoa autu autu?
O le a faia e Hibernate se fa'ailoga ile TITLE? – Ou te iloa mautinoa o le a tatou manaomia.
O le a faia tonu e Hibernate lenei ki e iloagofie i le Fa'amatalaga Fa'amatalaga?
Masalo e leai. Afai o lo'o e atia'e lau poloketi mai le maoa'e, e faigofie lava ona lafoa'i le database tuai ma fa'atupu se mea fou i le taimi lava e te fa'aopoopoina ai fa'amatalaga talafeagai. O lea la, o le vaega Tusi o le a iu lava ina fai le foliga:
@Entity
@Table(name = "book", indexes = {
@Index(name = "i_book_title", columnList = "title")
})
class Book {
@Id
@GeneratedValue(strategy = IDENTITY)
int id;
String title;
}
Sekia. Toe fa'afouina. Toe, i lenei tulaga o le a matua faigofie i le amataga.
Ae e tatau ona e totogiina mulimuli ane
E le o toe mamao e tatau ona e alu i le gaosiga. O le taimi lena o le a le toe galue ai lenei faʻataʻitaʻiga. Ona:
I le gaosiga, o le a le toe mafai, pe a manaʻomia, e lafoai le database tuai ma amata mai le sasa. O lau fa'amaumauga o le a avea ma measina.
Mai le taimi nei ma le faavavau e tatau ona e tusitusi DDL migration scripts, mo se faʻataʻitaʻiga, faʻaaoga Flyway. O le a le mea o le a tupu i au faʻalapotopotoga i lenei tulaga? E mafai ona e fetuutuuna'i ma le lima (ma fa'aluaina ai au galuega), pe mafai ona e ta'u atu ia Hibernate e toe fa'afouina mo oe (fa'apefea ona fa'atupuina i lenei auala e fetaui ma ou fa'amoemoega?) Po'o le a lava le auala, e te leiloa.
O le taimi lava e te alu ai i le gaosiga e te manaʻomia ni paʻu vevela. Ma e manaʻomia ona tuʻuina vave i le gaosiga. Talu ai e te leʻi saunia ma e te leʻi faʻatulagaina se paipa lamolemole o au femalagaiga mo le gaosiga, e te faʻafefeteina mea uma. Ona e le toe maua lea o se taimi e fai ai mea uma sa'o. Ma e te faitioina Hibernate, aua e masani lava ona sese se isi tagata, ae le o oe ...
Nai lo o lea, sa mafai ona faia mea e matuā ese lava mai le amataga. Mo se faataitaiga, tuu uili lapotopoto i luga o se uila.
Fa'amaumauga muamua
O le "upu moni" i totonu o lau faʻamaumauga faʻamaumauga ma le "pulepulega" o loʻo taoto i totonu o le database. O le fuafuaga e faʻamatalaina naʻo totonu o le database lava ia ma e leai se isi mea, ma e tofu tagata faʻatau ma se kopi o lenei faʻataʻitaʻiga, o lea e talafeagai lelei ai le faʻamalosia o le tausisia o le fuafuaga ma lona faʻamaoni, ia faia saʻo i totonu o faʻamaumauga - o loʻo i ai faʻamatalaga. teuina.
O le poto tuai lenei, e oo lava i le poto faʻatauvaʻa. O ki autu ma tulaga ese e lelei. E lelei ki mai fafo. E lelei le siakiina o tapula'a. Faamatalaga manatu - Lelei.
E le gata i lea, e le na o le pau lena. Mo se faʻataʻitaʻiga, faʻaaoga Oracle, atonu e te manaʻo e faʻamaonia:
O le a le avanoa o lau laulau i totonu?
O le a lona tau o le PCTFREE?
O le a le tele o le cache i lau fa'asologa (i tua o le id)
Atonu e le taua lenei mea i faiga laiti, ae e te le tau faatali seia e alu atu i totonu o le malo tele-e mafai ona e amata faʻamanuiaina mai faʻatauga faʻatau oloa e pei o mea na taʻua i luga i se taimi vave. E leai se ORM ua ou va'aia (e aofia ai le jOOQ) e maua ai avanoa i le seti atoa o filifiliga DDL atonu e te mana'o e fa'aoga i lau fa'amaumauga. ORM e ofoina atu nisi meafaigaluega e fesoasoani ia te oe e tusia DDL.
Ae i le faaiuga o le aso, o se matagaluega ua mamanuina lelei e tusilima i le DDL. So'o se DDL e fa'atupuina ua na'o se fa'atatau.
Ae faapefea le fa'ata'ita'iga a le tagata o tausia?
E pei ona taʻua i luga, i luga o le kalani e te manaʻomia se kopi o lau faʻasologa o faʻamaumauga, le vaaiga a le kalani. E le tau ta'ua, e tatau ona ogatasi lenei vaaiga a le tagata o tausia ma le ata moni. O le a le auala sili e ausia ai lenei mea? Faʻaaogaina o se faʻaupuga code.
O fa'amaumauga uma e tu'uina atu a latou fa'amatalaga meta e ala i le SQL. Ole auala lea e maua uma ai laulau mai lau fa'amaumauga ile gagana SQL eseese:
-- 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
O nei fesili (poʻo faʻatusa, faʻalagolago pe e tatau foi ona e mafaufau i manatu, vaaiga faʻapitoa, galuega faʻatatau i laulau) e faʻatinoina foi e ala i le valaʻau. DatabaseMetaData.getTables() mai le JDBC, poʻo le faʻaaogaina o le jOOQ meta-module.
Mai fa'ai'uga o ia fesili, e fai lava si faigofie ona fa'atupuina so'o se fa'ata'ita'iga o lau fa'ata'ita'iga fa'amaumauga, tusa lava po'o le a le tekonolosi e te fa'aogaina i le tagata o tausia.
Afai o loʻo e faʻaaogaina le JDBC poʻo le Spring, e mafai ona e fatuina se seti o manoa tumau
Afai e te faʻaogaina le JPA, e mafai ona e faʻatupuina ia lava faʻalapotopotoga
Afai e te faʻaogaina le jOOQ, e mafai ona e gaosia le jOOQ meta-model
Fa'alagolago i le tele o galuega o lo'o ofoina mai e lau tagata fa'atau API (fa'ata'ita'iga jOOQ po'o le JPA), o le fa'ata'ita'iga fa'atusa e mafai ona matua'i mauoa ma atoatoa. Ave, mo se faʻataʻitaʻiga, le avanoa o faʻatasiga faʻapitoa, faʻaalia i le jOOQ 3.11, lea e fa'alagolago i fa'amatalaga meta fa'atupuina e uiga i feso'ota'iga autu mai fafo o lo'o iai i le va o au laulau.
O lea la so'o se fa'aopoopoga o fa'amaumauga o le a otometi lava ona fa'afou le code client. Vaai faalemafaufau mo se faataitaiga:
ALTER TABLE book RENAME COLUMN title TO book_title;
E te mana'o moni e fai fa'alua lenei galuega? E leai se tulaga. Naʻo le tuʻuina atu o le DDL, faʻataʻitaʻi i luga o lau paipa faufale, ma maua le faʻafouina faʻalapotopotoga:
@Entity
@Table(name = "book", indexes = {
// Вы об этом задумывались?
@Index(name = "i_book_title", columnList = "book_title")
})
class Book {
@Id
@GeneratedValue(strategy = IDENTITY)
int id;
@Column("book_title")
String bookTitle;
}
Po'o le vasega fou o le jOOQ. Ole tele ole suiga ole DDL e a'afia ai semantics, ae le na'o le syntax. O le mea lea, e mafai ona aoga le va'ai i le code tu'ufa'atasi e iloa ai po'o le a le code o le a (pe mafai) ona a'afia i lau fa'aopoopoga o fa'amaumauga.
Pau lava le upumoni
E tusa lava po o le a le tekinolosi e te faʻaaogaina, e tasi lava le faʻataʻitaʻiga e na o le pau lea o le puna o le mea moni mo nisi subsystem - pe, i se tulaga maualalo, e tatau ona tatou taumafai mo lenei mea ma aloese mai le fenumiai o pisinisi, lea o loʻo i ai le "upu moni" i soo se mea ma leai se mea i le taimi e tasi . E mafai ona sili atu ona faigofie mea uma. Afai o loʻo e fesuiaʻi faila XML ma se isi faiga, faʻaaoga XSD. Va'ai ile INFORMATION_SCHEMA meta-model mai le jOOQ ile XML fomu: https://www.jooq.org/xsd/jooq-meta-3.10.0.xsd
XSD e malamalama lelei
O le XSD e fa'amaonia lelei le anotusi XML ma fa'atagaina le fa'amaonia i gagana uma a tagata o tausia
XSD e lelei fa'aliliuga ma ua fa'asolo i tua le fetaui
XSD e mafai ona faaliliuina i le Java code e faaaoga XJC
O le manatu mulimuli e taua. Pe a fesoʻotaʻi ma se faiga i fafo e faʻaaoga ai feʻau XML, matou te mananaʻo ia mautinoa o matou feʻau e aoga. E faigofie tele lenei mea e faʻaaoga ai le JAXB, XJC ma le XSD. O se mea valea tele le mafaufau e faapea, faatasi ai ma se faiga "Java muamua" lea tatou te faia ai a tatou savali e pei o mea Java, e mafai ona faʻapipiʻi faʻatasi i le XML ma lafo atu i se isi faiga mo le taumafaina. XML fa'atupuina i lenei auala o le a matua le lelei, leai ni fa'amaumauga, ma faigata ona atia'e. Afai e i ai se maliliega tulaga o auaunaga (SLA) mo sea atinaʻe, matou te vave faʻafefe.
O le mea moni, o le mea lea e tupu i taimi uma i le JSON API, ae o le isi tala, o le a ou misa i le isi taimi ...
Fa'amaumauga: e tutusa lava
A e galue ma faʻamaumauga, e te iloa e tutusa uma i latou. O le fa'avae e ona ana fa'amaumauga ma e tatau ona pulea le polokalame. So'o se suiga e faia i le schema e tatau ona fa'atino sa'o i le DDL ina ia fa'afouina le puna e tasi o le mea moni.
A o'o mai se fa'afouga fa'apogai, e tatau i tagata fa'atau uma ona fa'afouina a latou kopi o le fa'ata'ita'iga. O nisi tagata e mafai ona tusia i Java e faʻaaoga ai le jOOQ ma le Hibernate poʻo le JDBC (poʻo mea uma e lua). O isi tagata fa'atau e mafai ona tusia i Perl (matou te moomoo ia latou manuia), ae o isi e mafai ona tusia i le C #. Leai se mea o iai. O le faʻataʻitaʻiga autu o loʻo i totonu o faʻamaumauga. O fa'ata'ita'iga e fa'aaogaina e fa'aaoga ai ORM e masani lava e le lelei, e le lelei fa'amaumauga, ma e faigata ona atia'e.
O lea aua le faia ni mea sese. Aua le faia ni mea sese mai le amataga. Galue mai le database. Fausia se paipa faʻapipiʻi e mafai ona otometi. Fa'aagavaa code generators e fa'afaigofie ona kopi lau fa'ata'ita'iga fa'amaumauga ma lafo i luga o tagata fa'atau. Ma taofi le popole e uiga i code generators. E lelei i latou. Faatasi ai ma i latou o le a sili atu lou manuia. E tatau lava ona e faʻaalu sina taimi e faʻatutuina ai mai le amataga - ona faʻatali ai lea o tausaga o le faʻatupulaia o le gaosiga o loʻo faʻatali mo oe, lea o le a faia ai le talaʻaga o lau poloketi.
Aua e te faafetai mai ia te au, mulimuli ane.
Faamalamalamaga
Ina ia manino: O lenei tusiga e leai se auala e fautuaina ai e te manaʻomia le punou o le faiga atoa (ie, domain, business logic, etc., etc.) e fetaui ma lau faʻataʻitaʻiga faʻamaumauga. O le mea o loʻo ou fai atu ai i lenei tusiga o le code client lea e fegalegaleai ma le database e tatau ona galue i luga o le faʻavae o le faʻataʻitaʻiga faʻamaumauga, ina ia le toe faʻaaogaina e ia lava le faʻataʻitaʻiga faʻamaumauga i se tulaga "vasega muamua". E masani lava ona maua lea fa'atatau i le fa'asologa o fa'amatalaga avanoa i lau kalani.
I fausaga e lua-tulaga, lea o loʻo faʻasaoina pea i nisi o nofoaga, o sea faʻataʻitaʻiga faiga atonu e naʻo le tasi e mafai. Ae ui i lea, i le tele o faiga e foliga mai ia te aʻu o le faʻaogaina o faʻamatalaga o se "subsystem" e faʻapipiʻi ai le faʻataʻitaʻiga o faʻamaumauga.
Tuusaunoaga
E i ai tuusaunoaga i tulafono uma, ma ua uma ona ou fai atu o le database-muamua ma le source-code generation approach e mafai i nisi taimi ona le talafeagai. O nisi nei o tuusaunoaga (atonu e iai isi):
Pe a le iloa le polokalame ma e manaʻomia ona suʻeina. Mo se faʻataʻitaʻiga, o oe o le tuʻuina atu o se meafaigaluega e fesoasoani i tagata faʻaoga e faʻatautaia soʻo se ata. Uh. E leai se code generation iinei. Ae ui i lea, o le database e sau muamua.
Pe a tatau ona faia se taamilosaga i luga o le lele e foia ai se faafitauli. O lenei faʻataʻitaʻiga e foliga mai o se faʻataʻitaʻiga laʻititi o le mamanu taua uiga fa'aletino, o lona uiga, e le o iai sau fuafuaga manino manino. I lenei tulaga, e masani ona e le mautinoa o se RDBMS e fetaui ma oe.
O tuusaunoaga e masani lava ona tulaga ese. I le tele o tulaga e aofia ai le faʻaaogaina o se RDBMS, o le polokalame e iloa muamua, o loʻo nofo i totonu o le RDBMS ma e na o le pau lea o le puna o le "upu moni", ma e tatau i tagata faʻatau uma ona maua ni kopi e maua mai ai. O le mea lelei, e tatau ona e faʻaogaina se faʻailoga code generator.