9 komentáře “Podcast: Záznam z přednášky iBatis SqlMaps

  1. 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.

  2. 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.

  3. 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 😉

  4. Ty ajaxový SNAPSHOTY jsou odporný, jak to vypnout? Furt se mi to tady objevuje.

    Pěkná přednáška.

  5. 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.

  6. 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

  7. 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í.

  8. 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.

  9. 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?