Upgrade to Pro — share decks privately, control downloads, hide ads and more …

早わかりSpring Data JDBC / jsug-2019-01

Ryo Shindo
January 31, 2019

早わかりSpring Data JDBC / jsug-2019-01

JSUG勉強会 2019その1 Spring Data JDBC正式リリース記念!データアクセス特集
https://jsug.doorkeeper.jp/events/86027

Ryo Shindo

January 31, 2019
Tweet

More Decks by Ryo Shindo

Other Decks in Programming

Transcript

  1. . 1 . , 11 . ,
    .
    JSUG
    20191
    Acroquest Technology

    View Slide

  2. profile:
    name: Ryo Shindo
    twitter: @shindo_ryo
    company: Acroquest Technology Inc.
    ide: IntelliJ IDEA
    favorites:
    - Spring Framework
    - JUnit 5
    - Ace Combat 7
    . . 2 .,. . ,, 2 2

    View Slide

  3. . 3 . 3 .,. . 3 ,, 3

    View Slide

  4. . . 4 .,. . ,,


    View Slide

  5. . . .,. . ,, 5


    View Slide

  6. . 6 . .,. 6 . ,,
    https://twitter.com/starbuxman/status/1090462750927654912

    View Slide

  7. l JPA04:>
    Ø @?%!
    N+167
    Ø '!(#,$%
    Ø "*$/%-#&*$
    Ø Entity)%+38
    ;21/=A
    l JPA04:<5
    .9
    ⇒ Spring Data JDBC
    . 7 . .,. . ,,

    View Slide

  8. 8
    1. Spring Data JDBC
    2.

    3.
    4.
    . . .,. . ,,

    View Slide

  9. 1
    . ,

    View Slide

  10. 0 , , AB
    l Spring Data, 02=
    RDB!#('1"-12
    Ø 20185106 1.0.0 GA22'
    Ø Spring Data JPARepository
    JPAD
    GE8F

    Ø %4.3 $4(.*
    JPA?9> :@
    - DDD2/&*2+)4BC;
    opinionated1"-12JdbcTemplate
    A
    7
    01 1 0 . 01 .

    View Slide

  11. 1 A
    l Spring Data JDBC ≠ Spring Data JPA
    Ø !"-+.&,
    Ø #POJOOK
    l Spring Data JDBC ≠ Spring JDBC
    Ø JdbcTemplate)*/(
    Ø One-To-Many
    l Spring Data JDBC ≠ Spring Data JDBC Extension
    Ø %$
    0
    JDBC Extention'
    1 , . ., 1 . . .

    View Slide

  12. B 2 - - D C
    n Getting Started
    • Spring Boot 2.1.1.RELEASE
    • Spring Data JDBC 1.0.4.RELEASE
    2 A 1 ,1 2 2 1 1 1
    . . .
    0 0 1 0/ 4. 0
    1/ 2 - - . 1/
    . . .
    4 >4

    View Slide

  13. D 3 E
    n Getting Started
    B 3 C @ . 3B , 1 3 A 1
    C ; ; AA B
    1
    B )
    B B AB
    B B ; AB
    BB A BB
    ,( ( )( ; E
    B E E
    CB B
    AB + /))
    ; AB + /))
    B A ,

    View Slide

  14. J B > 4D4 ,
    n Getting Started
    SRSL
    , B D B AE CD > < , D << B DC B C B
    .) . < 1 C D B D > C
    ,BE 1 C D B . < > (
    ;
    . " ( ,
    < 1 C D B C4 <
    . < 1 C D B ;4 4

    View Slide



  15. . ,

    View Slide

  16. ACBD
    Ø DataAccessStrategy
    A>
    Spring JDBC(JdbcTemplate)
    AMyBatis
    <
    2 . , . 6 2 2
    1
    .. 2 .. 2
    ..
    2
    62

    View Slide

  17. n Spring Data JDBC5>
    JdbcTemplate4
    .')
    Ø Repository7JdbcTemplate"&%

    !,$"(-'*2#" /381$'"
    @
    n JdbcTemplateMyBatis6?=:
    Ø XML+098
    Repository;

    AJdbcTemplateL C
    1 , 2 , . .. , 7

    View Slide

  18. AC
    n
    l JPA8G).29A
    Ø @Entity<>
    Ø =$- 2,@Id
    Ø Spring Data JPA4H
    Ø [email protected]&3'+1%(9E
    Ø [email protected]&3'+1%(756;:
    C
    *-#2+&3'+1%([email protected]

    C
    Ø setter<>"3) ) !/0(.2

    FB
    18 , 2 , . 8 .. ,

    View Slide

  19. C e
    n Ti
    @ 2 1 A , 9 . .,1 @ 2 1 . . .
    ; , , @..
    . /
    . / ) / ( .
    . / ) ( .
    ; , , .. / ) / ( . ) ( .
    . ; .= .. ; / ( . ( .
    . .. ) / ( . ) ( .
    / ( . / ( .
    ( . ( .
    ; , .. 2 1
    . ; .= .. / ( . ( .
    . .
    oa Ch 2 I
    dfC hI
    c i lI
    E L i g m
    2 a Ch j 2 1. np
    @..

    View Slide

  20. AC E
    n L L
    Ø CrudRepository extends Repository
    Ø CrudRepository
    CRUD
    0 , .. .
    .> . < . ..
    .. . 2

    View Slide

  21. C A
    n
    Ø CrudRepository
    2, 2 1 . 2, 2 2
    save(T entity) T
    findById(ID id) Optional
    existsById(ID id) boolean
    findAll() Iterable
    findAllById(Iterable ids) Iterable
    count() long
    deleteById(ID id) void
    delete(T entity) void

    View Slide

  22. N OQ RT
    n WS
    Ø @Query P L N F E
    * EL = M ) F H C A =L * . : )AA = H H :
    > ( @ ; B ) < ;B " ; C
    (2 L . * " , EA L H C H
    > ) < ;B B > , > , > ,
    EA L E H L @

    View Slide

  23. L N T
    n S R
    Ø E LJ L
    A C E I ( C BF E 2 .E ( C E C C
    < , >A A E C F E >
    . E >A ) , C E 3> . < EC C E 3>
    ,;; >A A E C F E > >A
    >A > E >A A E C F E >
    >,< , / , , < / ,< / ,<
    NC
    >A A E C F E > >A ;3 3
    < , >A A E C
    < /; / ; <
    >A A E C F E >
    >A A E C ;3 3
    >A A E C F E > ;3 3

    View Slide

  24. A C
    n 1.0.4.RELEASE 17
    1. '!,% (PagingAndSortingRepository)
    Ø + /58
    2. )#$&:+.2063=
    Spring Data JPAfindByLastName
    )#$&:+.206

    3. D-4
    4. 9;@=*" (%[email protected]
    Ø [email protected]=
    2, 4 2 4 . 4 2, 4 2 2

    View Slide



  25. . ,

    View Slide

  26. n Spring Data JDBC '!*"

    Ø One-To-One, One-To-Many
    Ø Many-To-One, Many-To-Many

    n Spring JDBC) MyBatis)#$&(


    Ø Spring JDBC) +%
    3 , 3 26 , . .. 3 , 3 3

    View Slide

  27. A C
    n Spring Data JDBCDDD*)#'*($,
    FI ;
    l (Aggregate)
    - nD",%!%! P
    - @60C.9 5
    &$ N2 M<
    - HE?-3O
    - @60",%!%!-
    81 BQ
    @6+'K
    l A A (Repository)
    - @67=L:4/J >G
    - @60",%!%[email protected]+' BQ
    3 , 3 2 , . .. 3 , 3 37

    View Slide

  28. A
    n One-To-Many
    3 . 8 3 8 ( 23 3. 3 8, . 8 ,
    3 ,
    )
    3 , , 8
    )
    )
    )
    C

    View Slide

  29. ef cg
    n One-To-Many
    AIC;9 L C D 3 = 9I == C;9 D C D C
    ; / .== C D C C
    ; @. . )
    ; @. . . (. (.
    ; @. 2 C C, ;=) ; >D ( H D 2 )
    ; / = . , .= . (. (.
    , .= (.
    ; @. , .= . (. (.
    = &
    = (. & (.
    ; . > ; ; I 2 C; 9 ; >
    ; >D C C, ;= ; I ; >
    ij ga a
    2 pn
    g d lm ; >D
    h TOPS o
    C D C C <

    View Slide

  30. A C
    n One-To-Many
    3 . 3 , , . 3 3 3 . , , ,
    . / / == , ,
    @ )
    @ ;
    @ ,
    . / = / ( ; , /
    ( ; /
    D
    @ ( ; ,
    = &
    = ; & ;
    = &
    D
    D
    , , 0

    View Slide

  31. C
    n One-To-Many
    PurchaseOrder
    OrderDetail A
    , 1 3 . , 3 3
    5LI ;J 4I= I I= I . 5LI ;J 4I= I 3 ; 0; BD -
    I= I ;==1 D " 2; ; -
    I= I . I= I JB IO J; I= I -
    I= I ;==1 D " SPT R IB -
    I= I . I= I JB IO J; I= I -
    5LI ;J 4I= I B=. " I= I0; BD . ( , (, ) ) "
    B DJ.94I= I0 ;B B=. " L; B O. " B D.2; ; " 4I= I0 ;B B=. "
    L; B O. " B D.SPT R IB :

    View Slide

  32. L
    n One-To-Many
    PurchaseOrderC
    OrderDetail A
    , . ., 3 2 ( 22 . . ;.
    5 ; :I=4 = = . 5 ; :I=4 = 3 ;:B0:J= = D -
    = : 1J= " 2:L:T -
    = . . ). ;. .
    = : 1J= " OSP D J -
    = . . ). ;. .
    5 ; :I=4 = . " = 0:J=J =. ( , (, ) ) "
    J= I. 4 = 0=J: B . " :DJ J . " J= .2:L:T " 4 = 0=J: B . "
    :DJ J . " J= . OSP D J 9

    View Slide

  33. T RS
    n (1)
    ? D H ?AE CD 3 >?=? ? -D == DC C F
    H = D D ) E ? ( (
    D E AD D AD D =? )
    H = D D ) E ? ( (
    AD D = = I = ? D E AD D )
    H = D D ) E ? - 3 .
    ? D = E C ?
    H = D D ) E ? ,
    D E AD D = AD D =? =
    H = D D ) E ? ( (
    AD D = = I = ? D E AD D = )
    H = D D ) E ? ( (
    AD D = = I = ? D E AD D )
    WNM, 3O LI
    - 3 , 3

    View Slide

  34. L
    n T R (2)
    Q. PurchaseOrder deleteC
    OrderDetail A
    (4 , 4 . ., 34 4 (4 ) . . ;.
    4 . . 4 4 . . . 4 .

    View Slide

  35. RA
    n (2)
    Q. PurchaseOrder delete L
    C OrderDetail L
    A. OrderDetail T DeleteC L
    ( 5 , . ., 3 ( ) . . ;.
    . .5 . . . .
    ? =
    ? =
    ? = ? =

    View Slide

  36. n -


    -

    ⇒ A
    ID C L
    3- , 3 6 , . .. 3- , 3 3
    T
    T

    View Slide

  37. 1. One-To-Many R2
    > A 7 C H )3A> D C 3 =>;>7 > .C );; A 7 C A AE
    AC< =C @
    ;/ . ( .
    ;/ ; /
    ;/ C ,< ;> ( < ;> = C (
    . ..& // & // / // @
    / // .. / & //)/ / // /; .
    ; ;
    ; / /;;/
    ,< ;> R S L
    ac T
    AC< =C E

    View Slide

  38. EL
    1. One-To-Many 2
    ( C @ A @ , 8 C ( " @ 88 @
    ,. 8 . @ @ 8 C
    ( .) ) ) 8 C 3
    . 8 C
    ( .)
    .
    ;
    ( .)
    ;
    ;
    ) 8 C
    ) 8 C 3 . .

    View Slide

  39. E C
    1. One-To-Many 2
    3 ., 3 9 3 3, 3 .,
    3
    /
    /
    ;
    3 A
    3

    View Slide

  40. 1. One-To-Many 2
    ; , AE C 2 > < 0 ,<< ; C C
    := := ( := , "
    := := ( := ) 2; " 2
    34< ).= < C3 .= < C
    = < 1 C; C3 ,<< 0;C = < = < (
    =2 : ; =2 : ; ( =2 : ; D. ;
    2B := 2 =2 : ; 2 :=
    3 = > 3 = > 1 C; C3 3 = > (
    =2 : ; ( " ;2: ( B =" := ( := := ( "
    := := ( 1
    .= < TIab R
    .= < 1 C; L

    View Slide


  41. . ,

    View Slide

  42. BC
    n Events
    Ø Repository S E O
    C B [email protected]
    > 2 A - < -2 4 > . 44 2 .
    .
    ; 4 -, , .) ) . .
    . ;
    ( . . = . . . =
    . = . . =
    . = . = . = . =
    . = .)

    View Slide

  43. BC
    n Events
    Ø Repository S E O
    C B [email protected]
    > 3 A - < - 4 > . 44 3 .
    .
    ; 43-, 3 3 , .) ) . .
    . ;
    ( . . = . . . =
    . = . . =
    . = . = . = . =
    . = .)

    View Slide

  44. n Auditing
    Ø ()

    . . 4 .,. . ,,
    public class Employee {
    // AuditorAware!
    @CreatedBy
    private String createdBy;
    @CreatedDate
    private LocalDateTime createdDate;
    }

    View Slide


  45. . ,

    View Slide

  46. l Spring Data JDBC



    Ø Repository0JPA0
    Ø */
    Ø ')!%+,1
    l Spring Data JDBC


    Ø *.-/
    Ø (#)43$#"5
    Ø 62 &"
    , 4 4 . 4 , 4 6

    View Slide

  47. 1.

    https://docs.spring.io/spring-data/jdbc/docs/1.0.4.RELEASE/reference/html/
    2. Spring Data JDBC, References, and Aggregates
    https://spring.io/blog/2018/09/24/spring-data-jdbc-references-and-aggregates
    3. Spring Data JDBC 1.0.0.BUILD-SNAPSHOT(->
    1.0.0.RELEASE)
    https://qiita.com/kazuki43zoo/items/bd63d28dc2348aa21719
    7 , 4 4 . 7 4 , 4

    View Slide