Buscar..


Introducción

Este hilo se enfoca en cómo crear una aplicación de arranque de resorte con hibernación y motor de plantilla de hoja de timón.

Observaciones

También puedes ver la documentación de Thymeleaf

Dependencias maven

Este ejemplo se basa en Spring Boot 1.5.1.RELEASE. Con las siguientes dependencias:

<!-- Spring -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Lombok -->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>
<!-- H2 -->
<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
</dependency>
<!-- Test -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>

En este ejemplo vamos a utilizar Spring Boot JPA, Thymeleaf y web starters. Estoy usando Lombok para generar getters y setters más fáciles pero no es obligatorio. H2 se utilizará como una base de datos en la memoria fácil de configurar.

Configuración de hibernación

Primero, veamos lo que necesitamos para configurar Hibernate correctamente.

  1. @EnableTransactionManagement y @EnableJpaRepositories : queremos una gestión transaccional y utilizar repositorios de datos Spring.
  2. DataSource - fuente de datos principal para la aplicación. utilizando en memoria h2 para este ejemplo.
  3. LocalContainerEntityManagerFactoryBean : fábrica de gestores de entidades de primavera que utiliza HibernateJpaVendorAdapter .
  4. PlatformTransactionManager - gestor de transacciones principal para @Transactional anotó componentes.

Archivo de configuración:

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(basePackages = "com.example.repositories")
public class PersistanceJpaConfig {
    
    @Bean
    public DataSource dataSource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName("org.h2.Driver");
        dataSource.setUrl("jdbc:h2:mem:testdb;mode=MySQL;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE");
        dataSource.setUsername("sa");
        dataSource.setPassword("");
        return dataSource;
    }
    
    @Bean
    public LocalContainerEntityManagerFactoryBean entityManagerFactory(DataSource dataSource) {
        LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
        em.setDataSource(dataSource);
        em.setPackagesToScan(new String[] { "com.example.models" });
        JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
        em.setJpaVendorAdapter(vendorAdapter);
        em.setJpaProperties(additionalProperties());
        return em;
    }

    @Bean
    public PlatformTransactionManager transactionManager(LocalContainerEntityManagerFactoryBean entityManagerFactory, DataSource dataSource) {
        JpaTransactionManager tm = new JpaTransactionManager();
        tm.setEntityManagerFactory(entityManagerFactory.getObject());
        tm.setDataSource(dataSource);
        return tm;
    }

    Properties additionalProperties() {
        Properties properties = new Properties();
        properties.setProperty("hibernate.hbm2ddl.auto", "update");
        properties.setProperty("hibernate.dialect", "org.hibernate.dialect.H2Dialect");
        return properties;
    }

}

Entidades y Repositorios

Una entidad simple: utilizar las @Getter Lombok @Getter y @Setter para generar @Getter y @Setter para nosotros

@Entity
@Getter @Setter
public class Message {
    
    @Id
    @GeneratedValue(generator = "system-uuid")
    @GenericGenerator(name = "system-uuid", strategy = "uuid")
    private String id;
    private String message;

}

Estoy usando IDs y lombok basados ​​en UUID para generar captadores y definidores.

Un repositorio simple para la entidad anterior:

@Transactional
public interface MessageRepository extends CrudRepository<Message, String> {
}

Más sobre respositories: documentos de datos de primavera

Asegúrese de que las entidades residen en un paquete que está asignado en el em.setPackagesToScan (definido en el frijol LocalContainerEntityManagerFactoryBean ) y los repositorios en un paquete asignado en los basePackages (definidos en la anotación @EnableJpaRepositories )

Recursos Thymeleaf y Spring Controller

Para exponer las plantillas de Thymeleaf necesitamos definir controladores.

Ejemplo:

@Controller
@RequestMapping("/")
public class MessageController {
    
    @Autowired
    private MessageRepository messageRepository;
    
    @GetMapping
    public ModelAndView index() {
        Iterable<Message> messages = messageRepository.findAll();
        return new ModelAndView("index", "index", messages);
    }
    
}

Este controlador simple inyecta MessageRepository y pasa todos los mensajes a un archivo de plantilla llamado index.html , que reside en src/main/resources/templates , y finalmente lo expone en /index .

De la misma manera, podemos colocar otras plantillas en la carpeta de plantillas (por defecto, Spring to src/main/resources/templates ), pasarles un modelo y entregarlas al cliente.

Otros recursos estáticos se deben colocar en una de las siguientes carpetas, expuestas de forma predeterminada en Spring Boot:

/META-INF/resources/
/resources/
/static/
/public/

Ejemplo de Thymeleaf index.html :

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
    <head th:fragment="head (title)">
        <title th:text="${title}">Index</title>
        <link rel="stylesheet" th:href="@{/css/bootstrap.min.css}" href="../../css/bootstrap.min.css" />
    </head>
    <body>
        <nav class="navbar navbar-default navbar-fixed-top">
          <div class="container-fluid">
            <div class="navbar-header">
              <a class="navbar-brand" href="#">Thymeleaf</a>
            </div>
          </div>
        </nav>
        <div class="container">
            <ul class="nav">
                <li><a th:href="@{/}" href="messages.html"> Messages </a></li>
            </ul>
        </div>
    </body>
</html>
  • bootstrap.min.css está en la carpeta src/main/resources/static/css . puede usar la sintaxis @{} para obtener otros recursos estáticos usando la ruta relativa.


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow