サーチ…


前書き

このスレッドは、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を正しく設定するために必要なものの概要を示します。

  1. @EnableTransactionManagement@EnableJpaRepositories - トランザクション管理と@EnableJpaRepositoriesデータリポジトリの使用を希望します。
  2. DataSource - アプリケーションのメインデータソース。この例ではメモリ内h2を使用しています。
  3. LocalContainerEntityManagerFactoryBean - HibernateJpaVendorAdapterを使用するスプリングエンティティマネージャファクトリです。
  4. 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.setPackagesToScanLocalContainerEntityManagerFactoryBean 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.csssrc/main/resources/static/cssフォルダにあります。 @{}構文を使用して、相対パスを使用して他の静的リソースを取得することができます。


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow