Sök…


Introduktion

Denna tråd är fokuserad på hur man skapar en fjäderstartapplikation med viloläge och tymyleaf mallmotor.

Anmärkningar

Kolla också in Thymeleaf-dokumentationen

Maven beroende

Detta exempel är baserat på vårstart 1.5.1.RELEASE. med följande beroenden:

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

I det här exemplet kommer vi att använda Spring Boot JPA, Thymeleaf och webbstarter. Jag använder mig av Lombok för att generera getters och setters lättare men det är inte obligatoriskt. H2 kommer att användas som ett minne som är lätt att konfigurera databasen.

Viloläge konfiguration

Först kan vi övervaka vad vi behöver för att ställa in Hibernate korrekt.

  1. @EnableTransactionManagement och @EnableJpaRepositories - vi vill ha transaktionshantering och använda vårdataförråd.
  2. DataSource - huvuddatakälla för applikationen. använder i minnet h2 för detta exempel.
  3. LocalContainerEntityManagerFactoryBean - fabrik för LocalContainerEntityManagerFactoryBean manager med HibernateJpaVendorAdapter .
  4. PlatformTransactionManager - huvudtransaktionshanterare för @Transactional kommenterade komponenter.

Konfigurationsfil:

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

}

Enheter och förvar

En enkel enhet: Använda Lombok @Getter och @Setter anteckningar för att generera getters och setters för oss

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

}

Jag använder UUID-baserade ID: er och lombok för att generera bokstavar och bosättare.

Ett enkelt arkiv för enheten ovan:

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

Mer om broschyrer: vårdata-dokument

Se till att enheter finns i ett paket som är em.setPackagesToScan i em.setPackagesToScan (definierat i LocalContainerEntityManagerFactoryBean bean) och förvar i ett paket som är basePackages i basePackages (definierat i @EnableJpaRepositories kommentar)

Thymeleaf Resources och Spring Controller

För att exponera Thymeleaf-mallar måste vi definiera styrenheter.

Exempel:

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

Denna enkla styrenhet injicerar MessageRepository och vidarebefordrar alla meddelanden till en index.html namnet index.html , som finns i src/main/resources/templates och avslöjar den till slut på /index .

På samma sätt kan vi placera andra mallar i mallmallen (som standard till våren till src/main/resources/templates ), skicka en modell till dem och betjäna dem till klienten.

Andra statiska resurser ska placeras i en av följande mappar, som exponeras som standard i vårstart:

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

Thymeleaf index.html exempel:

<!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 finns i src/main/resources/static/css . kan du använda syntaxen @{} att få andra statiska resurser med relativ väg.


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow