Slide 1

Slide 1 text

(C) CASAREAL, Inc. All rights reserved. #jsug 4QSJOHGPS4QSJOH#PPU ʙ4QSJOH#PPUϢʔβʔ͕஌Δ΂͖ ɹ4QSJOHͷجૅ஌ࣝʙ ג ΧαϨΞϧଟాਅහ +46(ษڧձ 1

Slide 2

Slide 2 text

(C) CASAREAL, Inc. All rights reserved. #jsug ͜ͷηογϣϯʹ͍ͭͯ ▸ 4QSJOH#PPU͔Β࢝Ίͨਓʹ஌ͬͯ΄͍͠
 4QSJOHͷجૅ஌ࣝΛղઆ͠·͢ ▸ !#FBOͬͯԿʂʁ ▸ !&OBCMF9YYͬͯԿΛͯ͠Δͷʂʁ ▸ ʮઃఆΛࣗಈԽʯͬͯԿʂʁ ▸ ΧελϚΠζ͍͚ͨ͠Ͳ্ख͍͔͘ͳ͍ɾɾɾ 2

Slide 3

Slide 3 text

(C) CASAREAL, Inc. All rights reserved. #jsug ᶃ 4QSJOH#PPU͸ԿΛ͍ͯ͠Δͷʁ ᶄ 4QSJOHͷجຊʂ#FBOఆٛΛཧղ͠Α͏ ᶅ 4QSJOH.7$ͷ࢓૊ΈΛཧղ͠Α͏ ᶆ 4QSJOHͰͷσʔλΞΫηεͷ࢓૊ΈΛཧղ͠ Α͏ ᶇ "VUP$POpHVSBUJPOͷιʔεΛಡΜͰ
 4QSJOH#PPUΛཧղ͠Α͏ 3

Slide 4

Slide 4 text

(C) CASAREAL, Inc. All rights reserved. #jsug ࣗݾ঺հ ▸ ଟాਅහʢ!TVLF@NBTBʣ ▸ ݚमτϨʔφʔ!ΧαϨΞϧ ▸ 1JWPUBMೝఆߨࢣ ▸ ઐ໳ɿ4QSJOH+BWB&& ▸ ++6(΍(MBTT'JTIϢʔβʔάϧʔϓ
 ʹΑ͘ग़຅ͯ͠·͢ 4

Slide 5

Slide 5 text

(C) CASAREAL, Inc. All rights reserved. #jsug ᶃ 4QSJOH#PPU͸ԿΛ͍ͯ͠Δͷʁ ᶄ 4QSJOHͷجຊʂ#FBOఆٛΛཧղ͠Α͏ ᶅ 4QSJOH.7$ͷ࢓૊ΈΛཧղ͠Α͏ ᶆ 4QSJOHͰͷσʔλΞΫηεͷ࢓૊ΈΛཧղ͠ Α͏ ᶇ "VUP$POpHVSBUJPOͷιʔεΛಡΜͰ
 4QSJOH#PPUΛཧղ͠Α͏ 5

Slide 6

Slide 6 text

(C) CASAREAL, Inc. All rights reserved. #jsug ࠷ॳʹΫΠζ ▸ ͜Ε͔ΒσϞ͢ΔΞϓϦͰɺ
 4QSJOH#PPUݻ༗ͷػೳΛ࢖͍ͬͯΔΫϥε͸ɺ
 Կݸ͋ΔͰ͠ΐ͏͔ʁʢશ෦Ͱݸʣ " ݸ # ʙݸ $ ʙݸ % ݸશͯ 6 ιʔείʔυ https://github.com/MasatoshiTada/spring-for-spring-boot/tree/master/02-spring-boot

Slide 7

Slide 7 text

(C) CASAREAL, Inc. All rights reserved. #jsug σϞˍιʔεΛνϥݟͤ 7 A) 0ݸ B) 1ʙ3ݸ C) 4ʙ7ݸ D) 8ݸ

Slide 8

Slide 8 text

(C) CASAREAL, Inc. All rights reserved. #jsug ਖ਼ղ͸$ ▸ ͳΜͱݸ͚ͩʂ 8

Slide 9

Slide 9 text

(C) CASAREAL, Inc. All rights reserved. #jsug 4QSJOHWT4QSJOH#PPU 9 ઃఆ͕
 ແ͘ͳͬͨ
 ͚ͩ ଞͷΫϥε͸
 ΄΅มߋͳ͠

Slide 10

Slide 10 text

(C) CASAREAL, Inc. All rights reserved. #jsug 4QSJOH#PPUͷՁ஋ ▸ σϑΥϧτͷઃఆΛఏڙͯ͘͠Ε͍ͯΔ 10 ຊདྷͷΞϓϦέʔγϣϯ։ൃΛ ͙͢ʹ࢝ΊΒΕΔʂ

Slide 11

Slide 11 text

(C) CASAREAL, Inc. All rights reserved. #jsug ʮઃఆʯͱ͸ʁ ▸ ઃఆ㲈#FBOఆٛ ▸ ࣍ষ͔Βৄ͘͠ղઆ͠·͢ʂ 11

Slide 12

Slide 12 text

(C) CASAREAL, Inc. All rights reserved. #jsug ᶃ 4QSJOH#PPU͸ԿΛ͍ͯ͠Δͷʁ ᶄ 4QSJOHͷجຊʂ#FBOఆٛΛཧղ͠Α͏ ᶅ 4QSJOH.7$ͷ࢓૊ΈΛཧղ͠Α͏ ᶆ 4QSJOHͰͷσʔλΞΫηεͷ࢓૊ΈΛཧղ͠ Α͏ ᶇ "VUP$POpHVSBUJPOͷιʔεΛಡΜͰ
 4QSJOH#PPUΛཧղ͠Α͏ 12

Slide 13

Slide 13 text

(C) CASAREAL, Inc. All rights reserved. #jsug #FBOͱ͸ʁ ▸ 4QSJOHͷ%*ίϯςφͰ
 ؅ཧ͞Ε͍ͯΔ
 Πϯελϯεͷ͜ͱ ▸ ඞཁʹԠͯ͡
 औΓग़͠Մೳ 13 DIίϯςφ Bean Bean Bean Bean Bean Bean औಘ

Slide 14

Slide 14 text

(C) CASAREAL, Inc. All rights reserved. #jsug #FBOΛఆٛ͢Δ ▸ ʮ͜ͷΫϥεͷΠϯελϯεΛ#FBOͱͯ͠Ͷʂʯ ͱ%*ίϯςφʹڭ͑Δ͜ͱ ▸ ఆٛํ๏͸ͭ ᶃΞϊςʔγϣϯʴίϯϙʔωϯτεΩϟϯ ᶄϝιουʹΑΔ#FBOఆٛ ᶅ9.-ઃఆϑΝΠϧ ࠓճ͸ׂѪ 14

Slide 15

Slide 15 text

(C) CASAREAL, Inc. All rights reserved. #jsug ᶃΞϊςʔγϣϯʴίϯϙʔωϯτεΩϟϯ ▸ ΠϯελϯεΛ#FBOʹ͍ͨ͠Ϋϥεʹ
 !$PNQPOFOUΛ෇Ճ 15 package hoge.service.impl; @Component public class FooServiceImpl implements FooService { // লུ } ※ΠϯλϑΣʔε(্هͷ৔߹͸FooService)͸ඞਢͰ͸ͳ͍

Slide 16

Slide 16 text

(C) CASAREAL, Inc. All rights reserved. #jsug ᶃΞϊςʔγϣϯʴίϯϙʔωϯτεΩϟϯ ▸ +BWB$POpHΫϥεʹ!$POpHVSBUJPOͱ
 !$PNQPOFOU4DBOΛ෇Ճ 16 package hoge.config; @Configuration @ComponentScan(basePackages = { “hoge.service.impl”}) public class AppConfig { // ۭͰOK }

Slide 17

Slide 17 text

(C) CASAREAL, Inc. All rights reserved. #jsug ίϯϙʔωϯτεΩϟϯͱ͸ʁ ▸ CBTF1BDLBHFTଐ ੑʹࢦఆͨ͠ύο έʔδ഑Լʢαϒύο έʔδؚΉʣ͔Βɺ !$PNQPOFOU͕෇ Ճ͞ΕͨΫϥεΛ୳ ͢͜ͱ 17 hoge config service impl bar App Config FooService Impl Bar FooService εΩϟϯ
 ൣғ

Slide 18

Slide 18 text

(C) CASAREAL, Inc. All rights reserved. #jsug !$PNQPOFOU4DBOʹ·ͭΘΔΤτητϥ ▸ CBTF1BDLBHF$MBTTFT9YYDMBTTͱ͢Δͱɺ
 ʮ9YYΫϥε͕ଐ͢Δύοέʔδʯ͕εΩϟϯର ৅ʹͳΔ ▸ CBTF1BDLBHFTଐੑ΋CBTF1BDLBHF$MBTTFTଐ ੑ΋ࢦఆ͠ͳ͔ͬͨ৔߹ɺ
 ʮ͜ͷ!$PNQPOFOU4DBO͕෇Ճ͞Ε͍ͯΔΫ ϥε͕ଐ͢Δύοέʔδʯ͕εΩϟϯର৅ʹͳΔ 18

Slide 19

Slide 19 text

(C) CASAREAL, Inc. All rights reserved. #jsug %*ίϯςφͷॳظԽ ▸ "OOPUBUJPO$POpH"QQMJDBUJPO$POUFYUͷ
 ίϯετϥΫλҾ਺ʹ+BWB$POpHΛࢦఆ͢Δ ▸ "QQMJDBUJPO$POUFYU%*ίϯςφ 19 // DIίϯςφͷੜ੒ɺίϯϙʔωϯτεΩϟϯɺ // BeanͷΠϯελϯεੜ੒ɺDIίϯςφ΁ͷอଘ͕ߦΘΕΔ ApplicationContext context = new AnnotationConfigApplicationContext( AppConfig.class); ※ίϯετϥΫλͷҾ਺͸Մม௕ͳͷͰɺෳ਺ͷJava ConfigΛࢦఆՄೳ

Slide 20

Slide 20 text

(C) CASAREAL, Inc. All rights reserved. #jsug #FBOͷऔಘํ๏ ▸ ํ๏͸ͭ 20 ApplicationContext context = …; FooService fs = context.getBean(FooService.class); @Component // ͜ͷΫϥε΋BeanͰ͋Δ͜ͱ͕ඞਢ public class FooController { private final FooService fs; @Autowired // Spring 4.3Ҏ߱Ͱ͸@Autowired͸লུՄೳ public FooController(FooService fs) { this.fs = fs; } } DIίϯςφ FooServiceImpl ͷBean औಘ Spring͸ɺҾ਺ͷܕͰ
 ୅ೖ͢΂͖BeanΛ
 ൑அ͢Δ

Slide 21

Slide 21 text

(C) CASAREAL, Inc. All rights reserved. #jsug ᶄϝιουʹΑΔ#FBOఆٛ ▸ +BWB$POpH಺ʹ!#FBOΛ෇Ճͨ͠ϝιουΛ ࡞੒ˠ໭Γ஋͕#FBOͱͳΔ 21 @Configuration // @ComponentScan͸ෆཁ public class AppConfig2 { @Bean public BarService barService() { // ͜ͷ໭Γ஋͕BeanʹͳΔ return new BarServiceImpl(); } }

Slide 22

Slide 22 text

(C) CASAREAL, Inc. All rights reserved. #jsug ଞͷ#FBOΛར༻ͨ͠#FBOఆٛ ▸ !#FBOΛ෇Ճͨ͠ϝιουͷҾ਺Ͱɺଞͷ#FBOΛड͚औΕΔ ▸ !$PNQPOFOUͰఆٛͨ͠΋ͷͰ΋ɺଞͷ!#FBOͳϝιουͰఆٛ ͨ͠΋ͷͰ΋0, 22 @Configuration public class AppConfig3 { @Bean public BarService barService( BarRepository br) { return new BarServiceImpl(br); } } Spring͸ɺҾ਺ͷܕͰ
 ୅ೖ͢΂͖BeanΛ
 ൑அ͢Δ

Slide 23

Slide 23 text

(C) CASAREAL, Inc. All rights reserved. #jsug %*ίϯςφͷॳظԽɺ#FBOͷऔಘํ๏ ▸ !$PNQPOFOUͷ৔߹ͱશ͘ಉ͡ 23 ApplicationContext context = new AnnotationConfigApplicationContext( AppConfig2.class); BarService bs = context.getBean(BarService.class); @Component public class BarController { private final BarService bs; @Autowired // লུՄೳ public BarController(BarService bs) { this.bs = bs; } }

Slide 24

Slide 24 text

(C) CASAREAL, Inc. All rights reserved. #jsug ίϯϙʔωϯτεΩϟϯͱϝιουͰͷఆٛͷซ༻ ▸ !#FBOΛ෇Ճͨ͠ϝιουͷ໭Γ஋ɺ
 CBTF1BDLBHFT഑Լͷ!$PNQPOFOUͳΫϥεɺ
 ͷશ͕ͯ#FBOͱͳΔ 24 @Configuration @ComponentScan(basePackages = “hoge.service.impl”) public class AppConfig4 { @Bean public BarService barService() { return new BarServiceImpl(); } }

Slide 25

Slide 25 text

(C) CASAREAL, Inc. All rights reserved. #jsug +BWB$POpHͷ߹ମ ▸ !*NQPSUͰ+BWB$POpHΛ߹ମͰ͖Δ 25 @Import(ConfigB.class) // ෳ਺ࢦఆՄೳ @Configuration public class ConfigA { /* লུ */} @Configuration public class ConfigB { /* লུ */} ApplicationContext context = new AnnotationConfigApplicationContext( ConfigA.class); // ྆ํͰఆٛͨ͠Bean͕ར༻Ͱ͖Δ ※ConfigA΍ConfigBʹ͸ɺ@ComponentScan͕෇͍͍ͯͯ΋OK

Slide 26

Slide 26 text

(C) CASAREAL, Inc. All rights reserved. #jsug ຊষͷ·ͱΊ ▸ 4QSJOHͷઃఆ㲈#FBOఆٛʂ ▸ !$PNQPOFOU͕෇͍ͨΫϥεΛɺ!$PNQPOFOU4DBOͰࢦఆͨ͠ύο έʔδ͔Β୳͠ग़ͯ͠#FBOఆٛ͢Δ ▸ !#FBOͳϝιουͷ໭Γ஋͕#FBOͱͳΔ ▸ ϝιουҾ਺Ͱଞͷ#FBOΛऔಘͰ͖Δ ▸ "QQMJDBUJPO$POUFYUHFU#FBO Ͱ#FBOΛऔಘ ▸ ίϯετϥΫλʹ!"VUPXJSFEͰ#FBOΛऔಘ ▸ !*NQPSUͰෳ਺ͷ+BWB$POpHΛ߹ମͰ͖Δ 26

Slide 27

Slide 27 text

(C) CASAREAL, Inc. All rights reserved. #jsug ᶃ 4QSJOH#PPU͸ԿΛ͍ͯ͠Δͷʁ ᶄ 4QSJOHͷجຊʂ#FBOఆٛΛཧղ͠Α͏ ᶅ 4QSJOH.7$ͷ࢓૊ΈΛཧղ͠Α͏ ᶆ 4QSJOHͰͷσʔλΞΫηεͷ࢓૊ΈΛཧղ͠ Α͏ ᶇ "VUP$POpHVSBUJPOͷιʔεΛಡΜͰ
 4QSJOH#PPUΛཧղ͠Α͏ 27

Slide 28

Slide 28 text

(C) CASAREAL, Inc. All rights reserved. #jsug αϯϓϧΞϓϦͷٕज़ߏ੒ ▸ 4QSJOH.7$ ▸ 5IZNFMFBG ▸ 4QSJOH%BUB+1" ▸ )%BUBCBTF 28 ιʔείʔυ https://github.com/MasatoshiTada/spring-for-spring-boot/tree/master/01-spring

Slide 29

Slide 29 text

(C) CASAREAL, Inc. All rights reserved. #jsug 4QSJOH.7$ΞʔΩςΫνϟʢͬ͘͟Γʣ 29 Dispatcher Servlet ίϯτ
 ϩʔϥʔ View Resolver ᶃϦΫΤετ ᶄॲཧͷৼΓ෼͚ ᶅϏϡʔͷ࿦ཧ໊ ᶆϏϡʔͷ࿦ཧ໊ ᶇϏϡʔͷ෺ཧ໊ ᶈϨεϙϯε ※ΞʔΩςΫνϟͷશମ૾͸
 ɹʮSpringೖ໳ʯʮSpringపఈೖ໳ʯΛ
 ɹಡΜͰ͍ͩ͘͞

Slide 30

Slide 30 text

(C) CASAREAL, Inc. All rights reserved. #jsug 7JFX3FTPMWFSΠϯλϑΣʔε ▸ Ϗϡʔͷ࿦ཧ໊͔ΒϏϡʔͷ෺ཧ໊Λղܾ͢Δ ▸ ྫɿzFNQMPZFFJOEFYz
 ˠz8*/'UFNQMBUFTFNQMPZFFJOEFYIUNMz ▸ ֤Ϗϡʔٕज़༻ͷ7JFX3FTPMWFS࣮૷Ϋϥε͕͋Δ ▸ 5IZNFMFBG7JFX3FTFPMWFSΫϥε 5IZNFMFBG ▸ 'SFF.BSLFS7JFX3FTPMWFSΫϥε 'SFF.BSLFS ▸ *OUFSOBM3FTPVSDF7JFX3FTPMWFSΫϥε +41 30

Slide 31

Slide 31 text

(C) CASAREAL, Inc. All rights reserved. #jsug 7JFX3FTPMWFSΛ#FBOఆٛ͠Α͏ ▸ #FBOͱͯ͠ఆٛ͢Ε͹ɺ4QSJOH.7$͕಺෦Ͱ ͦͷ7JFX3FTPMWFSΛ࢖ͬͯ͘ΕΔ 31 https://github.com/spring-projects/spring-framework/blob/master/spring-webmvc/src/main/java/org/ springframework/web/servlet/DispatcherServlet.java#L719

Slide 32

Slide 32 text

(C) CASAREAL, Inc. All rights reserved. #jsug 5IZNFMFBGͰͷ7JFX3FTPMWFSͷ#FBOఆٛ 32 Thymeleaf View Resolver Spring Template Engine Spring Resource Template Resolver ࢀর ࢀর @Bean @Bean @Bean

Slide 33

Slide 33 text

(C) CASAREAL, Inc. All rights reserved. #jsug 5IZNFMFBGͰͷ7JFX3FTPMWFSͷ#FBOఆٛ 33 @Configuration public class MvcConfig … { @Bean public SpringResourceTemplateResolver templateResolver() { SpringResourceTemplateResolver srtr = new SpringResourceTemplateResolver(); // ϏϡʔΛอଘ͢ΔϑΥϧμͷࢦఆ srtr.setPrefix("/WEB-INF/templates/"); // ֦ுࢠͷࢦఆ srtr.setSuffix(".html"); // Thymeleaf͕HTMLͱͯ͠ςϯϓϨʔτΛղऍ srtr.setTemplateMode(TemplateMode.HTML); return srtr; }

Slide 34

Slide 34 text

(C) CASAREAL, Inc. All rights reserved. #jsug 5IZNFMFBGͰͷ7JFX3FTPMWFSͷ#FBOఆٛ 34 @Bean public SpringTemplateEngine templateEngine( SpringResourceTemplateResolver srtr) { SpringTemplateEngine ste = new SpringTemplateEngine(); // SpringResourceTemplateResolverͷηοτ ste.setTemplateResolver(srtr); // SpELίϯύΠϥΛ༗ޮԽͯ͠ߴ଎Խ ste.setEnableSpringELCompiler(true); // ThymeleafͰDate and Time APIΛղऍͰ͖Δػೳͷ௥Ճ ste.addDialect(new Java8TimeDialect()); return ste; }

Slide 35

Slide 35 text

(C) CASAREAL, Inc. All rights reserved. #jsug 5IZNFMFBGͰͷ7JFX3FTPMWFSͷ#FBOఆٛ 35 @Bean public ThymeleafViewResolver viewResolver( SpringTemplateEngine ste) { ThymeleafViewResolver tvr = new ThymeleafViewResolver(); // SpringTemplateEngineͷηοτ tvr.setTemplateEngine(ste); // Ϩεϙϯε͢ΔHTMLͷจࣈίʔυࢦఆ tvr.setCharacterEncoding( StandardCharsets.UTF_8.name()); return tvr; }

Slide 36

Slide 36 text

(C) CASAREAL, Inc. All rights reserved. #jsug ϝοηʔδʹඞཁͳ#FBO ▸ 3FTPVSDF#VOEMF.FTTBHF4PVSDFΫϥεΛ
 #FBOఆٛ͢Δ ▸ ࠓճ͸TSDNBJOSFTPVSDFTNFTTBHFTQSPQFSUJFTΛ࢖͏ 36 @Bean public MessageSource messageSource() { ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource(); messageSource.setBasename("messages"); return messageSource; }

Slide 37

Slide 37 text

(C) CASAREAL, Inc. All rights reserved. #jsug ͦͷଞʹ΋ඞཁͳ#FBO͕͍ͬͺ͍ʂ ▸ 4QSJOH.7$͕ಈ࡞͢Δʹ͸ɺ7JFX3FTPMWFSҎ֎ ʹ΋ଟ͘ͷ#FBO͕ඞཁ ▸ όϦσʔλʔ ▸ 63-ͱϋϯυϥʔʢίϯτϩʔϥʔϝιουʣΛରԠͮ ͚Δ ▸ ܕม׵ ▸ ଞʹ΋৭ʑɾɾɾ 37

Slide 38

Slide 38 text

(C) CASAREAL, Inc. All rights reserved. #jsug ͦͷଞʹ΋ඞཁͳ#FBO͕͍ͬͺ͍ʂ ▸ 4QSJOH.7$͕ಈ࡞͢Δʹ͸ɺ7JFX3FTPMWFSҎ֎ ʹ΋ଟ͘ͷ#FBO͕ඞཁ ▸ όϦσʔλʔ ▸ 63-ͱϋϯυϥʔʢίϯτϩʔϥʔϝιουʣΛରԠͮ ͚Δ ▸ ܕม׵ ▸ ଞʹ΋৭ʑɾɾɾ 38 @EnableWebMvc

Slide 39

Slide 39 text

(C) CASAREAL, Inc. All rights reserved. #jsug !&OBCMF8FC.WD ▸ ਖ਼ମ͸!*NQPSU ▸ ͋Β͔͡Ί༻ҙ͞Ε͍ͯΔ+BWB$POpHΛΠϯϙʔτ͢Δ ▸ 4QSJOH#PPU4QSJOH$MPVEͰΑ͘࢖͏!&OBCMF9YY΋جຊత ʹ͸ಉ͡ 39 https://github.com/spring-projects/spring-framework/blob/master/spring-webmvc/src/main/java/org/ springframework/web/servlet/config/annotation/EnableWebMvc.java#L103

Slide 40

Slide 40 text

(C) CASAREAL, Inc. All rights reserved. #jsug 8FC.WD$POpHVSBUJPO4VQQPSUΫϥε ▸ %FMFHBUJOH8FC.WD$POpHVSBUJPO લग़ ͷ
 εʔύʔΫϥε ▸ όϦσʔλʔͳͲଟ਺ͷ#FBO͕ఆٛ͞Ε͍ͯΔ ▸ !&OBCMF8FC.WDΛ+BWB$POpHʹ෇Ճ͢Δͱɺ
 ͜ΕΒͷ#FBO͕ར༻ՄೳʹͳΔ 40 https://github.com/spring-projects/spring-framework/blob/master/spring-webmvc/src/main/java/org/ springframework/web/servlet/config/annotation/WebMvcConfigurationSupport.java

Slide 41

Slide 41 text

(C) CASAREAL, Inc. All rights reserved. #jsug ੩తϑΝΠϧͷѻ͍ ▸ %JTQBUDIFS4FSWMFU͕શϦΫΤετΛड͚औΔͷ ͰɺσϑΥϧτͰ͸$44+4ը૾ͳͲ੩తϑΝ Πϧ΁ͷϧʔςΟϯά͕͞Εͳ͍ ▸ 8FC.WD$POpHVSFSΛར༻ͯ͠ϧʔςΟϯά ઃఆΛ௥Ճ 41

Slide 42

Slide 42 text

(C) CASAREAL, Inc. All rights reserved. #jsug 8FC.WD$POpHVSFS"EBQUFSΫϥε ▸ 8FC.WD$POpHVSFSΠϯλϑΣʔεͷ࣮૷Ϋϥ ε ▸ ࣮૷ϝιου͸શ෦ۭͷΞμϓλʔΫϥε ▸ ͜ͷΫϥεΛܧঝͯ͠+BWB$POpHΛ࡞੒͠ɺ
 ඞཁͳϝιουͷΈΦʔόʔϥΠυ͢Δ 42

Slide 43

Slide 43 text

(C) CASAREAL, Inc. All rights reserved. #jsug ੩తϑΝΠϧΛར༻͢Δઃఆ 43 @EnableWebMvc @Configuration public class MvcConfig extends WebMvcConfigurerAdapter { @Override public void addResourceHandlers( ResourceHandlerRegistry registry) { // /resources/**΁ͷϦΫΤετΛ registry.addResourceHandler("/resources/**") // /resources/ʹϧʔςΟϯά͢Δ .addResourceLocations("/resources/"); }

Slide 44

Slide 44 text

(C) CASAREAL, Inc. All rights reserved. #jsug <ࢀߟ>͜ΕͰ΋0, 44 @EnableWebMvc @Configuration public class MvcConfig extends WebMvcConfigurerAdapter { @Override public void configureDefaultServletHandling( DefaultServletHandlerConfigurer configurer) { configurer.enable();
 }

Slide 45

Slide 45 text

(C) CASAREAL, Inc. All rights reserved. #jsug <ࢀߟ>+BWB$POpHͱผΫϥεʹͯ͠΋0, 45 // ίϯϙʔωϯτεΩϟϯର৅ͷύοέʔδʹஔ͘ @Component public class MyConfigurer extends WebMvcConfigurerAdapter { @Override public void addResourceHandlers( ResourceHandlerRegistry registry) { registry.addResourceHandler("/resources/**") .addResourceLocations("/resources/"); } }

Slide 46

Slide 46 text

(C) CASAREAL, Inc. All rights reserved. #jsug 8FC.WD$POpHVSFS͸Ͳ͏΍ͬͯ࢖ΘΕΔͷ͔ ▸ %FMFHBUJOH8FC.WD$POpHVSBUJPOΫϥε͕
 !"VUPXJSFEͰऔಘ͍ͯ͠Δ 46 https://github.com/spring-projects/spring-framework/blob/master/spring-webmvc/src/main/java/org/ springframework/web/servlet/config/annotation/DelegatingWebMvcConfiguration.java#L48

Slide 47

Slide 47 text

(C) CASAREAL, Inc. All rights reserved. #jsug +BWB$POpH΋#FBO ▸ !$POpHVSBUJPOͷਖ਼ମ͸!$PNQPOFOU ▸ #FBO͔ͩΒɺDPOUFYUHFU#FBO ɺ!"VUPXJSFEɺ !#FBOϝιουͷҾ਺ͰଞͷΫϥε͔ΒऔಘͰ͖Δ 47 https://github.com/spring-projects/spring-framework/blob/master/spring-context/src/main/java/org/ springframework/context/annotation/Configuration.java

Slide 48

Slide 48 text

(C) CASAREAL, Inc. All rights reserved. #jsug ਖ਼ମ͕!$PNQPOFOUͳΞϊςʔγϣϯ ▸ !$POpHVSBUJPO ▸ !$POUSPMMFS ▸ !3FTU$POUSPMMFS ▸ !4FSWJDF ▸ !3FQPTJUPSZ ▸ !$POUSPMMFS"EWJDF ▸ !3FTU$POUSPMMFS"EWJDF 48 ͜ΕΒͷΞϊςʔγϣϯ͕ ෇͍ͨΫϥε͸͢΂ͯBean ※΋ͪΖΜɺίϯϙʔωϯτεΩϟϯର৅ͷ
 ɹύοέʔδͰͳ͚Ε͹ͳΒͳ͍

Slide 49

Slide 49 text

(C) CASAREAL, Inc. All rights reserved. #jsug %JTQBUDIFS4FSWMFUͷઃఆ ▸ 4QSJOH·Ͱ͸XFCYNMʹॻ͍͍ͯͨ ▸ 4QSJOH͔Β8FC"QQMJDBUJPO*OJUJBMJ[FSΫ ϥε͕௥Ճ͞Εͨ ▸ XFCYNMෆཁ ▸ 4FSWMFUͷ4FSWMFU*OJUJBMJ[FSɺ͓Αͼ+BWB4&ͷ 4FSWJDF-PBEFSͷ࢓૊ΈΛར༻͍ͯ͠Δ 49

Slide 50

Slide 50 text

(C) CASAREAL, Inc. All rights reserved. #jsug 8FC"QQMJDBUJPO*OJUJBMJ[FSͷར༻ ▸ "CTUSBDU"OOPUBUJPO$POpH%JTQBUDIFS4F SWMFU*OJUJBMJ[FSΫϥεΛܧঝͯ͠࡞੒ ▸ 8FC"QQMJDBUJPO*OJUJBMJ[FSΠϯλϑΣʔεͷ࣮૷Ϋϥ ε 50

Slide 51

Slide 51 text

(C) CASAREAL, Inc. All rights reserved. #jsug 8FC"QQMJDBUJPO*OJUJBMJ[FSͷར༻ 51 public class MyWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { @Override // ϏδωεϩδοΫ૚ҎԼͷJava Configͷࢦఆ protected Class>[] getRootConfigClasses() { return new Class>[]{DataSourceConfig.class, JpaConfig.class, ServiceConfig.class}; } @Override // MVC༻ͷJava Configͷࢦఆ protected Class>[] getServletConfigClasses() { return new Class>[]{MvcConfig.class}; } @Override // DispatcherServletͷurl-patternͷࢦఆ protected String[] getServletMappings() { return new String[]{"/"}; } @Override // αʔϒϨοτϑΟϧλʔͷࢦఆ protected Filter[] getServletFilters() { return new Filter[]{new CharacterEncodingFilter( StandardCharsets.UTF_8.name(), true)}; } }

Slide 52

Slide 52 text

(C) CASAREAL, Inc. All rights reserved. #jsug ຊষͷ·ͱΊ ▸ 4QSJOH.7$͸ɺ4QSJOHͷ%*ͷ࢓૊Έ্Ͱಈ͍͍ͯΔ ▸ ࢖͏ϏϡʔʹରԠͨ͠7JFX3FTPMWFSΛ#FBOఆٛ͢Δ ▸ ͦͷଞͷඞཁͳ#FBO͸!&OBCMF8FC.WDͰΠϯϙʔ τͰ͖Δ ▸ 8FC"QQMJDBUJPO*OJUJBMJ[FSͰ%JTQBUDIFS4FSWMFUͷઃ ఆΛهड़͢Δ 52

Slide 53

Slide 53 text

(C) CASAREAL, Inc. All rights reserved. #jsug ᶃ 4QSJOH#PPU͸ԿΛ͍ͯ͠Δͷʁ ᶄ 4QSJOHͷجຊʂ#FBOఆٛΛཧղ͠Α͏ ᶅ 4QSJOH.7$ͷ࢓૊ΈΛཧղ͠Α͏ ᶆ 4QSJOHͰͷσʔλΞΫηεͷ࢓૊ΈΛཧղ͠ Α͏ ᶇ "VUP$POpHVSBUJPOͷιʔεΛಡΜͰ
 4QSJOH#PPUΛཧղ͠Α͏ 53

Slide 54

Slide 54 text

(C) CASAREAL, Inc. All rights reserved. #jsug 4QSJOH%BUB+1" ▸ 4QSJOHςΫϊϩδʔΛ׆༻ͯ͠ɺ+1"Λ͞Βʹ ࢖͍΍ͨ͘͢͠΋ͷ ▸ 3FQPTJUPSZ͸ΠϯλϑΣʔεͷΈͰ0, ▸ ϝιου໊͔ΒͷΫΤϦੜ੒ ▸ +1"࣮૷͸جຊతʹ)JCFSOBUF 54

Slide 55

Slide 55 text

(C) CASAREAL, Inc. All rights reserved. #jsug %BUB4PVSDFͷ#FBOఆٛ ▸ #FBOఆٛͯ͠ɺ4QSJOH%BUB+1"͕಺෦Ͱ
 औಘɾར༻Ͱ͖ΔΑ͏ʹ͢Δ ▸ ࠓճ͸૊ࠐ%#ͷ)%BUBCBTFΛར༻ ▸ ىಈ࣌ʹ42-ΛಡΈࠐΜͰɺDSFBUFUBCMF΍JOTFSUΛ ߦ͏ػೳΛ࣮૷ 55

Slide 56

Slide 56 text

(C) CASAREAL, Inc. All rights reserved. #jsug %BUB4PVSDFͷ#FBOఆٛ 56 @Configuration public class DataSourceConfig { @Bean public DataSource dataSource() { EmbeddedDatabaseBuilder builder = new EmbeddedDatabaseBuilder(); return builder.setName("jsug") .setType(EmbeddedDatabaseType.H2) // drop table, create table .addScript("classpath:/schema.sql") // insert .addScript("classpath:/data.sql") .build(); } }

Slide 57

Slide 57 text

(C) CASAREAL, Inc. All rights reserved. #jsug &OUJUZ.BOBHFS'BDUPSZͷ#FBOఆٛ ▸ ໭Γ஋ͷܕ͕ -PDBM$POUBJOFS&OUJUZ.BOBHFS'BDUPSZ#FBOͳ !#FBOϝιου࡞੒ ▸ ϝιου໊͸ʮFOUJUZ.BOBHFS'BDUPSZʯʹ͢Δඞཁ͕ ͋Δ ▸ ࣮ࡍʹ#FBOͱͯ͠ఆٛ͞ΕΔͷ͸ɺ 'BDUPSZ#FBOHFU0CKFDU ͷ໭Γ஋Ͱ͋Δ &OUJUZ.BOBHFS'BDUPSZ 57

Slide 58

Slide 58 text

(C) CASAREAL, Inc. All rights reserved. #jsug &OUJUZ.BOBHFS'BDUPSZͷ#FBOఆٛ 58 @Configuration @EnableJpaRepositories(basePackages = "com.example.persistence.repository") // RepositoryΠϯλϑΣʔεͷύοέʔδ public class JpaConfig { @Bean public LocalContainerEntityManagerFactoryBean entityManagerFactory(DataSource dataSource) { HibernateJpaVendorAdapter hjva = new HibernateJpaVendorAdapter(); hjva.setDatabase(Database.H2); hjva.setGenerateDdl(false); // JPAͷDDLੜ੒ػೳΛແޮԽ LocalContainerEntityManagerFactoryBean factoryBean = new LocalContainerEntityManagerFactoryBean(); factoryBean.setDataSource(dataSource); // DataSourceͷηοτ factoryBean.setJpaVendorAdapter(hjva); factoryBean.setPackagesToScan("com.example.persistence.entity", "org.springframework.data.jpa.convert.threeten"); // εΩϟϯઃఆʢޙड़ʣ HashMap properties = new HashMap<>(); properties.put("hibernate.physical_naming_strategy", new MyPhysicalNamingStrategy()); // ΩϟϝϧέʔεɾεωʔΫέʔεͷม׵ factoryBean.setJpaPropertyMap(properties); return factoryBean; }

Slide 59

Slide 59 text

(C) CASAREAL, Inc. All rights reserved. #jsug /BNJOH4USBUFHZͷ࡞੒ ▸ )JCFSOBUFͷػೳͰɺ+BWBͷϑΟʔϧυ໊ͱ%# ͷΧϥϜ໊ͷม׵ϧʔϧΛهड़͢Δ΋ͷ ▸ ࠓճ͸ɺΩϟϝϧέʔεͱεωʔΫέʔεΛࣗಈ ม׵͢Δ/BNJOH4USBUFHZΛࣗલͰ࡞੒ ▸ ྫɿKPJOFE%BUFKPJOFE@EBUF 59

Slide 60

Slide 60 text

(C) CASAREAL, Inc. All rights reserved. #jsug /BNJOH4USBUFHZͷ࡞੒ 60 private static class MyPhysicalNamingStrategy extends PhysicalNamingStrategyStandardImpl { /** * ΩϟϝϧέʔεΛεωʔΫέʔεʹม׵(ࡶͳ࣮૷ͳͷͰਅࣅΔͳةݥ) */ @Override public Identifier toPhysicalColumnName( Identifier name, JdbcEnvironment context) { StringBuilder builder = new StringBuilder(name.getText()); for (int i = 1; i < builder.length() - 1; i++) { if (Character.isLowerCase(builder.charAt(i - 1)) && Character.isUpperCase(builder.charAt(i))) { builder.insert(i, '_'); i++; } } return Identifier.toIdentifier(builder.toString().toLowerCase()); } }

Slide 61

Slide 61 text

(C) CASAREAL, Inc. All rights reserved. #jsug !&OBCMF+QB3FQPTJUPSJFT ▸ ϦϙδτϦΠϯλϑΣʔεͷύοέʔδΛࢦఆ ▸ ਖ਼ମ͸!*NQPSU*NQPSU#FBO%FpOJUJPO3FHJTUSBS ▸ #FBOఆٛΛ௥ՃͰ͖ΔͬΆ͍ʢະௐࠪʣ 61 https://github.com/spring-projects/spring-data-jpa/blob/master/src/main/java/org/springframework/data/ jpa/repository/config/EnableJpaRepositories.java#L47

Slide 62

Slide 62 text

(C) CASAREAL, Inc. All rights reserved. #jsug TFU1BDLBHF5P4DBO ▸ +1"ͷΤϯςΟςΟʢ!&OUJUZ͕෇͍ͨΫϥεʣ Λ୳͢ύοέʔδΛࢦఆ͢Δ 62

Slide 63

Slide 63 text

(C) CASAREAL, Inc. All rights reserved. #jsug +1"Ͱ%BUFBOE5JNFΛ࢖͏ ▸ KBWBTRM%BUFKBWBUJNF-PDBM%BUFͳͲͷ
 ܕม׵Λߦ͏$POWFSUFS͕ɺ4QSJOH%BUB+1" Ͱఏڙ͞Ε͍ͯΔ ▸ PSHTQSJOHGSBNFXPSLEBUBKQBDPOWFSUUISFFU FOύοέʔδͷ+TS+QB$POWFSUFSTΫϥε ʹɺ੩తωετΫϥεͱͯ͠࡞੒͞Ε͍ͯΔ ▸ ͜ͷύοέʔδΛTFU1BDLBHF5P4DBO ʹࢦఆ 63

Slide 64

Slide 64 text

(C) CASAREAL, Inc. All rights reserved. #jsug +TS+QB$POWFSUFSTΫϥε 64 https://github.com/spring-projects/spring-data-jpa/blob/master/src/main/java/org/springframework/data/ jpa/convert/threeten/Jsr310JpaConverters.java

Slide 65

Slide 65 text

(C) CASAREAL, Inc. All rights reserved. #jsug ຊষͷ·ͱΊ ▸ ૊ࠐ%#Ͱ%BUB4PVSDFΛఆٛ͢Δͱɺ
 ىಈ࣌ʹ42-Λ࣮ߦͰ͖Δʂ ▸ &OUJUZ.BOBHFS'BDUPSZΛ#FBOఆٛ͢Δʂ ▸ /BNJOH4USBUFHZɺ!&OBCMF+QB3FQPTJUPSJFTɺ TFU1BDLBHF5P4DBO ͷࢦఆ͕ඞཁʂ ▸ %BUFBOE5JNF"1*Λ࢖͏৔߹͸ɺ$POWFSUFSͷࢦ ఆ΋ඞཁʂ 65

Slide 66

Slide 66 text

(C) CASAREAL, Inc. All rights reserved. #jsug ᶃ 4QSJOH#PPU͸ԿΛ͍ͯ͠Δͷʁ ᶄ 4QSJOHͷجຊʂ#FBOఆٛΛཧղ͠Α͏ ᶅ 4QSJOH.7$ͷ࢓૊ΈΛཧղ͠Α͏ ᶆ 4QSJOHͰͷσʔλΞΫηεͷ࢓૊ΈΛཧղ͠ Α͏ ᶇ "VUP$POpHVSBUJPOͷιʔεΛಡΜͰ
 4QSJOH#PPUΛཧղ͠Α͏ 66

Slide 67

Slide 67 text

(C) CASAREAL, Inc. All rights reserved. #jsug ʮઃఆͷࣗಈԽʯͷਖ਼ମ ▸ େྔͷ+BWB$POpHΫϥε͕͋Β͔͡Ί༻ҙ͞Ε͍ͯΔ ▸ ओʹTQSJOHCPPUBVUPDPOpHVSFYYY3&-&"4&KBS಺ ▸ ʮ͋ΔΫϥε͕Ϋϥεύε্ʹଘࡏ͢Δ͔Ͳ͏͔ʯͳͲͷ৚ ݅Ͱɺ֤+BWB$POpHΫϥε΍֤!#FBOϝιουΛ༗ޮԽແ ޮԽ͍ͯ͠Δ ▸ !$POEJUJPOBM0O9YYΞϊςʔγϣϯ ▸ ৄࡉ͸!LB[VLJ[PP͞Μͷ2JJUB΁ ▸ IUUQRJJUBDPNLB[VLJ[PPJUFNTEFEEDGEE 67

Slide 68

Slide 68 text

(C) CASAREAL, Inc. All rights reserved. #jsug 7JFX3FTPMWFSͷ#FBOఆٛ ▸ 4QSJOH3FTPVSDF5FNQMBUF3FTPMWFSͷ#FBOఆٛ ▸ IUUQTHJUIVCDPNTQSJOHQSPKFDUTTQSJOHCPPUCMPCYTQSJOHCPPUBVUPDPOpHVSFTSDNBJO KBWBPSHTQSJOHGSBNFXPSLCPPUBVUPDPOpHVSFUIZNFMFBG "CTUSBDU5FNQMBUF3FTPMWFS$POpHVSBUJPOKBWB- ▸ 4QSJOH5FNQMBUF&OHJOFͷ#FBOఆٛ ▸ IUUQTHJUIVCDPNTQSJOHQSPKFDUTTQSJOHCPPUCMPCYTQSJOHCPPUBVUPDPOpHVSFTSDNBJO KBWBPSHTQSJOHGSBNFXPSLCPPUBVUPDPOpHVSFUIZNFMFBG5IZNFMFBG"VUP$POpHVSBUJPOKBWB- ▸ 5IZNFMFBG7JFX3FTPMWFSͷ#FBOఆٛ ▸ IUUQTHJUIVCDPNTQSJOHQSPKFDUTTQSJOHCPPUCMPCYTQSJOHCPPUBVUPDPOpHVSFTSDNBJO KBWBPSHTQSJOHGSBNFXPSLCPPUBVUPDPOpHVSFUIZNFMFBG "CTUSBDU5IZNFMFBG7JFX3FTPMWFS$POpHVSBUJPOKBWB- 68

Slide 69

Slide 69 text

(C) CASAREAL, Inc. All rights reserved. #jsug )5.-ϑΝΠϧͷஔ͖৔ॴ ▸ 4QSJOH3FTPVSDF5FNQMBUF3FTPMWFSͷ#FBOఆ ٛ࣌ʹɺTFU1SFpY DMBTTQBUIUFNQMBUFT ͱ ࢦఆ͞Ε͍ͯΔ ▸ IUUQTHJUIVCDPNTQSJOHQSPKFDUTTQSJOHCPPUCMPCYTQSJOHCPPU BVUPDPOpHVSFTSDNBJOKBWBPSHTQSJOHGSBNFXPSLCPPUBVUPDPOpHVSF UIZNFMFBG"CTUSBDU5FNQMBUF3FTPMWFS$POpHVSBUJPOKBWB- ▸ IUUQTHJUIVCDPNTQSJOHQSPKFDUTTQSJOHCPPUCMPCYTQSJOHCPPU BVUPDPOpHVSFTSDNBJOKBWBPSHTQSJOHGSBNFXPSLCPPUBVUPDPOpHVSF UIZNFMFBG5IZNFMFBG1SPQFSUJFTKBWB- 69

Slide 70

Slide 70 text

(C) CASAREAL, Inc. All rights reserved. #jsug 5IZNFMFBGͰ%BUFBOEUJNF"1*Λ࢖͏ ▸ +BWB5JNF%JBMFDU͕#FBOఆٛࡁΈ ▸ Ϋϥεύε্ʹ͜ͷΫϥε͕͋Ε͹#FBOఆٛͯ͘͠ΕΔ ▸ IUUQTHJUIVCDPNTQSJOHQSPKFDUTTQSJOHCPPUCMPCYTQSJOHCPPUBVUPDPOpHVSF TSDNBJOKBWBPSHTQSJOHGSBNFXPSLCPPUBVUPDPOpHVSFUIZNFMFBG 5IZNFMFBG"VUP$POpHVSBUJPOKBWB- ▸ #FBOఆ͓͚ٛͯ͠͹ɺࣗಈઃఆ࣌ʹ%*ίϯςφ͔Βऔಘ ͯ͘͠ΕΔ ▸ IUUQTHJUIVCDPNTQSJOHQSPKFDUTTQSJOHCPPUCMPCYTQSJOHCPPUBVUPDPOpHVSF TSDNBJOKBWBPSHTQSJOHGSBNFXPSLCPPUBVUPDPOpHVSFUIZNFMFBG 5IZNFMFBG"VUP$POpHVSBUJPOKBWB- 70

Slide 71

Slide 71 text

(C) CASAREAL, Inc. All rights reserved. #jsug ϝοηʔδ ▸ 3FTPVSDF#VOEMF.FTTBHF4PVSDF͕#FBOఆٛ ࡁΈ ▸ ϓϩύςΟϑΝΠϧ໊͸ɺ
 σϑΥϧτͰʮNFTTBHFTQSPQFSUJFTʯ ▸ IUUQTHJUIVCDPNTQSJOHQSPKFDUTTQSJOHCPPUCMPCYTQSJOHCPPU BVUPDPOpHVSFTSDNBJOKBWBPSHTQSJOHGSBNFXPSLCPPUBVUPDPOpHVSF DPOUFYU.FTTBHF4PVSDF"VUP$POpHVSBUJPOKBWB- 71

Slide 72

Slide 72 text

(C) CASAREAL, Inc. All rights reserved. #jsug !&OBCMF8FC.WD૬౰ͷ#FBOఆٛ ▸ ෳ਺ͷ"VUP$POpHVSBUJPOΫϥεʹ·͕ͨͬͯ ఆٛ͞Ε͍ͯΔ ▸ IUUQTHJUIVCDPNTQSJOHQSPKFDUTTQSJOHCPPUCMPCYTQSJOHCPPU BVUPDPOpHVSFTSDNBJOKBWBPSHTQSJOHGSBNFXPSLCPPUBVUPDPOpHVSF XFC8FC.WD"VUP$POpHVSBUJPOKBWB ▸ IUUQTHJUIVCDPNTQSJOHQSPKFDUTTQSJOHCPPUCMPCYTQSJOHCPPU BVUPDPOpHVSFTSDNBJOKBWBPSHTQSJOHGSBNFXPSLCPPUBVUPDPOpHVSF WBMJEBUJPO7BMJEBUJPO"VUP$POpHVSBUJPOKBWB 72

Slide 73

Slide 73 text

(C) CASAREAL, Inc. All rights reserved. #jsug ੩తϑΝΠϧͷϋϯυϦϯά ▸ Ϋϥεύε௚ԼͷTUBUJDϑΥϧμ౳͕ࢦఆ͞Εͯ ͍Δ ▸ IUUQTHJUIVCDPNTQSJOHQSPKFDUTTQSJOHCPPUCMPCYTQSJOHCPPU BVUPDPOpHVSFTSDNBJOKBWBPSHTQSJOHGSBNFXPSLCPPUBVUPDPOpHVSF XFC3FTPVSDF1SPQFSUJFTKBWB- ▸ IUUQTHJUIVCDPNTQSJOHQSPKFDUTTQSJOHCPPUCMPCYTQSJOHCPPU BVUPDPOpHVSFTSDNBJOKBWBPSHTQSJOHGSBNFXPSLCPPUBVUPDPOpHVSF XFC8FC.WD"VUP$POpHVSBUJPOKBWB- 73

Slide 74

Slide 74 text

(C) CASAREAL, Inc. All rights reserved. #jsug %JTQBUDIFS4FSWMFUͷઃఆ ▸ 4FSWMFU3FHJTUSBUJPO#FBOʹ%JTQBUDIFS4FSWMFU ͕ొ࿥͞Ε͍ͯΔ ▸ 4FSWMFU3FHJTUSBUJPO#FBO͸4QSJOH#PPUͰఆٛ͞Ε ͨΫϥε ▸ IUUQTHJUIVCDPNTQSJOHQSPKFDUTTQSJOHCPPUCMPCYTQSJOHCPPU BVUPDPOpHVSFTSDNBJOKBWBPSHTQSJOHGSBNFXPSLCPPUBVUPDPOpHVSF XFC%JTQBUDIFS4FSWMFU"VUP$POpHVSBUJPOKBWB- 74

Slide 75

Slide 75 text

(C) CASAREAL, Inc. All rights reserved. #jsug ૊ࠐ%#ͷ%BUB4PVSDF ▸ &NCFEEFE%BUB4PVSDFΛ#FBOఆ͍ٛͯ͠Δ ▸ IUUQTHJUIVCDPNTQSJOHQSPKFDUTTQSJOHCPPUCMPCW3&-&"4& TQSJOHCPPUBVUPDPOpHVSFTSDNBJOKBWBPSHTQSJOHGSBNFXPSLCPPU BVUPDPOpHVSFKECD&NCFEEFE%BUB4PVSDF$POpHVSBUJPOKBWB- ▸ TDIFNBTRMͱEBUBTRMͷىಈ࣮࣌ߦ͸ͪ͜Β ▸ IUUQTHJUIVCDPNTQSJOHQSPKFDUTTQSJOHCPPUCMPCW3&-&"4& TQSJOHCPPUBVUPDPOpHVSFTSDNBJOKBWBPSHTQSJOHGSBNFXPSLCPPU BVUPDPOpHVSFKECD%BUB4PVSDF*OJUJBMJ[FSKBWB- 75

Slide 76

Slide 76 text

(C) CASAREAL, Inc. All rights reserved. #jsug &OUJUZ.BOBHFS'BDUPSZͷ#FBOఆٛ ▸ -PDBM$POUBJOFS&OUJUZ.BOBHFS'BDUPSZ#FBO Λ#FBOఆ͍ٛͯ͠Δ ▸ IUUQTHJUIVCDPNTQSJOHQSPKFDUTTQSJOHCPPUCMPCW3&-&"4& TQSJOHCPPUBVUPDPOpHVSFTSDNBJOKBWBPSHTQSJOHGSBNFXPSLCPPU BVUPDPOpHVSFPSNKQB+QB#BTF$POpHVSBUJPOKBWB- 76

Slide 77

Slide 77 text

(C) CASAREAL, Inc. All rights reserved. #jsug /BNJOH4USBUFHZͷઃఆ ▸ TQSJOHCPPUYYY3&-&"4&KBSͰ /BNJOH4USBUFHZ࣮૷Ϋϥε͕ఏڙ͞Ε͍ͯΔ ▸ &OUJUZ.BOBHFS'BDUPSZ#VJMEFSܦ༝Ͱ -PDBM$POUBJOFS&OUJUZ.BOBHFS'BDUPSZ#FBO ʹࢦఆࡁΈʹͳ͍ͬͯΔ ▸ IUUQTHJUIVCDPNTQSJOHQSPKFDUTTQSJOHCPPUCMPCYTQSJOHCPPU BVUPDPOpHVSFTSDNBJOKBWBPSHTQSJOHGSBNFXPSLCPPUBVUPDPOpHVSF PSNKQB+QB#BTF$POpHVSBUJPOKBWB- 77

Slide 78

Slide 78 text

(C) CASAREAL, Inc. All rights reserved. #jsug !&OBCMF+QB3FQPTJUPSJFT ▸ +QB3FQPTJUPSJFT"VUP$POpHVSBUJPO
 ˠ+QB3FQPTJUPSJFT"VUP$POpHVSF3FHJTUSBS
 ˠ&OBCMF+QB3FQPTJUPSJFT$POpHVSBUJPO ▸ ͜͜ʹ!&OBCMF+QB3FQPTJUPSJFT͕෇͍͍ͯΔ ▸ IUUQTHJUIVCDPNTQSJOHQSPKFDUTTQSJOHCPPUCMPCYTQSJOHCPPU BVUPDPOpHVSFTSDNBJOKBWBPSHTQSJOHGSBNFXPSLCPPUBVUPDPOpHVSF EBUBKQB+QB3FQPTJUPSJFT"VUP$POpHVSBUJPOKBWB 78

Slide 79

Slide 79 text

(C) CASAREAL, Inc. All rights reserved. #jsug !&OUJUZ4DBO ▸ ΤϯςΟςΟ΍$POWFSUFSͷύοέʔδΛࢦఆ ▸ 4QSJOH#PPUͰఆٛ͞ΕͨΞϊςʔγϣϯ ▸ TFU1BDLBHF5P4DBO ૬౰ ▸ ͜Ε΋ਖ਼ମ͸!*NQPSU 79 @SpringBootApplication @EntityScan(basePackages = { "com.example.persistence.entity", "org.springframework.data.jpa.convert.threeten" }) public class Application {

Slide 80

Slide 80 text

(C) CASAREAL, Inc. All rights reserved. #jsug ղ͚ͳ͔ͬͨಾ ▸ 4QSJOH#PPU൛ͷΞϓϦͰɺ
 +1"ͷΤϯςΟςΟʹ!4FRVFODF(FOFSBUPSΛ ෇͚ͳ͍ͱɺ*%ࣗಈ࠾൪͕͞Εͳ͔ͬͨɾɾɾ ▸ ඇ4QSJOH#PPUͳαϯϓϧ͸ແ͠Ͱ΋࠾൪͞ΕΔ ▸ IUUQTHJUIVCDPN.BTBUPTIJ5BEBTQSJOHGPSTQSJOHCPPUCMPCNBTUFS TQSJOHCPPUTSDNBJOKBWBDPNFYBNQMFQFSTJTUFODFFOUJUZ &NQMPZFFKBWB- 80

Slide 81

Slide 81 text

(C) CASAREAL, Inc. All rights reserved. #jsug #FBOఆٛΧελϚΠζͷྫ ᶃ BQQMJDBUJPOQSPQFSUJFTʹઃఆ ᶄ ࣗ෼Ͱ#FBOఆٛ͢Δ ᶅ $VTUPNJ[FSΛར༻ 81

Slide 82

Slide 82 text

(C) CASAREAL, Inc. All rights reserved. #jsug ᶃBQQMJDBUJPOQSPQFSUJFTʹઃఆ ▸ BQQMJDBUJPOQSPQFSUJFT
 ˠ!$POpHVSBUJPO1SPQFSUJFTͳΫϥε
 ˠ#FBOఆٛͰ࢖ΘΕΔ ▸ ৄࡉ͸!NBLJOH͞Μͷϒϩά΁ ▸ IUUQTCMPHJLBNFOUSJFT 82

Slide 83

Slide 83 text

(C) CASAREAL, Inc. All rights reserved. #jsug ᶄࣗ෼Ͱ#FBOఆٛ͢Δ ▸ "VUP$POpHVSBUJPO಺ͷ !$POEJUJPOBM0O.JTTJOH#FBOͳ#FBO͸ɺ
 ࣗ෼Ͱ#FBOఆٛͨ͠৔߹͸ແޮԽ͞ΕΔ 83

Slide 84

Slide 84 text

(C) CASAREAL, Inc. All rights reserved. #jsug ᶅ$VTUPNJ[FSΛར༻͢Δ ▸ 4QSJOH#PPU͸େྔͷ$VTUPNJ[FSΛఏڙ͍ͯ͠Δ ▸ 3FTU5FNQMBUF$VTUPNJ[FS ▸ +BDLTPO0CKFDU.BQQFS#VJMEFS$VTUPNJ[FS ▸ 1MBUGPSN5SBOTBDUJPO.BOBHFS$VTUPNJ[FS ▸ ͦͷଞ͍Ζ͍Ζ ▸ 9YY$VTUPNJ[FSΛ#FBOఆٛ͢Ε͹ɺ
 "VUP$POpHVSBUJPOΫϥε͕%*ίϯςφ͔Βरͬͯ͘ΕΔ ▸ ৄࡉ͸!LB[VLJ[PP͞Μͷ2JJUB΁
 IUUQRJJUBDPNLB[VLJ[PPJUFNTBCFD 84

Slide 85

Slide 85 text

(C) CASAREAL, Inc. All rights reserved. #jsug ຊষͷ·ͱΊ ▸ 4QSJOH#PPU͸ ▸ େྔͷ+BWB$POpHΛ͋Β͔͡Ίఏڙ͠ɺ
 ৚݅ʹΑͬͯ༗ޮԽແޮԽ͍ͯ͠Δ͚ͩʂ ▸ #FBOఆٛʹศརͳΫϥεͳͲ΋ఏڙ͍ͯ͠Δ ▸ #FBOఆٛΛΧελϚΠζ͍ͨ͠৔߹͸ ▸ BQQMJDBUJPOQSPQFSUJFTɺࣗલͰ#FBOఆٛɺ $VTUPNJ[FSͷར༻ 85

Slide 86

Slide 86 text

(C) CASAREAL, Inc. All rights reserved. #jsug ·ͱΊ 86

Slide 87

Slide 87 text

(C) CASAREAL, Inc. All rights reserved. #jsug ࠷ޙͷ·ͱΊ ▸ ୤4QSJOH#PPUॳ৺ऀ͢ΔͨΊʹ͸ɺ
 4QSJOHͷجૅ஌͕ࣝԿΑΓେࣄʂ ▸ 4QSJOHͷ#FBOఆٛΛཧղ͠Α͏ʂ ▸ 4QSJOH#PPUΛ࢖ΘͣʹΞϓϦΛ࡞ͬͯΈΑ͏ʂ ▸ "VUP$POpHVSBUJPOͷιʔεΛಡΈͳ͕Βɺ
 ΞϓϦΛ4QSJOH#PPUԽ͍ͯ͜͠͏ʂ 87

Slide 88

Slide 88 text

(C) CASAREAL, Inc. All rights reserved. #jsug ͓͢͢Ίࢀߟॻ੶ ▸ վగ৽൛4QSJOHೖ໳ ▸ ࠷ॳ͸͜ͷຊʂ ▸ 4QSJOHపఈೖ໳ ▸ ৄࡉΛ஌ΔͳΒ͜ͷຊʂ ▸ 1SP4QSJOH#PPU ༸ॻ ▸ 4QSJOH#PPUΛ໢ཏతʹֶशͰ ͖Δʂ 88

Slide 89

Slide 89 text

(C) CASAREAL, Inc. All rights reserved. #jsug &OKPZ4QSJOH4QSJOH#PPU ▸ ͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ 89