Creato da pastuweb.com
Share My Page
My Social Accounts
Account FaceBook Account LinkedIn Account Twitter Account Google Plus Account Git Hub

In questo esempio mostro come utilizzare Spring per utilizzare JDBC per interrogare un database MySQL.

Come prima cosa bisogna creare il database: appunti e le tabelle: autori, siti, notes.

Consiglio di usare PhpMyAdmin per la gestione e l'import di codice .sql e WAMP per l'uso del Web Server locale di Apache.

Qui potete scaricare l'import delle tabelle vuote del database appunti. (prima di fare l'import, create il database "appunti")
Esempio Spring JDBC
 
Come vedete qui a fianco vengono creati diversi package all'interno di src:
  • appuntivari.spring.jdbc.dto: contiene i DTO, cioè le classi che mappano le tabelle sul database.
  • appuntivari.spring.jdbc.service: contiene il service vero e proprio, più l'interfaccia dei metodi che vengono gestiti e implementati e che vanno a interrogare il database.
  • appuntivari.spring.jdbc.test: contiene delle classi con il main implementato, sono delle semplici classi di test.

Poi cè la cartella config, che contiene il file di configurazione di Spring (context.xml), in questo file vengono definiti i beans usati dai main delle classi di test e anche il bean per l'utilizzo del driver JDBC.

 
I JAR usati sono quelli per l'suo di Spring più quelli per il connector MySQL di Java. Potete scaricare i JAR a questo link.
 
 
 
 
 
 
 
 
 
 
Classi Java di supporto al recupero dei dati dal database
 
Autori.java
 
package appuntivari.spring.jdbc.dto;
 
public class Autori {
 
private Integer id_autore;
private String nome;
private String cognome;
private Integer id_sito;
 
public Integer getId_autore() {
return id_autore;
}
public void setId_autore(Integer id_autore) {
this.id_autore = id_autore;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getCognome() {
return cognome;
}
public void setCognome(String cognome) {
this.cognome = cognome;
}
public Integer getId_sito() {
return id_sito;
}
public void setId_sito(Integer id_sito) {
this.id_sito = id_sito;
}
 
}
 
Notes.java
 
package appuntivari.spring.jdbc.dto;
 
public class Notes {
 
private Integer id_note;
private String note;
private Integer id_autore;
 
public Integer getId_note() {
return id_note;
}
public void setId_note(Integer id_note) {
this.id_note = id_note;
}
public String getNote() {
return note;
}
public void setNote(String note) {
this.note = note;
}
public Integer getId_autore() {
return id_autore;
}
public void setId_autore(Integer id_autore) {
this.id_autore = id_autore;
}
 
}
 
Siti.java
 
package appuntivari.spring.jdbc.dto;
 
public class Siti {
 
private Integer id_sito;
private String dominio;
private String tipologia;
 
public Integer getId_sito() {
return id_sito;
}
public void setId_sito(Integer id_sito) {
this.id_sito = id_sito;
}
public String getDominio() {
return dominio;
}
public void setDominio(String dominio) {
this.dominio = dominio;
}
public String getTipologia() {
return tipologia;
}
public void setTipologia(String tipologia) {
this.tipologia = tipologia;
}
 
}
 
Interfacce
InterfaceAutori.java
 
package appuntivari.spring.jdbc.service;
 
import java.util.List;
 
import appuntivari.spring.jdbc.dto.Autori;
 
public interface InterfaceAutori {
 
public List<Autori> getElencoAutori();
public void insertNuovoAutore(Autori autore);
 
}
 
InterfaceNotes.java
 
package appuntivari.spring.jdbc.service;
 
import java.util.List;
 
import appuntivari.spring.jdbc.dto.Notes;
 
public interface InterfaceNotes {
 
public List<Notes> getElencoNotes();
public List<Notes> getElencoNotesByChiave(String chiave);
public List<Object[]> getElencoNotesByAutore(String nomeAutore);
public List<Object[]> getElencoNoteWithJoins();
public void insertNuovaNota(Notes nota);
 
}
 
Service (parte implementativa dei metodi di accesso ai dati del database)
 
Service.java
 
package appuntivari.spring.jdbc.service;
 
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
 
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
 
import appuntivari.spring.jdbc.dto.Autori;
import appuntivari.spring.jdbc.dto.Notes;
 
public class Service implements InterfaceNotes, InterfaceAutori {
 
public static Log log = LogFactory.getLog("Service");
 
private JdbcTemplate jdbcTemplate;
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
 
/* Interfaccia Notes */
 
@SuppressWarnings("unchecked")
public List<Notes> getElencoNotes() {
 
List<Notes> listaNotes = jdbcTemplate.query(
"SELECT * FROM notes", 
new RowMapper(){
public Object mapRow(ResultSet rs, int arg1) 
throws SQLException {
Notes nota = new Notes();
nota.setId_note(rs.getInt("id_note"));
nota.setNote(rs.getString("note"));
nota.setId_autore(rs.getInt("id_autore"));
return nota;
}
});
 
return listaNotes;
 
}
 
@SuppressWarnings("unchecked")
public List<Notes> getElencoNotesByChiave(String chiave){
List<Notes> listaNotesByKey = jdbcTemplate.query(
"SELECT * FROM notes WHERE note LIKE ?", new Object[]{ new String("%"+chiave+"%")}, 
new RowMapper(){
public Object mapRow(ResultSet rs, int arg1) 
throws SQLException {
Notes nota = new Notes();
nota.setId_note(rs.getInt("id_note"));
nota.setNote(rs.getString("note"));
nota.setId_autore(rs.getInt("id_autore"));
return nota;
}
});
return listaNotesByKey;
}
 
@SuppressWarnings("unchecked")
public List<Object[]> getElencoNotesByAutore(String nomeAutore){
List<Object[]> listaNotesByNomeAutore = jdbcTemplate.query(
"SELECT note, nome, cognome FROM notes, autori WHERE notes.id_autore=autori.id_autore and nome LIKE ?",
new Object[]{ new String("%"+nomeAutore+"%")}, 
new RowMapper(){
public Object mapRow(ResultSet rs, int arg1) 
throws SQLException {
Object[] nota = new Object[3];
nota[0] = rs.getString("note");
nota[1] = rs.getString("nome");
nota[2] = rs.getString("cognome");
return nota;
}
});
return listaNotesByNomeAutore;
}
 
@SuppressWarnings("unchecked")
public List<Object[]> getElencoNoteWithJoins(){
List<Object[]> listaNotesWithJoins = jdbcTemplate.query(
"SELECT note, nome, cognome, dominio FROM notes, autori, siti WHERE notes.id_autore=autori.id_autore " +
" and autori.id_sito=siti.id_sito ", 
new RowMapper(){
public Object mapRow(ResultSet rs, int arg1) 
throws SQLException {
Object[] nota = new Object[4];
nota[0] = rs.getString("note");
nota[1] = rs.getString("nome");
nota[2] = rs.getString("cognome");
nota[3] = rs.getString("dominio");
return nota;
}
});
return listaNotesWithJoins;
}
 
 
public void insertNuovaNota(Notes nota){
jdbcTemplate.update("INSERT INTO Notes(note,id_autore) VALUES(?,?) ",
new Object[]{nota.getNote(),nota.getId_autore()}); 
log.info("Nuova NOTA inserita");
}
 
 
/* Interfaccia Autori */
 
 
@SuppressWarnings("unchecked")
public List<Autori> getElencoAutori(){
 
List<Autori> listaAutori = jdbcTemplate.query(
"SELECT id_autore, nome, cognome FROM autori", 
new RowMapper(){
public Object mapRow(ResultSet rs, int arg1) 
throws SQLException {
Autori autore = new Autori();
autore.setId_autore(rs.getInt("id_autore"));
autore.setNome(rs.getString("nome"));
autore.setCognome(rs.getString("cognome"));
return autore;
}
});
 
return listaAutori;
}
public void insertNuovoAutore(Autori autore){
jdbcTemplate.update("INSERT INTO Autori(nome,cognome,id_sito) VALUES(?,?,?) ",
new Object[]{autore.getNome(),autore.getCognome(), autore.getId_sito()}); 
log.info("Nuovo AUTORE inserito");
}
 
}
 
Configurazione Spring: context.xml
<?xml version="1.0"?>
 
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
 
<!-- Beans per collegarsi e usare MySQL -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost/appunti"/>
<property name="username" value="root"/>
<property name="password" value=""/>
</bean>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource" />
</bean>
 
 
<!-- Bean Service -->
<bean id="beanService" class="appuntivari.spring.jdbc.service.Service">
<property name="jdbcTemplate" ref="jdbcTemplate" />
</bean>
 
<!-- Beans inizializza autore -  nome=Guest, cognome=Guest -->
<bean id="beanAutoreGuest" class="appuntivari.spring.jdbc.dto.Autori">
<property name="nome" value="Guest" />
<property name="cognome" value="Guest" />
</bean>
 
<!-- Beans inizializza nota -->
<bean id="beanNuovaNota" class="appuntivari.spring.jdbc.dto.Notes">
<property name="note" value="nota creata con Spring" />
<property name="id_autore" value="1" />
</bean>
 
<!-- Beans inizializza autore  -->
<bean id="beanNuovoAutore" class="appuntivari.spring.jdbc.dto.Autori">
<property name="nome" value="FraBean" />
<property name="cognome" value="PastuBean" />
<property name="id_sito" value="1" />
</bean>
 
 
</beans>
 
Adesso vediamo alcuni TEST sull'uso del Service e dei Bean di Spring definiti sopra
Test per inserire nel database una NUOVA NOTA e un NUOVO AUTORE inizializzati all'interno del context.xml
 
public static void main(String[] args) {
 
AbstractApplicationContext ctx = new ClassPathXmlApplicationContext(
new String[]{
"context.xml"
});
 
Service service = (Service)
ctx.getBean("beanService"); //recupero il Bean che usa la classe Service
 
 
/*Inserisco nel DB una NOTA inizializzata dal Bean di Spring */
Notes nuovaNota = (Notes)
ctx.getBean("beanNuovaNota");
service.insertNuovaNota(nuovaNota);
 
/*Inserisco nel DB un AUTORE inizializzato dal Bean di Spring */
Autori nuovoAutore = (Autori)
ctx.getBean("beanNuovoAutore");
service.insertNuovoAutore(nuovoAutore);
}
 
Test per visualizzare il contentuto di un AUTORinizializzato all'interno del context.xml
 
public static void main(String[] args) {
 
AbstractApplicationContext ctx = new ClassPathXmlApplicationContext(
new String[]{
"context.xml"
});
 
 
/*Visualizzo Autore inizializzato dal Bean di Spring*/
Autori guest = (Autori)
ctx.getBean("beanAutoreGuest");
 
log.info("Nome = "+guest.getNome());
log.info("Cognome = "+guest.getCognome());
 
}
 
Test di SELECT sul database usando il bean "beanService" di Spring
 
public static void main(String[] args) {
 
AbstractApplicationContext ctx = new ClassPathXmlApplicationContext(
new String[]{
"context.xml"
});
 
Service service = (Service)
ctx.getBean("beanService"); //recupero il Bean che usa la classe Service
 
List<Notes> elenco = service.getElencoNotes();
log.info("\n\n\n##### Elenco delle Note:");
for (int i = 0; i < elenco.size(); i++) {
log.info("nota: "+elenco.get(i).getNote());
}
 
log.info("\n\n");
 
List<Notes> elencoFiltrato = service.getElencoNotesByChiave("JDBC");
log.info("\n\n\n##### Elenco delle Note per chiave 'JDBC':");
for (int i = 0; i < elencoFiltrato.size(); i++) {
log.info("nota: "+elencoFiltrato.get(i).getNote());
}
 
log.info("\n\n");
 
List<Object[]> elencoFiltratoNome = service.getElencoNotesByAutore("Fra");
log.info("\n\n\n##### Elenco delle Note per autore 'Fra':");
for(Object[] obj : elencoFiltratoNome){
log.info("nota: "+obj[0].toString());
log.info("--nome: "+obj[1].toString());
log.info("--cognome: "+obj[2].toString());
}
 
log.info("\n\n");
 
List<Object[]> elencoInfoImportanti = service.getElencoNoteWithJoins();
log.info("\n\n\n##### Elenco di tutte le Note (info importanti):");
for(Object[] obj : elencoInfoImportanti){
log.info("nota: "+obj[0].toString());
log.info("--nome: "+obj[1].toString());
log.info("--cognome: "+obj[2].toString());
log.info("--dominio: "+obj[3].toString());
 
}
 
List<Autori> elencoAutori = service.getElencoAutori();
log.info("\n\n\n##### Elenco degli Autori:");
for (int i = 0; i < elencoAutori.size(); i++) {
log.info("nome: "+elencoAutori.get(i).getNome());
log.info("cognome: "+elencoAutori.get(i).getCognome());
}
 
}
 
You can find this project on my GitHub Repository at this repository URL: https://github.com/pastuweb/java-spring-examples/tree/master/EsempioSpringJDBC