FG Forrest, a.s. Jan Novotný iBatis SqlMaps
iBatis - ORM / DataMapper iBatis Mapování objektů na SQL Klady minimalizace rutinní práce s JDBC kontrola / flexibilita jednoduchost rychlý setup odpadá správa zdrojů cachování jednoduché navázání na existující DB stačí znalost SQL Zápory zůstává stále nějaká rutinní práce závisí na použité DB náročnější údržba 2 JDBC 3.0 Žádné mapování Klady maximální výkon maximální kontrola / flexibilita jednoduchost rychlý setup jednoduché navázání na existující DB stačí znalost SQL Zápory minimální produktivita nutnost překopírovávání parametrů do Statementu nutnost překopírovávání dat z ResultSetu do POJO nutnost správy zdrojů závisí na použité DB žádná cache velmi problémová údržba JPA / Hibernate Mapování objektů na tabulky Klady zakrytí způsobu práce s relačními daty (není přímo nutné ovládat SQL) vysoká produktivita přenositelnost velmi efektivní generování relačního modelu z OO efektivní cache relativně jednoduchá údržba (refactoring) Zápory ztráta přímé kontroly velmi složitý nutná znalost HQL problematické použití při komplikovaných dotazech problémy s dávkovým zpracováním problematické navázání na existující DB díky komplexitě přináší řadu náročných problémů k řešení
Princip fungování 3 podpora základních typů přístupu k DataSource Simple – vlastní jednoduchá implementace DB poolingu DBCP – Jakarta Database Connection Pool JNDI – získání DataSource objektu z JNDI podpora transakcí JDBC – connection commit() / rollback() JTA – přístup k UserTransaction objektu via JNDI External – iBatis neprovede commit / rollback – zajištění tohoto je na vlastní aplikaci podpora základních typů přístupu k DataSource Simple – vlastní jednoduchá implementace DB poolingu DBCP – Jakarta Database Connection Pool JNDI – získání DataSource objektu z JNDI podpora transakcí JDBC – connection commit() / rollback() JTA – přístup k UserTransaction objektu via JNDI External – iBatis neprovede commit / rollback – zajištění tohoto je na vlastní aplikaci
Dotazování 4
ResultMap – mapování výstupu na objekty 5
Diskriminátory 6
Manipulace s daty 7 SqlMap.xml Dao.java
Parameter map – mapování objektů na statementy 8
Manipulace s daty – automaticky generované klíče 1. typ – pregenerované klíče (Oracle, …) 2. typ – postgenerované klíče (MySQL, MS SQL, …) 9
Problematika 1 + N dotazů 10
Problematika 1 + N dotazů – inner join 11 obvykle nejlepší z řešení pokud víme, že budeme u každého produktu přistupovat ke kategorii sloupce pro join jsou oindexované je velké množství kategorií respektive produktů (nevyplatí se cachovat kategorie podle id) vazba 1:1 vazba 1:N
Problematika 1 + N dotazů – cache / lazy subselect 12 vazba 1:N !!! cglib-full-2-0-rc2.jar !!! vazba 1:1
Dynamické dotazy 13
Dávkové zpracování 14 vždy musí být uvnitř explicitní transakce vždy se vztahuje pouze na statementy stejného druhu, vložení odlišného statementu vykoná dávku a započne dávku novou pozor na rozsáhlé transakce (ideální je provádět commit po určitém počtu statementů) commit transakce implicitně provádí executeBatch(), pokud tento nebyl dosud zavolán executeBatch() vrátí počet aktualizovaných řádků, nicméně to nemusí být se všemi JDBC ovladači pravda
Cache ReadOnly vs. Read/Write = pro všechny uživatele vs. pro session Read/Write + serializable = vyšší výkon, protože objekty jsou cachované pro všechny uživatele, ale konkrétní instance, se kterými pracujeme jsou deserializované kopie 15
Spring Framework - integrace prvotřídní podpora pro iBatis využívá DataSource bean definované v aplikačním kontextu participuje na transakcích spravovaných Springem Spring zajišťuje překlad checkovaných vyjímek SqlException na necheckované DataAccessException 16
iBator generátor kódu pro iBatis z existující relační struktury: vygeneruje kód POJO class SqlMap.xml obsahující CRUD dotazy DAO interface a implementaci (podpora pro Spring variantu) může být použit jednorázově na začátku projektu opakovaně i v rámci build cyklu Podporované use-case Command-line Ant Java API 17
iBatis v. 3.0 – na spadnutí Interface binding generátor DAO tříd Víceúrovňová konfigurace konvence anotace (překrývá konvenci) XML (překrývá anotace i konvenci) Java API (překrývá vše) Zjednodušená konfigurace cache Možnost tvorby dynamických SQL dotazů Java kódem Kdy? Dle dostupných informací 2Q
19 Užitečné odkazy (iBatis homepage) (iBator) (Myšlenky dne Otce Fura) (Web společnosti FG Forrest - články)