O biblioteca usoara, rapida si simpla de mapare a datelor din Kotlin, care ajuta la maparea rezultatului interogarilor din setul de date normalizat (din RDBMS, SQLite, CSV sau orice sursa) inapoi in harti Hash mapate relationale

ps: Zeko se dovedeste a fi iepure in croata, deci sigla: D

Arata-❤ cu un ★

Pentru utilizare, adaugati-le la pomul dvs. maven pom.xml

<dependency> <groupId> io.zeko </groupId> <artifactId> zeko-data-mapper </artifactId> <version> 1.6.2 </version> </dependency>

Caracteristici

  • Fara fisiere de configurare, fara XML, fara YAML, fara adnotari, usoare, usor de utilizat
  • Pornire si performanta rapide
  • Fara reflectii. Excelent pentru GraalVM si Quarkus

Utilizare de baza

Utilizati aceasta biblioteca pentru a va denormaliza datele dintr-un CSV text simplu, date in memorie, tabele RDBMS etc. In loc sa utilizati un ORM, faceti tot ce aveti nevoie pentru a interoga si recupera datele dvs. normalizate si ati mapat datele inapoi intr-un obiect imbricat relational. care au sens pentru sistemul dvs.

Configurarea relatiei datelor normalizate

Avand o baza de date MySQL cu tabele de utilizator, rol si adresa, unde fiecare utilizator ar trebui sa aiba una sau mai multe adrese si poate avea mai multe roluri. Fiecare rol poate fi atribuit mai multor utilizatori. Deci, rolul utilizatorului este o relatie de la multi la multi (M: M), adresa de utilizator este relatia 1: M

val table = linkedMapOf <String, TableInfo> () table [“user”] = TableInfo (key = “id”) table [“role”] = TableInfo (key = “id”, move_under = “user”, foreign_key = ” user_id “, many_to_many = true) table [” address “] = TableInfo (key =” id “, move_under =” user “, foreign_key =” user_id “, many_to_one = true)

Folosind clasa DataMapper

DataMapper :: map accepta configuratia mapper a tabelelor pe care le foloseste pentru a intelege relatia structurii de date aplatizate. Transmiteti rezultatele interogarii SQL cu numele campurilor (cu numele tabelului ca prefix) pentru a mapa rezultatul. Mai multe exemple pot fi gasite in DataMapperSpec

Exemplu:

val rawResults = ArrayList <LinkedHashMap <String, Any >> () rawResults.add (linkedMapOf (“user-id” la 1, “user-name” la “Leng”, “role-id” la 2, “role-role_name “la” Super Admin “,” role-user_id “la 1, // acesta este selectat ca alias, nu ca camp real in tabel.

inazuma eleven xxx vecinasxxx
tetonas españolas follando sin querer
fire force hentai me follo a mi tia
necrofilia xxx www.maduras.con
orgasmos extremos pajas entre amigos
videos porno corridas incesto asiatico
casadas muy putas se le marca el coño
follando en el parque cartoon xxx
mi madre me folla hermanos rusos follando
sara rossi fakings follando en el parque
fiestas xxx maduras folladas por el culo
videos eroticos italianos abuelasputas
porno iberico folladas en el metro
peliculas eroticas gratis en español se folla a su compañero de piso
shakira follando pornolesvianas
abuelas y nietos xxx concursos nudistas
porno xxxxx videos eroticos italianos
orgias xxx casadas muy putas
coñitos violacion real porno
tetonas gratis videos gay xx

Pentru a fi utilizat cu mapperul” address-id “la 128,” address-user_id “la 1 , „address-street1” to „Some block”, „address-street2” to „in the street”))

Asociati rezultatele brute intr-o structura denormalizata

val mapper = DataMapper () val result = mapper.map (tabele, rezultate brute) val json = Json.encodePrettily (result) println (json)

metoda map () accepta un al treilea argument care este acela de a specifica delimitatorul numelui coloanei, de ex. user-id In mod implicit, foloseste „-”, dar il puteti schimba oricand cand apelati harta ()

mapper.map (tabele, rezultate brute, “-“)

Aceasta va va oferi o lista de utilizatori cu rol si adresa imbricate in campul de rol si adresa al utilizatorului.

[{“id”: 1, “name”: “Leng”, “role”: [{“id”: 2, “user_id”: 1, “role_name”: “super admin”}], “address”: [ {“id”: 1, “user_id”: 1, “street1”: “Jalan 123”, “street2”: “Taman Tun”}, {“id”: 3, “user_id”: 1, “street1″: ” Jalan Bunga “,” street2 “:” Taman Negara “}]}]

Observati ca campul user_id se afla in datele de rol si adresa, care sunt destul de redundante in multe cazuri. Pentru a elimina automat acele campuri conectate din rezultatul mapat, setati lista campurilor din proprietatea de eliminare TableInfo.

val table = linkedMapOf <String, TableInfo> () table [“user”] = TableInfo (key = “id”) table [“role”] = TableInfo (remove = listOf (“user_id”), key = “id”, move_under = “utilizator”, foreign_key = “user_id”, many_to_many = true) table [“address”] = TableInfo (remove = listOf (“user_id”), key = “id”, move_under = “user”, foreign_key = “user_id “, many_to_one = true)

Acest lucru va va oferi un rezultat al

[{“id”: 1, “name”: “Leng”, “role”: [{“id”: 2, “role_name”: “super admin”}], “address”: [{“id”: 1 , “street1”: “Jalan 123”, “street2”: “Taman Tun”}, {“id”: 3, “street1”: “Jalan Bunga”, “street2”: “Taman Negara”}]}]

Utilizati clasa MapperConfig pentru a stabili in mod convenabil relatia fara a afla ordinea datelor imbricate si eliminarea campului redundant. Aceeasi relatie chiar acum poate fi definita ca urmatoarea cu MapperConfig

// id este cheia principala implicita a tuturor tabelelor, deci nu trebuie sa definiti pentru fiecare tabel // true auto elimina campurile legate, cum ar fi user_id aici val tables = MapperConfig (“id”, adevarat) .table (” user “) .table (” rol “). manyToMany (true) .moveUnder (” user “). foreignKey (” user_id “) .table (” address “). manyToOne (true) .moveUnder (” user “). foreignKey (“numele de utilizator”)

Exemplu de utilizare cu interogari Jasync-sql

Pentru schema DB de mai sus, puteti gasi exemplul de utilizare Zeko cu Jasync-sql aici. De asemenea, sunt furnizate structura si datele SQL pentru aplicatia mostra.

Jasync-sql este un port de mauricio / postgresql-async, catre Kotlin.

Exemplu de utilizare cu interogari Vert.x Common-sql

Daca utilizati interfata SQL comuna Vert.x, cum ar fi MySQL async si clientul postgresql care utilizeaza driverul asincron Mauricio Linhares, veti descoperi ca rezultatul returnat este tastat ca Lista de JsonArray

Exemplu de utilizare a Zeko cu rezultate sql comune vertx poate fi gasit aici