Zoeken…


Invoering

Deze thread is gericht op het maken van een spring boot-applicatie met een winterslaap- en thymyleaf-sjabloon-engine.

Opmerkingen

Raadpleeg ook de documentatie van Thymeleaf

Maven afhankelijkheden

Dit voorbeeld is gebaseerd op spring boot 1.5.1.RELEASE. met de volgende afhankelijkheden:

<!-- 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 dit voorbeeld gaan we Spring Boot JPA, Thymeleaf en webstarters gebruiken. Ik gebruik Lombok om gemakkelijker getters en setters te genereren, maar het is niet verplicht. H2 zal worden gebruikt als een in het geheugen eenvoudig te configureren database.

Slaapstand configuratie

Laten we eerst een overzicht geven van wat we nodig hebben om de slaapstand correct in te stellen.

  1. @EnableTransactionManagement en @EnableJpaRepositories - we willen transactiebeheer en gebruiken lente data repositories.
  2. DataSource - belangrijkste gegevensbron voor de toepassing. gebruik van geheugen H2 voor dit voorbeeld.
  3. LocalContainerEntityManagerFactoryBean - fabriek voor lente-entiteitsbeheer met HibernateJpaVendorAdapter .
  4. PlatformTransactionManager - hoofdtransactiebeheer voor geannoteerde @Transactional componenten.

Configuratiebestand:

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

}

Entiteiten en repositories

Een eenvoudige entiteit: Lombok @Getter en @Setter annotaties gebruiken om getters en setters voor ons te genereren

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

}

Ik gebruik UUID-gebaseerde id's en lombok om getters en setters te genereren.

Een eenvoudige repository voor de entiteit hierboven:

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

Meer over bewaarplaatsen: voorjaarsgegevens docs

Zorg ervoor dat entiteiten zich bevinden in een pakket dat is toegewezen in em.setPackagesToScan (gedefinieerd in LocalContainerEntityManagerFactoryBean bean) en repositories in een pakket dat is toegewezen in basePackages (gedefinieerd in annotatie @EnableJpaRepositories )

Thymeleaf Resources en Spring Controller

Om Thymeleaf-sjablonen bloot te leggen, moeten we controllers definiëren.

Voorbeeld:

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

Deze eenvoudige controller injecteert MessageRepository en geeft alle berichten door aan een sjabloonbestand met de naam index.html , dat zich bevindt in src/main/resources/templates , en geeft het uiteindelijk weer op /index .

Op dezelfde manier kunnen we andere sjablonen in de sjablonenmap plaatsen (standaard door spring naar src/main/resources/templates ), een model aan hen doorgeven en ze aan de client aanbieden.

Andere statische bronnen moeten in een van de volgende mappen worden geplaatst, die standaard worden weergegeven tijdens de voorjaarsstart:

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

Thymeleaf index.html voorbeeld:

<!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 bevindt zich in de map src/main/resources/static/css . u kunt de syntaxis @{} gebruiken om andere statische bronnen te verkrijgen met behulp van het relatieve pad.


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow