Recherche…


Introduction

Ce thread se concentre sur la façon de créer une application de démarrage à ressort avec le moteur de modèle hibernate et thymyleaf.

Remarques

Consultez également la documentation Thymeleaf

Dépendances Maven

Cet exemple est basé sur Spring Boot 1.5.1.RELEASE. avec les dépendances suivantes:

<!-- 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>

Dans cet exemple, nous allons utiliser Spring Boot JPA, Thymeleaf et les démarreurs Web. J'utilise Lombok pour générer des getters et des setters plus faciles, mais ce n'est pas obligatoire. H2 sera utilisé comme base de données facile à configurer en mémoire.

Configuration Hibernate

Tout d'abord, permet de visualiser ce dont nous avons besoin pour configurer correctement Hibernate.

  1. @EnableTransactionManagement et @EnableJpaRepositories - nous voulons une gestion transactionnelle et utiliser des référentiels de données de printemps.
  2. DataSource - source de données principale pour l'application. en utilisant h2 en mémoire pour cet exemple.
  3. LocalContainerEntityManagerFactoryBean - usine de gestionnaire d'entités printemps utilisant HibernateJpaVendorAdapter .
  4. PlatformTransactionManager - gestionnaire de transactions principal pour les composants annotés @Transactional .

Fichier de configuration:

@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;
    }

}

Entités et référentiels

Une entité simple: Utiliser les @Getter Lombok @Getter et @Setter pour générer des @Getter et des @Setter pour nous

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

}

J'utilise des identifiants basés sur UUID et lombok pour générer des getters et des setters.

Un référentiel simple pour l'entité ci-dessus:

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

Plus sur les dépositaires: docs de données de printemps

Assurez-vous que les entités résident dans un package mappé dans em.setPackagesToScan (défini dans le bean LocalContainerEntityManagerFactoryBean ) et dans les référentiels d'un package mappé dans basePackages (défini dans l'annotation @EnableJpaRepositories )

Thymeleaf Resources et Spring Controller

Afin d'exposer les modèles Thymeleaf, nous devons définir des contrôleurs.

Exemple:

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

Ce contrôleur simple injecte MessageRepository et transmet tous les messages à un fichier modèle nommé index.html , résidant dans src/main/resources/templates et enfin l'expose dans /index .

De la même manière, nous pouvons placer d’autres modèles dans le dossier des modèles (par défaut au printemps dans src/main/resources/templates ), leur transmettre un modèle et les transmettre au client.

Les autres ressources statiques doivent être placées dans l'un des dossiers suivants, exposés par défaut au démarrage du printemps:

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

Thymeleaf index.html exemple:

<!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 trouve dans le dossier src/main/resources/static/css . Vous pouvez utiliser la syntaxe @{} pour obtenir d'autres ressources statiques en utilisant le chemin relatif.


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow