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.

Talanoaga manaia i reddit i vaega /r/java и /r/polokalame.

Fausia tulafono

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)) {
    // ...
}

O le code e fa'atupuina a le lima i fafo o le fa'apotopotoga, po'o le lima i fa'apotopotoga ta'itasi. Mo se faʻataʻitaʻiga, e mafai ona mulimuli mai sea faʻafouina pe a maeʻa Flyway database migration, lea e mafai foi ona fai ma le lima pe otometi.

Fa'atupu tulafono fa'apogai

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.

E tele naua code generators. Faataitaiga, E mafai e le XJC ona fa'atupu le Java code e fa'atatau i faila XSD po'o WSDL. E tutusa lava le mataupu faavae:

  • 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:

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
Uluai, Alan O'Rourke, Fa'aputuga Fa'alogo

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.

puna: www.habr.com

Faaopoopo i ai se faamatalaga