Skip to content

Instantly share code, notes, and snippets.

@diegolirio
Last active August 29, 2015 14:06
Show Gist options
  • Save diegolirio/c74bf848c4fa33396252 to your computer and use it in GitHub Desktop.
Save diegolirio/c74bf848c4fa33396252 to your computer and use it in GitHub Desktop.
Blog
# Integração do Spring com JPA
1. Criar a model e anotar como @Entity, e o atibuto ID como @Id @GeneretedValue
* Criar arquivo persistense.xml dentro do diretorio src\main\resources\META-INF e configurando a tag persistence-unit.
link >>> https://raw.githubusercontent.com/diegolirio/vote-no-livro/master/src/main/resources/META-INF/persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xml>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence">
<persistence-unit name="meuNomePersistence-unit">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>com.testinject.testinject.model.Pessoa</class>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.OracleDialect" />
<property name="hibernate.hbm2ddl.auto" value="update"/>
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.format_sql" value="true"/>
</properties>
</persistence-unit>
</persistence>
* Criar um AbstractGenericDao<T> com atributo private EntityManager e anota-lo como@PersistenceContext(unitName="meuNomePersistence-unit").
link >>> https://raw.githubusercontent.com/diegolirio/vote-no-livro/master/src/main/java/com/diegolirio/votenolivro/dao/AbstractGenericDao.java
* Agora é só Injetar o EntityManagerFactory e EntityManager no xml Spring (servlet-context.xml).
* Configurando meu DataSource que será criado através do Spring.
<beans:bean id="dataSourceJPA" class="org.apache.commons.dbcp.BasicDataSource">
<beans:property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
<beans:property name="url"
value="jdbc:oracle:thin:@192.9.200.15:1521/tdp" />
<beans:property name="username" value="tdvadm" />
<beans:property name="password" value="aged12" />
</beans:bean>
* Configurando o EntityManagerFactory passando o dataSource criado acima.
<beans:bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<beans:property name="dataSource" ref="dataSourceJPA" />
<beans:property name="jpaVendorAdapter">
<beans:bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" />
</beans:property>
</beans:bean>
* Configurando o controle de transação para o Spring ser responsavel pelo mesmo, assim você não deverá se preocupar com os commit ou rollback da transação. Somente anotar seu método como @Transaction
* Ainda no servlet-context.xml configure como abaixo:
<beans:bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<beans:property name="entityManagerFactory" ref="entityManagerFactory"/>
</beans:bean>
<tx:annotation-driven />
* Anotando @Transaction na GenericDao.
@Transactional
public void save(T object) {
this.manager.persist(object);
}
* Injetando o estado Dao na Controller, basta criar um atributo como private e anota-lo como @Autowired
* Para o Spring poder injetar a dao na controller add no atributo base-package da tag context:component-scan no arquivo servlet-context.xml, como no exemplo abaixo:
<context:component-scan base-package="com.autom.autom.controller com.autom.autom.service com.autom.autom.dao" />
* Dependencias (pom.xml)
<!-- Drive ODBC Oracle -->
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.1.0</version>
</dependency>
<!-- Hibernate -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>4.3.1.Final</version>
</dependency>
<!-- Spring Orm -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<!-- spring-jdbc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<!-- commons-dbcp -->
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.2.2</version>
</dependency>
<!-- AOP -->
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>2.2</version>
</dependency>
------------------------------------------------------------------------------------------------------
h1. Java 8
* Default Methods
- Default methods são metodos concretos de uma interface, ou seja um metodo com corpo. Até a versão 7 do Java métodos de uma interface só poderia ter métodos sem corpo. Por exemplo a interface List<T> tem alguns novos metodos em Java 8, como sort e foreach.
* Lambda
* Metodos de Referencia
* Stream e Collections
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment