2017年2月7日火曜日

Spring Boot / JPAとか

Spring BootのJPA周りとかでつまずいたところのメモ


メモ

JPA /JPQLのつまずきポイント
@QueryのFrom句は、ドメインクラスの@Table(name=xxx)の指定とは関係がなく、
ドメインクラス名を指定する

****
具体的には、
ドメインクラスでこう指定し、
@Table(name = "customers")

リポジトリのJPAインターフェースを下記のように設定
public interface CustomerRepository
 extends JpaRepository {
    @Query("SELECT x FROM Customer x ORDER BY x.firstName, x.lastName")
    List findAllOrderByName();

}
customersだとmappingできないと怒られる。
ドキュメントをちゃんと読もう

RequestMappingの設定確認
@RestControllerをつけたクラスに、
対応した@RequestMappingが付与する

起動時の確認としては、ログにMapped "xxx" onto ....と出力されるかを確認する
Looking for @ControllerAdvice: 
 org.springframework.boot.context.embedded.
 AnnotationConfigEmbeddedWebApplicationContext@243c4f91
Mapped "{[/api/customers],methods=[GET]}" 
 onto java.util.List 
 com.example.api.CustomerRestController.getCustomers()
...

SQL / Primary key制約の解除
> ALTER TABLE table_name DROP CONSTRAINT primary_key_name ;

JPA / Pagingとsort
Mapping(Controller)
    @GetMapping
    Page<Customer&t; getCustomers(@PageableDefault Pageable pageable) {
        Page customers = customerService.findAll(pageable);
        return customers;
    }
Service
    public Page<Customer> findAll(Pageable pageable) {
        return customerRepository.findAll(pageable);
    }
Repository
public interface CustomerRepository extends JpaRepository<Customer, Integer&t; {
    @Query("SELECT x FROM Customer x ORDER BY x.firstName, x.lastName")
    Page<Customer&t; findAllOrderByName(Pageable pagealbe);
}
URLパラメータで表示数を変化できる
http://localhost:8080/project?page=1&size=3
これ面白い。ちょうど検索数が多い場合の画面を実装どうしようと考えていたとこ。
Pageの内容だとこんな感じのJSON
{"content":[{"id":1,"firstName":"Hanamichi","lastName":"Sakuragi"},
{"id":2,"firstName":"Kaede","lastName":"Rukawa"},
{"id":3,"firstName":"Sho","lastName":"Sato"}],
"last":false,
"totalElements":5,
"totalPages":2,
"size":3,
"number":0,
"numberOfElements":3,
"first":true,"
sort":null}


Spring / 開発時にHTMLのキャッシュを無効化する
デフォルトはパフォーマンス向上のため、HTMLはキャッシュされる設定です。
そのため、HTMLキャッシュを開発時に無効化すると効率的にHTMLファイルの変更を確認できます。

方法は2通り
  1. application.propertiesで設定する
  2. Spring Dev Toolsを使用する
Spring Dev Tools はgradleならbuild.gradleのdependencyに加えておくだけ。

0 件のコメント:

コメントを投稿