Suche…


Einführung

Dieser Thread befasst sich mit der Erstellung einer Springboot-Anwendung mit Hibernate- und Thymyleaf-Vorlagenmodul.

Bemerkungen

Überprüfen Sie auch die Thymeleaf-Dokumentation

Abhängigkeiten von Maven

Dieses Beispiel basiert auf Spring Boot 1.5.1.RELEASE. mit folgenden Abhängigkeiten:

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

In diesem Beispiel werden Spring Boot JPA, Thymeleaf und Webstarter verwendet. Ich benutze Lombok, um Getter und Setter einfacher zu generieren, aber das ist nicht zwingend. H2 wird als einfach zu konfigurierende In-Memory-Datenbank verwendet.

Ruhezustand der Konfiguration

Lassen Sie uns zunächst einen Überblick darüber geben, was wir benötigen, um den Ruhezustand richtig einzurichten.

  1. @EnableTransactionManagement und @EnableJpaRepositories - wir wollen Transaktionsmanagement und verwenden Spring Data Repositories.
  2. DataSource - Hauptdatenquelle für die Anwendung. In-Memory h2 für dieses Beispiel verwenden.
  3. LocalContainerEntityManagerFactoryBean - Entitätsmanager-Factory für Frühling, die HibernateJpaVendorAdapter .
  4. PlatformTransactionManager - Haupttransaktionsmanager für mit @Transactional versehene Komponenten von @Transactional .

Konfigurationsdatei:

@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äten und Repositories

Eine einfache Entität: Verwenden der @Getter und @Setter Setter-Anmerkungen von Lombok, um Getter und Setter für uns zu generieren

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

}

Ich verwende UUID-basierte IDs und Lombok, um Getter und Setter zu generieren.

Ein einfaches Repository für die Entität oben:

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

Weitere Informationen zu Ersatzlagern: Spring Data Docs

Stellen Sie sicher, dass sich die Entitäten in einem Paket befinden, das in em.setPackagesToScan (definiert in der Bean LocalContainerEntityManagerFactoryBean ) und in einem in basePackages (in der Annotation @EnableJpaRepositories ) definierten Paket zugeordnet ist.

Thymeleaf-Ressourcen und Federsteuerung

Um Thymeleaf-Vorlagen verfügbar zu machen, müssen Controller definiert werden.

Beispiel:

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

Dieser einfache Controller fügt MessageRepository und übergibt alle Nachrichten an eine Vorlagendatei mit dem Namen index.html , die sich in src/main/resources/templates , und schließlich in /index .

Auf die gleiche Weise können wir andere Vorlagen im Vorlagenordner ablegen (standardmäßig bis Frühling zu src/main/resources/templates ), ihnen ein Modell übergeben und sie dem Kunden zur Verfügung stellen.

Andere statische Ressourcen sollten in einem der folgenden Ordner abgelegt werden, die standardmäßig im Spring Boot verfügbar sind:

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

Thymeleaf index.html Beispiel:

<!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 befindet sich im Ordner src/main/resources/static/css . Sie können die Syntax @{} , um andere statische Ressourcen über den relativen Pfad abzurufen.


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow