Spring MVC com Annotations – Configurando a Camada de Persistência

Olá galera, tudo bem?

Em meu último post, expliquei como configurar um projeto com Spring MVC sem utilização de xml. Utilizando este mesmo exemplo, neste post vou explicar como configurar a camada de persistência.

Por questão de organização de código, resolvi criar uma classe chamada PersistenceConfig.class e nela concentrar os beans relacionadas a persistência, nada impede que você utilize a classe de criação do contexto já existente no projeto para esta tarefa.

Nesta classe incluiremos duas anotações:

@Configuration utilizada para indicarmos ao Spring que existem beans a serem processados.

@EnableTransactionManagement que é utilizada para substituir a tag <tx:annotation-driven> onde dizemos para Spring para habilitar o gerenciamento de transações por anotações.

@Configuration
@EnableTransactionManagement
public class PersistenceConfig { }

Dando sequência, precisaremos declarar alguns beans nesta classe.

DataSource – Configuração para conexão com o banco de dados. Para este exemplo utilizamos uma base de dados em memória

@Bean
public DataSource dataSource() {
	DriverManagerDataSource dataSource = new DriverManagerDataSource();
	dataSource.setDriverClassName("org.h2.Driver");
	dataSource.setUrl("jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1");
	dataSource.setUsername("sa");
	dataSource.setPassword("sa");
	return dataSource;
}

JpaVendorApdater – Utilizada para conectar comportamentos específicos do ORM escolhido ao Spring, no nosso caso, Hibernate.

@Bean
public JpaVendorAdapter jpaVendorApapter() {
	return new HibernateJpaVendorAdapter();
}

EntityManagerFactory – Aqui representado pela classe LocalContainerEntityManagerFactoryBean que é uma forma poderosa criar e compartilhar um EntityManagerFactory no contexto do Spring possibilitando assim o uso de injeção de dependência.

@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
	LocalContainerEntityManagerFactoryBean emf = new LocalContainerEntityManagerFactoryBean();
	emf.setDataSource(dataSource());
	emf.setPackagesToScan("br.matera.model");
	emf.setJpaVendorAdapter(jpaVendorApapter());
	emf.setJpaProperties(jpaProperties());
	return emf;
}

private Properties jpaProperties() {
	Properties properties = new Properties();
	properties.put("hibernate.dialect", "org.hibernate.dialect.HSQLDialect");
	properties.put("hibernate.show_sql", "true");
	properties.put("hibernate.hbm2ddl.auto", "create-drop");
	return properties;
}

TransactionManager – A interface PlatformTransactionManager é o objeto principal do estrutura de transacional do Spring.  Nós apenas iremos fornecer ao Spring nosso EntityManagerFactory e deixar que ele faça o resto.

@Bean
@Autowired
public PlatformTransactionManager transactionManager(EntityManagerFactory entityManager){
	JpaTransactionManager transactionManager = new JpaTransactionManager();
	transactionManager.setEntityManagerFactory(entityManager);
	return transactionManager;
}

Em nosso contexto, precisamos apenas incluir o import para que as configurações de persistência sejam carregadas.

@EnableWebMvc
@Configuration
@Import(PersistenceConfig.class) // <-- Import da configuração de persistência
@ComponentScan(value = "br.springannotations.*")
public class Context { }

E com isso finalizamos nossas configurações. Simples não?

Fico por aqui e estou compartilhando o link do projeto no GitHub caso queiram ver mais detalhes.

Até a próxima.

 

Links

Mapeamento Objeto Relacional(ORM) – https://pt.wikipedia.org/wiki/Mapeamento_objeto-relacional

Hibernate – https://pt.wikipedia.org/wiki/Hibernate

 

DEPENDÊNCIAS:

Por FERNANDO GODOI

Entusiasta Java, Professor universitário e apaixonado por música.

Postado em: 24 de outubro de 2016

Confira outros artigos do nosso blog

REST não é JSON

21 de agosto de 2017

Bruno Sofiato

[Webinar] Profile de aplicações Java com Oracle Mission Control e Flight Recorder

24 de julho de 2017

Danival Calegari

Criando Mocks de serviços REST com SoapUI

27 de junho de 2017

Monise Costa

JavaScript 6: diferença entre var, let e const

09 de maio de 2017

Otávio Felipe do Prado

Deixe seu comentário