Creare API pubbliche, come evitare gli errori comuniAndrea Dottor
Cerchiamo di capire cosa vuol dire creare delle API pubbliche. Cerchiamo di capire cosa offre ad oggi ASP.NET, e come utilizzare al meglio la tecnologia. L'intenzione è di andare in dettaglio su problematiche spesso sottovalutate: serve sempre ASP.NET Web API? E' meglio WCF? Quali problematiche possono capitare? Come faccio il versionamento? Quali oggetti/classi espongo? E la documentazione?
Programmazione web libera dai frameworkFrancesca1980
Un nuovo progetto web parte quasi sempre con la domanda "che framework usiamo?" Diamo per scontato che non si possa sviluppare per il web senza fare uso di framework. Ma che succederebbe se decidessimo di sviluppare senza framework? Potremmo ottenere maggiore controllo e qualità, meno rischi e meno costi. Serve "solo" la volontà di imparare a programmare bene. Darò alcune dritte con Java e TDD.
Creare API pubbliche, come evitare gli errori comuniAndrea Dottor
Cerchiamo di capire cosa vuol dire creare delle API pubbliche. Cerchiamo di capire cosa offre ad oggi ASP.NET, e come utilizzare al meglio la tecnologia. L'intenzione è di andare in dettaglio su problematiche spesso sottovalutate: serve sempre ASP.NET Web API? E' meglio WCF? Quali problematiche possono capitare? Come faccio il versionamento? Quali oggetti/classi espongo? E la documentazione?
Programmazione web libera dai frameworkFrancesca1980
Un nuovo progetto web parte quasi sempre con la domanda "che framework usiamo?" Diamo per scontato che non si possa sviluppare per il web senza fare uso di framework. Ma che succederebbe se decidessimo di sviluppare senza framework? Potremmo ottenere maggiore controllo e qualità, meno rischi e meno costi. Serve "solo" la volontà di imparare a programmare bene. Darò alcune dritte con Java e TDD.
BIM obblighi e opportunità (nicolafurcolo.it) R.pdfNicola Furcolo
Slide BIM: una grande opportunità per gli operatori delle costruzioni.
Il BIM rappresenta una grandissima opportunità per chiunque operi nel settore delle costruzioni:
architetti
ingegneri
geometri
periti
topografi
imprese di costruzioni
pubbliche amministrazioni
RUP
dirigenti PA
A breve il BIM diventa obbligatorio di fatto per ogni appalto pubblico, ma una grande opportunità anche per i lavori privati.
Ti metto a disposizione qui sotto le SLIDE introduttive sul BIM che puoi scaricare gratuitamente.
Se hai bisogno di una consulenza tecnica sul BIM, contattami subito! www.nicolafurcolo.it
2. WORKFLOW QUERY
Metodi dei Dao
Query HQL/JPQL
Query SQL
Database
ResultSet
Entities
Spring Data JPA
Hibernate
JDBC
Hibernate
1
2
3
3. 1: OTTIMIZZARE LE QUERY
HQL
• Servono tutti i dati che la query HQL richiede?
• Basta un count(*)?
• Bastano delle entity più piccole? Dei singoli field?
• Si fanno manipolazioni sul risultato, che sarebbe
più semplice far eseguire a Hibernate?
4. 1: OTTIMIZZARE LE QUERY
HQL
• Passaggio di Entity alla query: usare getReference().
Place p = placeImplDao.get(id);
placeBO.doSomething(p, …);
Place p = entityManager.getReference(PlaceImpl.class, id);
5. 2: MIGLIORARE LA
TRADUZIONE IN SQL
• Le entity hanno collezioni eager che non servono?
• Le entity hanno riferimenti eager ad altre entity?
6. 3: CAMBIARE I COSTRUTTI
SQL
• Code Smell in SQL:
• Subquery (invece che join):
where x in (select y from…)
• Clausole or (possono invalidare gli indici)
7. @Query("select distinct(i.id) from InletPlaceStrategy i, PlaceConnection pc" +
" where i.visible = ?1" +
" and ((i.id = pc.fromPlace and pc.toPlace in (?2)” +
“ and pc.type.name = ?3 “ +
“ and pc.distance = ?4)” +
" or (i.id = pc.toPlace “ and pc.fromPlace in (?2) “ +
“ and pc.type.name = ?3 “ +
“ and pc.distance = ?4)” +
”)")
Stream<Long> findByVisibleAndConnected(boolean b, List<Long> connectedIds,
String type, long distance);
#11345
8. @Query("select distinct(i.id) from InletPlaceStrategy i, PlaceConnection pc" +
" where i.visible = ?1" +
" and i.id = pc.fromPlace" +
" and pc.toPlace = ?2" +
" and pc.type.name = ?3" +
" and pc.distance = ?4")
Stream<Long> findByVisibleAndConnectedByFrom(boolean b, Long connectedId,
String type, long distance);
@Query("select distinct(i.id) from InletPlaceStrategy i, PlaceConnection pc" +
" where i.visible = ?1" +
" and i.id = pc.toPlace" +
" and pc.fromPlace = ?2" +
" and pc.type.name = ?3" +
" and pc.distance = ?4")
Stream<Long> findByVisibleAndConnectedByTo(boolean b, Long connectedId,
String type, long distance);
9. USARE GLI INDICI
• Gli indici vengono usati se:
• Non ci sono clausole SQL or
• Esiste un indice sui campi specificati nella clausola
where, elencati nello stesso ordine.
• A volte, solo se si esprime un ordine sui suddetti
campi.
10. COME CONOSCERE LA
QUERY SQL
• spring.jpa.properties.hibernate.show_sql=true
• Con l’esperienza.
• Usando XRebel.
11. COME CAPIRE SE LA QUERY
USA GLI INDICI
• Con explain select …
• Con explain analyze select…