spring-boot
スプリングブート+ Hibernate + Web UI(Thymeleaf)
サーチ…
前書き
このスレッドは、hibernateとthymyleafテンプレートエンジンを使用したスプリングブートアプリケーションの作成方法に焦点を当てています。
備考
また、 Thymeleafのドキュメントもチェックしてください
Mavenの依存関係
この例は、スプリングブート1.5.1.RELEASEに基づいています。次の依存関係があります。
<!-- 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>
この例では、Spring Boot JPA、Thymeleaf、Webスターターを使用します。私はゲッターとセッターを簡単に生成するためにロンボクを使用していますが、必須ではありません。 H2は、データベースを構成しやすいデータベースとして使用されます。
休止状態の構成
まず、Hibernateを正しく設定するために必要なものの概要を示します。
-
@EnableTransactionManagement
と@EnableJpaRepositories
- トランザクション管理と@EnableJpaRepositories
データリポジトリの使用を希望します。 -
DataSource
- アプリケーションのメインデータソース。この例ではメモリ内h2を使用しています。 -
LocalContainerEntityManagerFactoryBean
-HibernateJpaVendorAdapter
を使用するスプリングエンティティマネージャファクトリです。 -
PlatformTransactionManager
-@Transactional
Transactionalアノテートされたコンポーネントのメイントランザクションマネージャ。
設定ファイル:
@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;
}
}
エンティティとリポジトリ
簡単なエンティティ:Lombok @Getter
と@Setter
アノテーションを使用してゲッターとセッターを生成する
@Entity
@Getter @Setter
public class Message {
@Id
@GeneratedValue(generator = "system-uuid")
@GenericGenerator(name = "system-uuid", strategy = "uuid")
private String id;
private String message;
}
私はgetterとsetterを生成するためにUUIDベースのIDとlombokを使用しています。
上記のエンティティのための単純なリポジトリ:
@Transactional
public interface MessageRepository extends CrudRepository<Message, String> {
}
リポジトリの詳細: spring data docs
エンティティがem.setPackagesToScan
( LocalContainerEntityManagerFactoryBean
Beanで定義)にマッピングされているパッケージと、 basePackages
( @EnableJpaRepositories
アノテーションで定義されている)にマップされているパッケージ内のリポジトリに存在することを確認します。
ThymeleafリソースとSpring Controller
Thymeleafテンプレートを公開するには、コントローラを定義する必要があります。
例:
@Controller
@RequestMapping("/")
public class MessageController {
@Autowired
private MessageRepository messageRepository;
@GetMapping
public ModelAndView index() {
Iterable<Message> messages = messageRepository.findAll();
return new ModelAndView("index", "index", messages);
}
}
この単純なコントローラはMessageRepository
を注入し、すべてのメッセージをsrc/main/resources/templates
にあるindex.html
という名前のテンプレートファイルに渡し、最後に/index
に公開し/index
。
同様に、テンプレートフォルダ(デフォルトではspring src/main/resources/templates
)に他のテンプレートを置き、モデルを渡してクライアントに提供することができます。
その他の静的リソースは、次のいずれかのフォルダに配置する必要があります(春の起動時にはデフォルトで公開されます)。
/META-INF/resources/
/resources/
/static/
/public/
Thymeleaf index.html
例:
<!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
はsrc/main/resources/static/css
フォルダにあります。@{}
構文を使用して、相対パスを使用して他の静的リソースを取得することができます。