esempio hello world Dott. Doria Mauro

Documenti analoghi
Open Source Frameworks

Configurazione di base. Dott. Doria Mauro

Mapping delle collections. Dott. Doria Mauro

Le API per la persistenza. Dott. Doria Mauro

Guida Introduttiva ad Hibernate

Le conversazioni. Dott. Doria Mauro

Mappare il DB senza XML. Introduzione alle annotation di Hibernate3

Modulo 2: Strutture fondamentali della programmazione Java

2011 Politecnico di Torino 1

Domande utili alla preparazione dell orale di Informatica all Esame di Stato

Elena Baralis 2007 Politecnico di Torino 1

I.I.S. G. COSSALI - ORZINUOVI DATABASE. Marzo 2017 Prof. Dario Tomasoni 1

DBMS (Data Base Management System)

PHP E MYSQL CREAZIONE DI UN NUOVO DATABASE DAL PHPMYADMIN

Programmazione Java Struttura di una classe, Costruttore, Riferimento this

Capitolo 5. Soluzione: Soluzione in C:

Come trattare il risultato di un comando SQL (relazioni) che

SQl come DML: Esercitazione

Prova d Esame Compito A

Il sistema informativo deve essere di tipo centralizzato e accessibile mediante un computer server installato nella rete locale dell albergo.

Le transazioni. Dott. Doria Mauro

GESTIONE DEGLI ERRORI

Esercitazione: Interrogazioni SQL

MY SQL Guida MySQL di base

Basi di Dati Esercitazione JDBC. Giugno 2007

Programmazione Java Avanzata PATTERN

The world s most advanced class on PostgreSQL o quasi! 4 Marzo 8 Aprile L'Antipasto 11 Marzo

XML e Windows Phone. Semplice tutorial per l'utilizzo di documenti e dati XML in un'app per Windows Phone.

Easy Driver. Libreria Java con un generatore di codice ad essa associato, che crea le classi necessarie per accedere ad un database relazionale.

MS Access: Tutorial Tabelle, Relazioni

Modelli e strumenti per la generazione automatica di codice

XPATH e XQUERY. Linguaggi di query XML. Esempio di DTD. Esempio di documento. XPATH e un linguaggio per descrivere percorsi (path) in documenti XML.

LABORATORIO di INFORMATICA

Laboratorio Progettazione Web PHP e MySQL. Andrea Marchetti IIT-CNR 2013/2014

ESERCIZIO 1 (12 punti) Dato il seguente schema relazionale, che modella le informazioni relative ad un negozio di libri online:

Laboratorio di Programmazione 1 [Java]

Esempio 2: Subtyping

MODULO 2. Query normali e parametriche Query di:

Non si deve fare ALCUN riferimento alla parte specifica di JDBC.

Spiegazioni esercizio Gestione Tabella con PHP e MySQL

INFORMATICA GRAFICA - FONDAMENTI DI INFORMATICA Ing. Civile - Edile/Architettura Dott. Penzo SOLUZIONE PROVA SCRITTA DEL 16/09/2002.

Basi di Dati: Corso di laboratorio

V. Moriggia Modelli di Base Dati. Modelli di Base Dati. a.a. 2001/

Android. Android01: Introduzione alle Activity.

Istruzioni SQL 1. Query di selezione 2 Istruzione SELECT 2 Istruzione SELECT DISTINCT 2 ORDER BY 3 WHERE 3 La condizione LIKE 4 BETWEEN AND 5

Per poter interagire con un database in rete mediante uno script php bisogna. innanzitutto cerare una connessione. Ciò si ottiene mediante la funzione

Laboratorio di Tecnologie Web Laurea in Scienze e Tecnologie Multimediali

Esempio di database relazionale con l utilizzo del prodotto MySQL

24 - Possibili approfondimenti

Università degli Studi di Bologna Facoltà di Ingegneria. Tecnologie Web L-A A.A Esercitazione 08 DAO e Hibernate

Corso di Laurea Ingegneria Civile Fondamenti di Informatica. Dispensa 07. Oggetti e Java. Marzo Programmazione Java 1

Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, JDBC e applicazioni 31/05/2004

Metodi statici. Dichiarazione e chiamata di metodi statici

Eccezioni ed asserzioni

DBMS ed Applicazioni Motivazioni

Java, Oggetti e Strutture Dati di G. Callegarin - Edizioni CEDAM

SQL e linguaggi di programmazione. Cursori. Cursori. L interazione con l ambiente SQL può avvenire in 3 modi:

Interrogazioni nidificate

Iterazioni. L istruzione while. while (condition) istruzione

IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale

Programmazione Java Variabili membro, Metodi La parola chiave final

Laboratorio Progettazione Web PHP e MySQL - Lezione 9. Andrea Marchetti IIT-CNR andrea.marchetti@iit.cnr.ita 2012/2013

Programmazione Orientata agli Oggetti in Linguaggio Java

Appunti di MySql. Evoluzione di un tutorial di base di mysql, scritto da Etel Sverdlov.

Sommario. Introduzione... 13

ASP e Database. A cura di Michele Cavalieri

Parcheggio.rtf 1/8 6 gennaio Prova di programmazione: parcheggio a pagamento

OO puro. Primi concetti di Java. Tipi primitivi. Ogni cosa è un oggetto. Java è object-oriented puro Non come il C+ + (OO ibrido) Lorenzo Bettini

Progetto CSP: Innovation & Creativity for School. Istituto Tecnico Industriale Statale Giulio Cesare Faccio Vercelli Gruppo 5 ELETTRONICI

ESERCIZIO 1 (12 punti) Dato il seguente schema relazionale, che modella i dati di un sistema di gestione di campionati di basket.

Programmazione Java: Variabili membro, Metodi La parola chiave final

3.3.6 Gli operatori Le funzioni di accesso al tipo Le strutture di controllo Le funzioni

Esercitazione n 1. Obiettivi

JDBC versione base. Le classi/interfacce principali di JDBC

Laboratorio di Programmazione Lezione 2. Cristian Del Fabbro

Servlet & JDBC ALBERTO BELUSSI ANNO ACCADEMICO 2009/2010. Servlet: interazione con un DBMS. In Java è possibile interagire con un DBMS attraverso

2011 Politecnico di Torino 1

Il paradigm mismatch. Dott. Doria Mauro

ibatis SQL Maps Tutorial

SQL. Laboratorio di Progettazione di Basi di Dati (CdS in Informatica e TPS)

Istruzioni DCL di SQL. Pag. 119 par.5

Programmazione. Cognome... Nome... Matricola... Prova scritta del 11 luglio 2014

Le basi del linguaggio Java

Un contatore di accessi

Basi di Dati: Corso di laboratorio

Il linguaggio Java: aggiunte in Java 1.5

Variabili e Metodi di classe Interfacce e Package Gestione di File in Java

Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, SQL

Laboratorio di Basi di Dati

Istallazione di Java - Uso delle librerie

Operazioni scatenanti. Nozione ed uso. Sintassi. Esempio

Progettazione! Progettazione! Progettazione! Progettazione!

Programmazione 1 A.A. 2015/2016

DATABASE PER IL WEB. Programmazione Web 1

Uguaglianza e copia di oggetti

La Gestione della Memoria. Carla Binucci e Walter Didimo

SQL quick reference. piccolo manuale di riferimento dei principali comandi SQL (prof. Claudio Maccherani, Perugia, 2013)

HIBERNATE OPEN SOURCE OBJECT/RELATIONAL MAPPING IMPLEMENTATION FOR JAVA PERSISTENCE

La prima applicazione Java con NetBeans IDE. Dott. Ing. M. Banci, PhD

Programmazione Orientata agli Oggetti in Linguaggio Java

Transcript:

Hibernate esempio hello world Dott. Doria Mauro doriamauro@gmail.com

Presentiamo un primo esempio che consente di gestire un messaggio di testo. Lo scopo è quello di storare il messaggio hello world sul db per poi recuperarlo e quindi modificarlo. 2

Si crea un nuovo progetto Java stand-alone. 3 Le librerie di base da importare sono: asm.jar log4j.jar cglib.jar commons-collections.jar commons-logging.jar dom4j.jar hibernate3.jar mysql-connector-java-5.1.7-bin (per MySQL) jta.jar

Il file xml di configurazione 4 Il file di configurazione generale si presenta in questa forma: <?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <! Configura connessione e dialetto --> <property name="hibernate.connection.driver_class">com.mysql.jdbc.driver</property> <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/helloworld</property> <property name="hibernate.connection.username >root</property> <property name="hibernate.dialect">org.hibernate.dialect.mysql5dialect</property> <! Stampa SQL sulla console--> <property name="show_sql">true</property> <property name="format_sql">true</property> <property name="use_sql_comments">true</property> <!-- Lista dei file xml di mapping--> <mapping resource="hello/message.hbm.xml"/> </session-factory> </hibernate-configuration>

Consideriamo la seguente classe: package hello; public class Message { private Long id; private String text; private Message nextmessage; private Message() { Identificativo univoco Messaggio di testo Riferimento al succ. messaggio 5 public Message(String text) { this.text = text; public Long getid() { return id; private void setid(long id) { this.id = id; public String gettext() { return text; public void settext(string text) { this.text = text; public Message getnextmessage() { return nextmessage; public void setnextmessage(message nextmessage) { this.nextmessage = nextmessage;

Cosa notiamo dalla classe precedente? La classe Message segue le specifiche java-beans:. La classe Message possidere i metodi get/set e un costruttore a zero parametri. La classe Message non fa nessun riferimento al framework Hibernate, pertanto è un POJO (Esattamente il contrario degli EJB 2.1 il cui codice si può utilizzare solo sulla piattaforma EJB). 6 La classe Message possiede una attributo speciale che identifica gli oggetti come univoci al pari di una chiave primaria: se due oggetti hanno valori diversi per l attributo id, allora corrisponderanno a due righe diverse sul DB.

Scriviamo una classe di prova per storare un messaggio con Hibernate: public class ProvaWrite { public static void main(string args[]) { SessionFactory sessionfactory = new Configuration().configure().buildSessionFactory(); Session session =sessionfactory.getcurrentsession(); Transaction newtransaction = session.begintransaction(); Message message = new Message("Hello World"); session.save(message); newtransaction.commit(); sessionfactory.close(); Interfaccia Session e Transaction di Hibernate 7 L esecuzione produrrà del codice SQL simile a questo: insert into MESSAGES (MESSAGE_ID, MESSAGE_TEXT, NEXT_MESSAGE_ID) values (1, 'Hello World', null) Notare il progressivo

Scriviamo una classe di prova per recuperare messaggi con Hibernate: Public classe ProvaWrite { public static void main(string args[]) {. session = sessionfactory.getcurrentsession(); Transaction newtransaction = session.begintransaction(); List messages = session.createquery("from Message as m order by m.text asc").list(); System.out.println( messages.size() + " messaggio(i) trovato(i) " ); for ( Iterator iter = messages.iterator(); iter.hasnext(); ) { Message message = (Message) iter.next(); System.out.println( message.gettext() ); newtransaction.commit(); sessionfactory.close(); Hibernate query 8 select m.message_id, m.message_text, m.next_message_id from MESSAGES m order by m.message_text asc

Scriviamo il XML mapping document: <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernatemapping-3.0.dtd"> <hibernate-mapping> <class name="hello.message" table="messages"> <id name="id" column="message_id"> <generator class="increment"/> </id> Mapping campo text <property name="text" column="message_text"/> <many-to-one name="nextmessage" cascade="all" column="next_message_id"/> </class> </hibernate-mapping> Classe Message Tabella Messages Associazione self molti-a-uno 9 Mapping campo id chiave primaria Autoincremento chiave

10 Scriviamo una classe di prova per gestire con Hibernate un oggetto messaggio. In particolare vogliamo recuperare il testo associato al primo messaggio, sostituirlo con un altro e inserire il messaggio successivo al primo: Public classe ProvaWrite { public static void main(string args[]) {. session = sessionfactory.getcurrentsession(); newtransaction = session.begintransaction(); // 1 è l'id del primo messaggio message = (Message) session.get( Message.class, new Long(1) ); message.settext("funziona veramente!"); Message nextmessage = new Message("questo è un secondo messaggio"); message.setnextmessage( nextmessage ); newtransaction.commit(); sessionfactory.close(); Sostituzione testo messaggio Aggiunta messaggio successivo

Il codice SQL autogenerato da Hibernate sarà simile a questo: select m.message_id, m.message_text, m.next_message_id from MESSAGES m where m.message_id = 1 Recupero primo messaggio insert into MESSAGES (MESSAGE_ID, MESSAGE_TEXT, NEXT_MESSAGE_ID) values (2, 'Take me to your leader (please)', null) Inserimento nuovo messaggio con MESSAGE_ID progressivo Modifica testo primo messaggio Relazione molti-a-uno con il primo messaggio 11 update MESSAGES set MESSAGE_TEXT = 'Greetings Earthling', NEXT_MESSAGE_ID = 2 where MESSAGE_ID = 1

In questo piccolo esempio possiamo notare alcune caratteristiche di Hibernate: automatic dirty checking: Update automatico del DB a fronte di chiamate ai metodi set sull oggetto cascading save: Persistenza automatica di un oggetto collegato ad un altro che si trova già nello stato di persistenza (non è necessario chiamare il metodo save() sull oggetto collegato) transactional write-behind: autodeterminazione del miglior ordine con cui eseguire le istruzioni SQL senza violare i vincoli sulle chiavi esterne (vincoli di integrità referenziale) 12 NOTA: l ordine con cui sono fatte le operazioni Java non è uguale all ordine con cui vengono eseguite le istruzioni SQL

Domande? 13 :