bloggers bloggers

Marco Napolitano
Messaggi: 79
Stelle: 0
Data: 17/02/22
Jader Jed Francia
Messaggi: 63
Stelle: 0
Data: 18/02/21
Paolo Gambetti
Messaggi: 2
Stelle: 0
Data: 11/11/19
Katia Pazzi
Messaggi: 1
Stelle: 0
Data: 27/06/19
Ezio Lombardi
Messaggi: 11
Stelle: 0
Data: 10/04/18
Chiara Mambretti
Messaggi: 25
Stelle: 0
Data: 27/02/17
Serena Traversi
Messaggi: 3
Stelle: 0
Data: 21/07/16
Francesco Falanga
Messaggi: 8
Stelle: 0
Data: 14/06/16
Antonio Musarra
Messaggi: 2
Stelle: 0
Data: 18/11/13
Simone Celli Marchi
Messaggi: 6
Stelle: 0
Data: 09/07/13
Indietro

Query dinamiche con Mybatis

Recentemente mi è capitato di dover realizzare una query estremamente "dinamica" con Mybatis: in pratica, oltre ai normali parametri (gestiti egregiamente dal framework) avevo la necessità di modificare anche il nome della tabella, cosa che un normale PreparedStatement non è in grado di fare.

Grazie ad un'opportuna sintassi, Mybatis è invece in grado di gestire questa casistica; in particolare la query risultante è stata la seguente:

<delete id="deleteByParameters" parameterType="java.util.Map">
delete from ${tableName}
where ${tableKey} = #{primaryKey,jdbcType=BIGINT}
</delete>

Come si può notare, anzichè la classica sintassi usata per definire i parametri (ossia #{...}) è possibile definire dei placeholder in qualunque punto della query sostituendo al # il $.

Ecco quindi che ${tableName} viene correttamente sostituito dal framework prima dell'esecuzione.

Per completezza questo è il codice Java di esempio che prepara la query:

Map<String, Object> params = new HashMap<String, Object>();
params.put("tableName", "nome_tabella");
params.put("tableKey", "nome_campo");
params.put("primaryKey", "valore_campo");

SqlSession session = new SqlSessionFactoryBuilder().build(...).openSession();

session.delete("deleteByParameters", params);

session.commit();

session.close();

Enjoy!

Precedente
Commenti
Nessun commento. Vuoi essere il primo.