ããã³ããšã³ãã® 3 çªç®ã®ã¢ãžã¥ãŒã«ã®ãããžã§ã¯ããèŠããŠããŸããããã®ãããžã§ã¯ãã§ã¯ããµãŒã㌠API çšã® RPG 管çããã«ãå®è£ ããå¿ èŠããããŸãããèŠããŠãã人ã¯ãããšæããŸããããããã¯ãµãŒããŒäžã®ã¹ãã¬ãŒãžãšããŠäœ¿çšãããŠããŸãããåœç¶ã®ããšãªãããçŸå®ã«ã¯ãã®ãããªã¹ãã¬ãŒãžã¯äœ¿çšããããããŒã¿ããŒã¹ã䜿çšãããŸãããã®ãããžã§ã¯ãã®ç®æšã¯ãHibernate ã䜿çšããŠä»£æ¿ãªããžããªå±€ã®å®è£ ãäœæããããšã§ãã
ãã®ããã«ã¯æ¬¡ã®ãã®ãå¿ èŠã§ãã
- ãªããžããªãããã©ãŒã¯ãã
- ãããžã§ã¯ãã®ããŒãžã§ã³ãã³ã³ãã¥ãŒã¿ã«ããŠã³ããŒãããŸãã
- äŸåé¢ä¿ã pom.xml ã«è¿œå ããŸãã
- mysql:mysql-connector-java:8.0.30
- org.hibernate: hibernate-core-jakarta: 5.6.11.Final
- Maven ãã«ããäœæããŸã (mvn clean install)ã倿Žã®ããã«ãJava ããŒãžã§ã³ 1.8 ã䜿çšããŸãã
- ã¢ã€ãã¢çµç±ã§èµ·åæ§æã远å ããŸãããã®é
ç®ã®å®è£
ã¯ãè¬çŸ©https://codegym.cc/quests/lectures/cgu.module3.lecture02 (é
ç® 4)ã«ãããŸããå¯äžã®éãã¯ãã¢ãŒãã£ãã¡ã¯ãã®ååãç°ãªãããšã§ãããã¹ãŠãæ£ããå®è¡ããŠã¢ããªã±ãŒã·ã§ã³ãèµ·åãããšã次ã®ãããªå
容ã衚瀺ãããŸãã
- ã¯ãŒã¯ãã³ãã§ rpg ã¹ããŒãäœæã¹ã¯ãªãããå®è¡ããŸãã
CREATE SCHEMA `rpg` ;
- ãªãã·ã§ã³ãã©ã®ãããªåäœãäºæ³ããããã確èªãããå Žåã¯ãã¯ã©ã¹ã®ã³ã³ã¹ãã©ã¯ã¿ãŒ ãã©ã¡ãŒã¿ãŒã§
com.game.service.PlayerService
ã¢ãããŒã·ã§ã³å€ããdbããããmemoryãã«@Qualifier
倿Žã§ããŸãããã®å ŽåãSpring 㯠ã䜿çšããŸãããã¹ãåŸãã¢ãããŒã·ã§ã³ã®å€ã"db"ã«æ»ãããšãå¿ããªãã§ãã ãããIPlayerRepository
PlayerRepositoryMemory
@Qualifier
- å¿
èŠãªãã¹ãŠã®ã¢ãããŒã·ã§ã³ããšã³ãã£ã㣠ã¯ã©ã¹ã«é
眮ããŸã
com.game.entity.Player
ãããŒãã«ã®ååã¯ãplayerããã¹ããŒãã¯ãrpgãã«ããå¿ èŠããããŸããenam ã®å Žåã¯ã@Enumerated(EnumType.ORDINAL)
泚éã«å ã㊠ã䜿çšããŸã@Column
ãååãã£ãŒã«ãã®é·ãã¯æå€§ 12 æåãã¿ã€ãã« ãã£ãŒã«ãã®é·ãã¯æå€§ 30 æåã§ããå¿ èŠãããããšã«æ³šæããŠãã ããã絶察ã«ãã¹ãŠã®ãã£ãŒã«ãã null ã«ããããšã¯ã§ããŸããã - class ã«ãã©ã€ããŒãã® Finalãã£ãŒã«ã
PlayerRepositoryDB
ã远å ããã¯ã©ã¹ ã³ã³ã¹ãã©ã¯ã¿ãŒã§ãã®ãã£ãŒã«ããåæåããŸããéåžžã®ã¿ã¹ã¯ãšåæ§ã«ããããã£ã䜿çšããŸã (MySQL ããŒã¿ããŒã¹ ããŒãžã§ã³ 8 ã䜿çšããŸã)ãè峿·±ããã®ãã - 远åSessionFactory sessionFactory
ããã«ãããããŒãã«ãæåã§ (ãŸã㯠SQL ã¹ã¯ãªããã®å®è¡ã«ãã£ãŠ) äœæããå¿ èŠããªããªããŸããproperties.put(Environment.HBM2DDL_AUTO, "update");
- ãã¹ãŠã®ã¯ã©ã¹ã¡ãœãããå®è£ ããŸãã倿Žããã«ã¯ã次ã®ããã«ããŠã¿ãŸãããã
- ã¡ãœãããå®è£
ãã
getAll
ã«ã¯ãNativeQuery
- ã¡ãœãããå®è£
ãã
getAllCount
ã«ã¯ãNamedQuery
- ã¡ãœããå
ã§
beforeStop
ysessionFactory
ã¡ãœãããåŒã³åºããŸãclose
ãã¡ãœããã«ã¢ãããŒã·ã§ã³ãä»ããããšã§@PreDestroy
ãSpring ã¯ã¢ããªã±ãŒã·ã§ã³ã忢ããåã«ãã®ã¡ãœãããåŒã³åºããããã«ãããã¹ãŠã®ã·ã¹ãã ãªãœãŒã¹ãæå¹ã«è§£æŸã§ããããã«ãªããŸãã - ä»ã®ã¡ãœããã®å®è£ ã¯ããªã次第ã§ãããã ããããŒã¿ããŒã¹ã®å 容ãäœããã®æ¹æ³ã§å€æŽããã¡ãœããã®ãã©ã³ã¶ã¯ã·ã§ã³ãšã³ãããã«ã€ããŠã¯å¿ããªãã§ãã ããã
- ã¢ããªã±ãŒã·ã§ã³ãèµ·åããŸãããã¹ãŠæ£ããè¡ãã°ãåäœããã¢ããªã±ãŒã·ã§ã³ãåŸãããŸããããããããã«ã¯ããŒã¿ããªããããã¯ãŒã¯ãã³ããéã㊠(ãªãœãŒã¹ãã) init.sqlã¹ã¯ãªãããå®è¡ããŠãããŒã¿ã衚瀺ãããããã«ããŸãããã®åŸããã©ãŠã¶ã§ F5 ãæŒããŠããã¹ãŠã®ã¡ãœãããæ£ããå®è£ ãããŠããããšã確èªããŸãã
- Hibernate ãã©ã®ãããªã¯ãšãªãå®è¡ããã®ããæ£ç¢ºã«ç¢ºèªããã®ã¯è峿·±ãããšãªã®ã§ãã¯ãšãªã®ãã°ã远å ããŸãããããããè¡ãã«ã¯ãp6spy:p6spy:3.9.1äŸåé¢ä¿ã pom.xml ã«è¿œå ããŸãããªãœãŒã¹ ãã©ã«ããŒã«ãã¡ã€ã«spy.propertiesãäœæããæ¬¡ã®ããã«æå®ããŸãã
ãããŠãPlayerRepositoryDB ã¯ã©ã¹ã®ã³ã³ã¹ãã©ã¯ã¿ãŒã§ã2 ã€ã®ãªãã·ã§ã³ã倿ŽããŸããdriverlist=com.mysql.cj.jdbc.Driver dateformat=yyyy-MM-dd hh:mm:ss a appender=com.p6spy.engine.spy.appender.StdoutLogger logMessageFormat=com.p6spy.engine.spy.appender.MultiLineFormat
åãªã¯ãšã¹ãã®ãµãŒããŒåºåã«ã¯ 2 è¡ã衚瀺ãããŸãã1 ã€ç®ã¯ã©ã®ãããªã¹ããŒãã¡ã³ããæºåããããã2 ã€ç®ã¯æ¿å ¥ããããã©ã¡ãŒã¿ãŒãå«ãã¯ãšãªã§ããproperties.put(Environment.DRIVER, "com.p6spy.engine.spy.P6SpyDriver"); properties.put(Environment.URL, "jdbc:p6spy:mysql://localhost:3306/rpg");
ããã§ãããžã§ã¯ãã®æºåã¯å®äºã§ããããã§ãšãããããŸã!
å®éãSpring ãã Hibernate ã䜿çšããå Žåã¯å¥ã®ã¢ãããŒãã䜿çšãããŸããããã«ã€ããŠã¯ 5 çªç®ã®ã¢ãžã¥ãŒã«ã§èª¬æããŸãã
ãããžã§ã¯ãåæã
GO TO FULL VERSION