Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    Mybatis e query con LIKE

    ciao!

    ho un problema con le query e il LIKE in Mybatis.
    in sostanza:
    codice:
    <select id="getByLike" resultMap="ClienteMap">
        <bind name="pattern" value="'%' + 1003 + '%'"/>
        SELECT * FROM clienti
        WHERE cliente_codice LIKE #{pattern}
        ORDER BY cliente_codice
    </select>

    questo funziona, ma il valore da ricercare l'ho messo fisso nel codice.
    invece lo dovrei passare in maniera dinamica.
    solo che non riesco a capire cosa devo mettere nel parametro value (o in generale come dovrei fare).

    questo il metodo getByLike:
    codice:
    public List<Cliente> getByLike(int codice) {
        try (SqlSession sqlSession = MyBatisUtils.getSqlSessionFactory().openSession()) {
            ClienteMapper mapper = sqlSession.getMapper(ClienteMapper.class);
            return mapper.getByLike(codice);
        }
    }

    come dovrei fare??

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da fermat Visualizza il messaggio
    ho un problema con le query e il LIKE in Mybatis.
    come dovrei fare??
    Presupponento che nella interfaccia ClienteMapper hai messo il metodo:

    List<Cliente> getByLike(String codice);

    allora presupponendo MySQL (dal tuo post precedente), nel XML del mapper:

    codice:
    <select id="getByLike" resultMap="ClienteMap">
        SELECT * FROM clienti
        WHERE cliente_codice LIKE CONCAT('%', #{codice}, '%')
        ORDER BY cliente_codice
    </select>

    NOTE:
    1) il nome del parametro nel metodo della interfaccia (codice), NON deve per forza essere uguale al nome nella espressione #{codice}. Nel XML potresti mettere es. #{codiceLike} o #{ricerca}. Se c'è un solo parametro, quello che metti in #{ ...... } è indifferente.

    2) Il CONCAT è per il MySQL, che non ha operatori + o || per la concatenazione delle stringhe.
    Ultima modifica di andbin; 27-03-2018 a 18:35
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    si scusa, ho dato per scontato il db in uso.
    che come hai già capito è mariadb / mysql.

    e si, nell'interfaccia c'è il metodo in questione:
    codice:
    public interface ClienteMapper {
        public Cliente getByCodice(int codice);
    
        public List<Cliente> getByLike(int codice/*, String ragSoc*/);
    
    }

    detto ciò, il tuo codice ha funzionato alla perfezione.
    tra le tonnellate di esempi visti, non ce ne era uno che usasse il CONCAT (e che soprattutto funzionasse).
    grazie!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.