spring-boot
Spring boot + Hibernate + Web UI (Thymeleaf)
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.
-
@EnableTransactionManagement
och@EnableJpaRepositories
- vi vill ha transaktionshantering och använda vårdataförråd. -
DataSource
- huvuddatakälla för applikationen. använder i minnet h2 för detta exempel. -
LocalContainerEntityManagerFactoryBean
- fabrik förLocalContainerEntityManagerFactoryBean
manager medHibernateJpaVendorAdapter
. -
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 isrc/main/resources/static/css
. kan du använda syntaxen@{}
att få andra statiska resurser med relativ väg.