Podcast: Záznam z přednášky iBatis SqlMaps
Tento týden proběhla na Univerzitě v Hradci Králové přednáška na téma iBatis SqlMaps. V přednášce jsem se snažil projít všemi základními funkcionalitami iBatisu a porovnat jej krátce s několika dalšími přístupy k implementaci datové vrstvy (plain JDBC, JPA / Hibernate) a podívat se co nového nás čeká v nové verzi iBatis číslo 3.
Kvůli omezenému rozsahu (1,5 hodiny) nemohlo dojít na trošku sofistikovanější záležitosti jako je použití diskrimintárů a resultObjectFactory, integrace se Springem, dávkovému zpracování dotazů do databáze a použití iBatoru. Pokud byste měl kdokoliv nějaké otázky týkající se těchto oblastí, neváhejte je napsat do komentářů k tomuto postu, a já se je pokusím zodpovědět a popřípadě publikovat i další příklady.
Pozn.: po poslechu se mi zdá, že kvalita záznamu je výborná … jen se mi ke konci už trochu pletl jazyk, takže při jedné odpovědi na dotaz v závěru přednášky jsem odpověď uvedl tím, že Hibernate umí využít jak stránkování databáze, tak JDBC způsob pro skip záznamů … samozřejmě jsem mluvil o iBatisu. Doufám, že se Vám bude přednáška líbit.
Použitá hudba: Minstrel Spirit – Enter The Woods, Gabriella (http://magnatune.com) publikováno pod Creative Commons License
Podcast [84:39] 22,4 MB

Slidy prezentace ve formátu MS PowerPoint
Licence: Creative Commons


03.05.2009 v 10:41
Dobra prace
Diky.
-happy
03.05.2009 v 10:52
Dobrá přednáška… bude někdy nějaký pokračování? třeba rozšíření informací co tam právě nebyly řečeni integrace se springem atd? Nebo přednáška věnovaná Hibernate?
03.05.2009 v 13:39
No o Hibernatu se asi neodvážím moc hovořit – v této oblasti bych řekl nemám dost znalostí ani zkušeností. Radši přednáším o věcech, ve kterých mám alespoň 1-2 roky praxi, abych mohl říct i o praktických zkušenostech a dopadech.
Pokračování neplánuji – možná až vyjde iBatis 3, mohl bych nějakým způsobem provést update, protože tento release vypadá opravdu zajímavě.
Pokud byste měl nějaký konkrétní dotaz k těm věcem co jsem vynechal, stačí napsat a já se pokusím odpovědět.
03.06.2009 v 13:33
Super přednáška. Potvrzuji, že učící křivka se počítá na hodiny. Používal jsem iBatis ve spojení se springem, který také řídil transakce a nezaznamenal jsem jediný problém. Jako náhrada JdbcTemplate je ideální.
03.09.2009 v 15:30
Ahoj Honzo, díky za přednášku. Mám dotaz, jakou má výhodu syntaxe $parameter$ oproti #parameter#. Jinými slovy zda se dá obecně říct “Vždy používejte syntaxy #parameter# a nikdy $parameter$, abyste neriskovali SQL injection?”.
Btw. Ten powerpoint je příjemně přehledný, tuším, že to dalo dost práce.
Jety
03.09.2009 v 17:40
No ten #parameter# je vždy bezpečný – jenomže ho nemůžeš použít na všech místech v tom SQL – pokud potřebuješ napsat dynamickou ORDER BY klauzuli, tak se bez $parameter$ neobejdeš. Skutečně si to stačí v hlavě představit, jak to bude přeložené do toho JDBC zápisu. Tzn. k výše uvedenému zápisu – není možné zapsat SQL:
select * from TABULKA order by ? ?
To by JDBC zařvalo – to akceptuje parametry jen skutečně na místech, které jsou pro parametry platné (tzn. např where podmínky “where sloupec = ?” apod.).
Pro ty dolarové zápisy je teda dobré to dělat tak, že pokud ti jde parametr z url, tak si při přípravě vstupů do mapované query iBatisu uděláš:
if (“asc”.equalsIgnoreCase(urlParameter)) {
iBAtisParameters.put(“type”, “asc”));
} else {
iBAtisParameters.put(“type”, “desc”));
}
Je to sice trošku víc psaní, ale jednodušeji to podle mého nejde, aniž by ses nevystavil SQL Injection. Na druhou stranu, tohle by asi iBatis nemohl dost dobře suplovat.
03.10.2009 v 12:40
Ty ajaxový SNAPSHOTY jsou odporný, jak to vypnout? Furt se mi to tady objevuje.
Pěkná přednáška.
03.10.2009 v 13:11
Vypnul jsem je. Kdysi se mi zdály jako dobrej nápad, ale už se mi taky moc nepozdávají – tvůj komentář byla poslední kapka
03.11.2009 v 8:30
P.S.: Jeste k tomu ## a $$ je dobre podotknout ze nejenom SQL Injection to resi. Resi to taky kompilaci SQL dotazu a delku logu. Kdyz totiz rvete hodnoty primo do SQL musi serve pokazde znovu kompilovat dotaz a pokazde si o nem udela zapis do logu, kdezto kdyz pouzijete ?, tak ke kompilaci dojde (v idealnim pripade) jenom jednou a i logu se tim hodne ulevi.
03.11.2009 v 12:25
Dobře udělané a informativní. Díky.
10.06.2009 v 6:38
Na Slidu 18 je v Mapperu toto:
Nepodařilo se mi nikde najít zmíňku o tom, že je toto podporováno (ani ve verzi 3 beta), dokonce ani v doctypu parameters není. I když bylo by to krásně a je to to poslední, co mi v iBatisu chybí, abych ho mohl začít používat.
Na podobné téma jsem se ptal v konferenci:
http://www.mail-archive.com/user-java@ibatis.apache.org/msg14807.html
10.06.2009 v 6:56
Napsal jsem na to Issue:
http://issues.apache.org/jira/browse/IBATIS-669
Dále není pravda, že anotace jsou plnohodnotné XML, rozhodně nejsou.
10.06.2009 v 12:48
Ahoj Tomáši, tahle přednáška vznikla ještě v době, kdy o iBatisu 3 toho ještě moc známo nebylo. Vycházel jsem především z Whitepaperu, který byl na téma iBatis 3 zpracován. Na blogu mám teď dva daleko aktuálnější články o třetí verzi iBatisu:
http://blog.novoj.net/2009/08/16/ibatis-30-preview-cast-prvni/
http://blog.novoj.net/2009/08/23/ibatis-30-preview-cast-druha/
V XML konfiguraci pak zcela běžně používají pojmenovaných parametrů víc. Pročítal jsem mail thread a vidím problémy s anotacemi. V Javě se v reflexi bohužel nedají číst názvy parametrů metody – tj. iBatis nemá z čeho zjistit názvy parametrů, které jsou následně v anotaci používány. Proto zatím umožňují pouze jeden parametr. Jediné dvě možné řešení je tvorba extra anotace, nebo používání indexů – a to ani jedno není moc komfortní. Dalším možností by bylo použít knihovnu Paranamer (http://paranamer.codehaus.org/) od Codehausu, ale ani ta není 100% – má například problémy s interfacy. Uvidíme, jak si s issue poradí Clinton Begin.
Co se týká toho, že anotace plnohodnotně pokrývají možnosti XML – vycházím z toho, co o tom tvrdí autoři. Pokud to není plnohodnotné, mělo by se to tomu blížit.
Nicméně máš pravdu, co se týká 3tí verze, mám zatím limitované vědomosti.