å
¥é
ãããžã§ã¯ãã§ã¯ãããŒã¿ããŒã¹ãã¬ãŒã ã¯ãŒã¯ãé »ç¹ã«åŠçããå¿
èŠããããŸãã æŠå¿µçã«ããããã®ãã¬ãŒã ã¯ãŒã¯ã¯2ã€ã®å€§ããªã¯ã©ã¹ã«åããããšãã§ããŸãã
ãããã®ããã€ãã¯è¯ãã§ãããããã€ãã¯ããŸãè¯ããããŸããã ããã䞻芳çã«èšããšãSQLæåã¯ORMæåã«æ¯ã¹ãŠéçºãå£ã£ãŠããŸãã ç§ã¯éçºã§ã¯åŒ·èª¿ããŸãããæ©äŒã§ã¯åŒ·èª¿ããŸããã ãã®ã¹ã±ãŒã«ã倿Žããããšã¯ã§ããŸããããSQLæåã®ã¢ãããŒãã®äžçã«ç°åžžãªå€èгãæäŸããããšã¯ããªãå¯èœã§ãã èª°ãæ°ã«ããªãããã£ãããžãããã
ã¡ãã£ãšããã¬ãã¥ãŒ
éåããåã«ãç§ã¯éåžžã«ç°¡æœã«äœãæãåºãããšãææ¡ããŸãã ä»¶åã®èª°ãã¬ãã¥ãŒãã¹ãããããŠãæ§ããŸããã
ãã®ãããã¹ããŒãžã§ã¯ã
ORMæåã®ã¢ãããŒãã®ä»£è¡šè
ã¯
次ã®ããã«ãªããŸãã
ãããã®ä»£è¡šè
ã¯ããŸããŸãªæ¹æ³ã§ä»äºãããŠããŸãã åŸè
ãããšãã°DSL-wayã¯ãããŒã¿ããŒã¹ã¹ããŒãã«åŸã£ãŠçæããããªããžã§ã¯ããŸãã¯æååã®ã¿ã䜿çšããŠSQLã¯ãšãªãæ§ç¯ããããšãææ¡ããŸãã ãã®ä»
㯠ãJavaãªããžã§ã¯ããšããŒã¿ããŒã¹ããŒãã«éã®å¯Ÿå¿ãèšè¿°ãã
å¿
èŠããããŸãã ãããããã€ã³ãã§ã¯ãããŸããã ãããã¯ãã¹ãŠãéçºè
ãSQLã¯ãšãªã®äœæããå¯èœãªéãéé¢ããèŠè¿ãã«ORMã®æèãæäŸãããšãã1ã€ã®ã¢ã€ãã¢ã«ãã£ãŠçµã°ããŠããŸãã
äžæ¹ãSQLæåã®ã¢ãããŒãã®ä»£è¡šè
ãéãŸã£ãïŒ
ããããã®åœ¢åŒã®ãããã®ãœãªã¥ãŒã·ã§ã³ã¯ãã¹ãŠã
java.sqlã*ããã±ãŒãžã®ã¢ããªã³ã§ãã ãããŠããããã®ãã¬ãŒã ã¯ãŒã¯ãæ¥ã«ãªãã»ã©ãéçºè
ã¯åœŒããéé¢ãããŸãã ããã§ãããããã䜿çšããå Žåã¯ãæåã«SQLã«ããŽãªãæ€èšããæ¬¡ã«ORMãæ€èšããå¿
èŠããããŸãã
ãã¬ãŒã ã¯ãŒã¯ã®3çªç®ã®ã¯ã©ã¹ã§ãããžã§ãã¬ãŒã¿ãŒã®ååšãç¥ã£ãŠããŸãã ãã®ãããªæ±ºå®ã¯éåžžç¹å®ã®ãããžã§ã¯ãã®ããã«æžãããŠããã圌ããæ®éçã§ããããšã¯é£ããã®ã§ã圌ããããããç²åŸããããšã¯å°é£ã§ãã ãããã®ã¢ã€ãã¢ã¯æ¬¡ã®ãšããã§ããç¹å®ã®ãããžã§ã¯ãã®ç¥èãããŒã¿ããŒã¹ã®ç¥èãããã³ããžãã¹èŠä»¶ã®è©³çްã䜿çšããŠãDAOå±€ãå®å
šã«çæããŸãã ç§ã¯ãã®ãããªæ±ºå®ã«äºåºŠäŒããŸããã SQLã¯ãšãªããããã³ã°ãèšè¿°ãã代ããã«ãDAOã¬ã€ã€ãŒã®ãžã§ãã¬ãŒã¿ãŒã倿Žããå¿
èŠãããå Žåã¯éåžžã«ãŸãã§ãã
äœãæªãã®ïŒ
ORM vs SQL vs Generatorsãšããããã®ã¢ãããŒããŸãã¯ãã®ã¢ãããŒãã«æå³çã«äŸ¡å€å€æãããŸããã§ããã 誰ãããç¶æ³ãšçµã¿åãããŠãäœãéžæããããèªåã§æ±ºããŸãã ããããããã§ã¯ãSQLæåã®ã¹ã¿ã€ã«è¡šçŸãšæŠå¿µè¡šçŸã®äž¡æ¹ã§ãç¹å®ã®éžæè¢ãæäŸããæºåãã§ããŠããŸãã ããããæåã«ãæ¢åã®ãœãªã¥ãŒã·ã§ã³ã®ã³ãŒãã¬ãã«ïŒããã©ãŒãã³ã¹ããããã°ãªã©-ç§ã¯ãããçç¥ããŸãïŒã§æ°ã«å
¥ããªããšèšããŸãã
- åçŽãªããšãéæããããã®ç¹å®ã®åé·æ§
- ãã€ã©ãŒãã¬ãŒãããã€ã©ãŒãã¬ãŒãããã€ã©ãŒãã¬ãŒã...ãããŠåã³ãã€ã©ãŒãã¬ãŒã
- sql-ormãŸãã¯orm-sqlãªãã·ã§ã³ã衚瀺ã§ããã³ãŒãå
ã®ãã€ã³ãã®äžè¶³
- äœããã®åœ¢ã§ãæ¡ä»¶ããã£ã«ã¿ãªã³ã°ããŠSQLã¯ãšãªãæ§ç¯ãã
- ãã¬ãŒã ã¯ãŒã¯APIã䜿çšããããã®å€ãã®ç¥è-ã³ãŒããå£ãåã«+100500ã®ãšã³ãã£ãã£ã«ã€ããŠåŠã¶
äžèšã®å€ãã¯ããããªããããã奜ãã«ãªãããã«ã¯ã©ããªçš®é¡ã®ãã¬ãŒã ã¯ãŒã¯ã§ããå¿
èŠããããŸããïŒã
宣èšçãªã¹ã¿ã€ã«
ã©ã£ã¡ïŒ ç§ã¯ã·ã³ãã«ã ãšæãã®ã§ã圌ã¯ã³ãŒããæžãå§ããŸããã ããããçå£ã«ïŒ 宣èšçã ã¯ããç§ã¯åœä»€çãªãã®ããããã®ãããªããšã§å®£èšçãªã¹ã¿ã€ã«ã®æ¯æè
ã§ãã 宣èšçã¢ãããŒãã«é¢ããŠãJavaã§æåã«æãæµ®ãã¶ã®ã¯äœã§ããïŒ ã¯ãããã£ã2ã€ã®ããšïŒ
ã¢ãããŒã·ã§ã³ãš
ã€ã³ã¿ãŒãã§ãŒã¹ ã ãããã®2ã€ã®ç©è³ªã亀差ããSQLæåã®ãœãªã¥ãŒã·ã§ã³ã®ãã£ãã«ã«åããããå Žåãæ¬¡ã®ããã«ãªããŸãã
ORMpublic class Client { private Long id; private String name; private ClientState state; private Date regTime; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public ClientState getState() { return state; } public void setState(ClientState state) { this.state = state; } public Date getRegTime() { return regTime; } public void setRegTime(Date regTime) { this.regTime = regTime; } } enum ClientState { ACTIVE(1), BLOCKED(2), DELETED(3); private int state; ClientState(int state) { this.state = state; } @TargetMethod public int getState() { return state; } @TargetMethod public static ClientState getClientState(int state) { return values()[state - 1];
public interface IClientDao { @TargetQuery(query = "SELECT id, name, state " + " FROM clients " + " WHERE id = ?", type = QT_SELECT) Client findClient(long clientId); }
ããã¯åçŽãªå®äŸã§ããããã®æ¬è³ªã¯ãåé¡ã®ãã¬ãŒã ã¯ãŒã¯ã«åæ ãããŠãã宣èšã¹ã¿ã€ã«ã®æŠå¿µã匷調ããããšã§ãã ã¢ã€ãã¢èªäœã¯ç¢ºãã«æ°ãããã®ã§ã¯ãªãã2006幎é ã®IBMã®èšäºã§ãã®ãããªããšã«ã€ããŠã®ã¡ã¢ãèŠãŸããããäžéšã®ãã¬ãŒã ã¯ãŒã¯ã¯ãã§ã«ãã®ã¢ã€ãã¢ã䜿çšããŠããŸãã ãããããã®ãããªäŸãèŠãŠãç§ã¯åççã«ããã€ãã®è³ªåãããã§ãããïŒ
- ãããŠãIClientDaoã³ã³ãã©ã¯ããå®è£
ããã®ã¯èª°ã§ãå®è£
ã«ã¢ã¯ã»ã¹ããæ¹æ³ã¯ïŒ
- ãããŠããã£ãŒã«ãã®ãããã³ã°ã¯ã©ãã«èšè¿°ãããŠããŸããïŒ
- ãã£ãšè€éãªãã®ã¯ã©ãã§ããïŒ ãããŠããããã®äŸã¯ãã§ã«3ã»ã³ãã«ããããããŠããŸãã
ç§ã¯ããããã®è³ªåãšãã£ã³ããŒã³ã«çããŠããã¬ãŒã ã¯ãŒã¯ã®æ©èœãæããã«ããããšãææ¡ããŸãã
ãããã·ã®ã¿
>> 1ã ãããŠããã®å¥çŽã誰ãå®è£
ããã©ã®ããã«å®è£
ã«ã¢ã¯ã»ã¹ããã®ã§ããïŒã³ã³ãã©ã¯ãã¯java.lang.reflect.ProxyããŒã«ã䜿çšããŠãã¬ãŒã ã¯ãŒã¯èªäœã«ãã£ãŠå®è£
ãããSQLã®ç®çã§èªåã§å®è£
ããå¿
èŠã¯ãããŸããã ãããŠãå®è£
ãžã®ã¢ã¯ã»ã¹ã¯éåžžã«ç°¡åã§ãã...ã®å©ããåããŠãã¯ãããšããã§ãäŸã§ç€ºãã®ã¯ç°¡åã§ãïŒ
IClientDao clientDao = com.reforms.orm.OrmDao.createDao(connection, IClientDao.class); Client client = clientDao.findClient(1L);
æ¥ç¶ã¯ãããšãã°java.sql.ConnectionãŸãã¯javax.sql.DataSourceã®å®è£
ããŸãã¯äžè¬çãªãªããžã§ã¯ããªã©ãããŒã¿ããŒã¹ã«ã¢ã¯ã»ã¹ããããã®ãªããžã§ã¯ãã§ãã
ã¯ã©ã€ã¢ã³ãã¯ORMãªããžã§ã¯ãã§ããããããããã¬ãŒã ã¯ãŒã¯èªäœããã®å¯äžã®ãã®ã¯com.reforms.ormã¯ã©ã¹ã§ãã
OrmDao㯠ããã¹ãŠã®ããŒãºã®98ïŒ
ãã«ããŒããŸãã
ã³ã³ã»ãã
>> 2ã ãããŠããã£ãŒã«ãã®ãããã³ã°ã¯ã©ãã«èšè¿°ãããŠããŸããïŒäžã§çŽæããããã«ãã¹ã¿ã€ã«ãšã³ã³ã»ããã®2ã€ã®ããšã«è§ŠããŸãã 2çªç®ã®è³ªåã«çããã«ã¯ãã³ã³ã»ããã«ã€ããŠè©±ãå¿
èŠããããŸãã ã¡ãã»ãŒãžã¯ãæ°ãããã®ãææ¡ããããã«ã¯ã解決çã®æ ¹æ¬çãªèŠè§£ãå¿
èŠã§ãããšããããšã§ãã SQL-92ããŒãµãŒã¯ã©ãã§ããïŒ ãã®èããæåã«æãã€ãããšããç§ã¯ãããæããŠãäºåºŠãšåœŒå¥³ã«äŒãããšã¯ãªããšæã£ãã ããããSQLæåã®ãã¬ãŒã ã¯ãŒã¯ã䟿å©ã«ããæ¹æ³ã¯ïŒ å¥ã®ã¢ããªã³ãèŠãŸãããïŒ ãŸãã¯ããã¬ãŒã ã¯ãŒã¯ã®ãã«ããŒã«å¥ã®ãã«ããŒãããŸããïŒ ç§ã®æèŠã§ã¯ããµããŒããããŠããäžé£ã®SQLæ§é ãå¶éããããšããå§ãããŸããè¯ãåŠ¥åæ¡ãšããŠãèŠè¿ãã«äŸ¿å©ãªãã®ãæã«å
¥ããããšã§ãã ãããã³ã°ã¯ãSQLã¯ãšãªãè§£æããåŸã®åŒããªãŒã«åºã¥ããŠããŸãã äžèšã®äŸã§ã¯ãååã¯ãªããžã§ã¯ãã®ORMãã£ãŒã«ãåã«1察1ã§ããããããŸãã ãã¡ããããã¬ãŒã ã¯ãŒã¯ã¯ãããã³ã°ããµããŒãããããè€éã§ãããããã«ã€ããŠã¯å°ãåŸã§èª¬æããŸãã
äŸ
>> 3.ãã£ãšè€éãªãã®ã¯ã©ãã§ããïŒ ãããŠããããã®äŸã¯ãã§ã«3ã»ã³ãã«ããããããŠããŸãããããããã¬ãŒã ã¯ãŒã¯ãããè€éãªããšãè¡ãæ¹æ³ãç¥ããªãå ŽåãSQL-92ããŒãµãŒã«ç
©ããããç¹ã¯ãããŸããïŒ ãããã
ããªã¥ãŒã ã®ãªãäŸã®ãã¹ãŠã衚瀺ããã®ã¯ç°¡åãªããšã§ã¯ãããŸããã ãã¡ãã衚瀺ããŸãããSQLã®ããŒãã«å®£èšãšJavaã³ãŒãã®äžéšã¯çç¥ããŸãã
SQLæåã®ãœãªã¥ãŒã·ã§ã³ã§ç§ãäžåºŠã奜ãŸãªãã£ãæ°å°ãªãããšã®1ã€ã¯ãSQLã¯ãšãªãäœæããå¿
èŠãããããšã§ãã ããšãã°ãç¹å®ã®ãã£ã«ã¿ãªã³ã°åºæºãæå®ãããŠããå Žåãšæå®ãããŠããªãå ŽåããããŸãã ãããŠãããããããªãã¯ãã®ãããªã³ãŒãã®æçããããã¯ããããã®åçŽåãããããŒãžã§ã³ã«ç²ŸéããŠããã§ãããïŒ
ãããŠãç§ã¯ãã®æçããç§ãå€ããããžã§ã¯ãã§æãããäŒãããã«æ£ç¢ºã«æžããŸããã ããã¯ãPreparedStatementã§å€ãèšå®ãããšãã«æ¥ä»ãã§ãã¯ãåã³è¡šç€ºããããšããäºå®ã«ããããããã§ãã ãããŠãç§ãã¡ã®å人ã¯äœãæäŸããŠããŸããïŒ ãããŠã圌ã¯
åçãã£ã«ã¿ãŒãæäŸããŠããŸãã äŸã䜿çšãããšçè§£ãããããªããããäžå®ã®ééã§é¡§å®¢ãèŠã€ããæ¹æ³ãèŠãŠã¿ãŸãããã
public interface IClientDao { @TargetQuery(query = "SELECT id, name, state " + " FROM clients " + " WHERE regTime >= ::begin_date AND " + " regTime < ::end_date", type = QT_SELECT, orm = Client.class) List<Client> findClients(@TargetFilter("begin_date") Date beginDate, @TargetFilter("end_date") Date endDate); }
ãããŠæåŸã®è¡ã¯ãããšãã°beginDateãªã©ã®ãã©ã¡ãŒã¿ãŒå€ãnullã®å Žåãé¢é£ããSQLãã£ã«ã¿ãŒ
regTime> = :: begin_dateãæçµçãªSQLã¯ãšãªããåãåããããã®å Žåãæ¬¡ã®è¡ãããŒã¿ããŒã¹ãµãŒããŒã«ç§»åããããšã§ãã
SELECT id, name, state FROM clients WHERE regTime < ?
äž¡æ¹ã®å€ãnullã®å ŽåãWHEREã»ã¯ã·ã§ã³ã¯æçµã¯ãšãªã«å«ãŸããŸããã ãããŠæ³šæ-ã³ãŒãã«ã¯å®£èšã®ã¿ããããããžãã¯ã¯ãããŸããã ç§ã®æèŠã§ã¯ãæ¬åœã«ä»ã®äººã®è©±ãèããããšæããŸãããããã¯åŒ·åãªæŠåšã§ããããã¬ãŒã ã¯ãŒã¯ã®åŒ·åãªåŽé¢ã§ãã Javaã³ãŒãã«ãããšãç§èªèº«ã¯æ³šéã®ãã¡ã³ã§ã¯ãªããã»ãšãã©ã®ãããžã§ã¯ãã®æ³šéã®å€ãã¯åã«ãã£ãšããããšèšãã§ãããã ãããã£ãŠã圌ã¯å®çŸ©ããä»£æ¿ææ®µãæäŸããŸãã-ãªããžã§ã¯ãã®beanã®ããããã£ã§ãã£ã«ã¿ãªã³ã°ããŸãïŒ
ããªãç°¡æœã§çè§£ããããããšãããããŸããã åçãã£ã«ã¿ã«ã€ããŠã¯ããµããŒãããããŸãã¯ãOVERLAPSãšMATCHãé€ããã¹ãŠã®è¿°èªããé€å€ã§ãããšããããšãå¥ã«è¿°ã¹ã䟡å€ããããŸãã ãã©ã€ããSQLã¹ããŒãã¡ã³ãã§åŸè
ãèŠãããšã¯ãããŸããããSQL-92仿§ã§èšåãããŠããŸãã
ãã¡ããããã¬ãŒã ã¯ãŒã¯ã¯éçãªå¿
é ãã£ã«ã¿ãŒããµããŒãããŠããŸãã ãããŠããããã¯HQLãSpringTemplateã®æ§æãšåãã§ã-
'ïŒnamed parameter' ã
確ãã«ã1ã€ã®åé¡ã¯åžžã«éçãã£ã«ã¿ãŒã«é¢é£ä»ããããŠããŸãïŒãnullãã©ã¡ãŒã¿ãŒãžã®å¿çæ¹æ³ãïŒ ç°¡åãªçãã¯ããäŸå€ãæããŠãã ãããããªãã¯ééããããªãã§ãããããšèšã£ãŠããããã§ãã ããããããã¯åžžã«å¿
èŠã§ããïŒ ããšãã°ãç¹å®ã®ã¹ããŒã¿ã¹ã®ã¯ã©ã€ã¢ã³ããããŒãããŠãããã確èªããŠã¿ãŸãããã
public interface IClientDao { @TargetQuery(query = "SELECT id, name, state " + " FROM clients " + " WHERE state = :state", type = QT_SELECT, orm = Client.class) List<Client> findClients(@TargetFilter("state") ClientState state); }
ããããããŒã¿ããŒã¹å
ã®ã¯ã©ã€ã¢ã³ãã¹ããŒã¿ã¹ãååšããªãå Žåãã¿ã¹ã¯ã¯äœããã¹ãã§ããããïŒ ç¶æ
åã§ã¯NULLå€ãèš±å¯ããããããã¹ããŒãã¬ã¹ã®ã¯ã©ã€ã¢ã³ããæ£ç¢ºã«æ€çŽ¢ããå¿
èŠããããŸããïŒ SQL-92ããŒãµãŒã®æŠå¿µãåã³ä¿åãããŸãã
'ïŒstate'ãã
'ïŒstate ïŒã®ã¹ããŒã¿ã¹ã§ãã£ã«ã¿ãŒåŒã眮ãæããã ãã§åå
ã§ãã 'ãã¬ãŒã ã¯ãŒã¯ãšã³ãžã³ã¯ãWHEREã»ã¯ã·ã§ã³ã次ã®åœ¢åŒã«å€æŽããŸã
' ... WHERE state IS NULL ' ããã¡ãããnullãã¡ãœããã®å
¥åã«å«ãŸããªãéãã
ãããã³ã°ã«ã€ããŠ
ã¯ãšãªã®ãã£ã«ã¿ãŒã¯ç¢ºãã«åªããŠããŸãããJavaãœãªã¥ãŒã·ã§ã³ã§ã¯ãSQLã¯ãšãªã®çµæãORMãªããžã§ã¯ããšãã®ãã€ã³ãã£ã³ã°ããã³ãšã³ãã£ãã£èªäœã®ãã€ã³ãã£ã³ã°ã«ãããã³ã°ããããšã«å€ãã®æ³šæãæãããŸãã éåžžã«å€ãã®JPA仿§ãã©ãã ã䟡å€ãããããèŠãŠãã ããã ãŸãã¯ãResultSetãããã¡ã€ã³ãªããžã§ã¯ããžã®ç§»è¡ããŸãã¯PreparedStatementã§ã®å€ã®èšå®ã§ãããžã§ã¯ãã確èªããŸãã é¢åã§ãããïŒ ä¿¡é Œæ§ãäœããšã¬ã¬ã³ãã§ã¯ãªããããããŸããããééããªãã·ã³ãã«ãªéãéžã³ãŸããã SQLã¯ãšãªã«çŽæ¥ãããã³ã°ãé
眮ã§ããã®ã«ããªããããŸã§ã®ãšããã«è¡ããŸããã ãããæåã«æãæµ®ãã¶ããšã§ããïŒ
äŸãèŠãŠã¿ãŸãããã ãããŠãããã«åé¡ããããŸããããŒãã«ã®ãã¹ãŠã®åãORMã¯ã©ã¹ã®ãã£ãŒã«ããšç°ãªããORMã«ãã¹ãããããªããžã§ã¯ããããå Žåãã¯ãšãªã®çµæããããããæ¹æ³ã¯ïŒ
ORMã¯ã©ã¹ public class Client { private long clientId; private String clientName; private ClientState clientState; private Address address; private Date regTime;
public interface IClientDao { @TargetQuery(query = "SELECT cl.id AS client_id, " +
ãã®äŸã¯ãå®éã®æ¡ä»¶ã«ããè¿ããã®ã§ãã ãããã³ã°ã®çŸåŠã¯ééããªãäžååã§ãããããã§ããã®ãªãã·ã§ã³ã¯ç¡éã®æ³šéãxmlãã¡ã€ã«ãããç§ã«è¿ãã§ãã ã¯ããä¿¡é Œæ§ã«åé¡ããããŸããã©ã³ã¿ã€ã ãšORMãªããžã§ã¯ãã®ãªãã¡ã¯ã¿ãªã³ã°ã®åé¡ããããŸããSQLã䜿çšããŠãæ°ã«å
¥ãã®ããŒã¿ããŒã¹ã¯ã©ã€ã¢ã³ãã§ãã¹ãããããšã¯åžžã«å¯èœãšã¯éããŸããã ããããç§ã¯ãããçµ¶æçãªç¶æ³ã ãšã¯èšããŸããããã¹ãã¯ã©ã³ã¿ã€ã ãšãªãã¡ã¯ã¿ãªã³ã°ãç¯çŽããŸãã ããŒã¿ããŒã¹ã¯ã©ã€ã¢ã³ãã§èŠæ±ã確èªããã«ã¯ããã¯ãªãŒã³ãã«ããå¿
èŠããããŸãã å¥ã®ãã€ã³ãïŒ
ã©ã®SQLã¯ãšãªãããŒã¿ããŒã¹ãµãŒããŒã«éä¿¡ãããŸããïŒ ãã¹ãŠã®ASã»ã¯ã·ã§ã³ã¯ãªã¯ãšã¹ãããã«ãããããŸãã ããšãã°ãclient_idã«cidã®å€ããšã€ãªã¢ã¹ãšããŠä¿åããå¿
èŠãããå Žåã¯ããã®ãšã€ãªã¢ã¹ã®åã«ã³ãã³ã远å ããå¿
èŠããããŸãïŒcl.id AS
cidïŒ client_idããã³cidã¯æå¹ã§ã-> cl.id AS cid as final requestã
ãããŠæåŸã«ãå°ãã®ããžãã¹ããžãã¯
1ã€ã®æäœã1ã€ã®å®£èšã¡ãœããã§ããå Žåã®çæ³çãªã¿ãªã ãããŠãããã¯ç¢ºãã«è¯ãããšã§ãããããã¯åžžã«ããã§ã¯ãããŸããã ã¢ããªã±ãŒã·ã§ã³ã§ã¯ãããŒã¿ã®äžéšã1ã€ã®SQLã¯ãšãªã«ãã£ãŠåœ¢æãããä»ã®éšåã2çªç®ã®SQLã¯ãšãªãªã©ã«ãã£ãŠåœ¢æãããå Žåãå€ãã®å Žåããã€ããªãããŸãã¯è€åãšã³ãã£ãã£ãååŸããå¿
èŠããããŸãã ãŸãã¯ãç¹å®ã®æ¥çããã§ãã¯ãè¡ããŸãã ãã¶ãããã¯ã¿ãªèªäœã®æ¬è³ªã§ã¯ãªããããããŸãããããã®ãããªæäœã¯éåžžè¡ãããåé¢ãããŸãããããã°ã©ã ã®ããŸããŸãªéšåããåŒã³åºãããã«å
¬éãããŸãã ããããããžãã¹ããžãã¯ãTaoã«å
¥ãããå Žåãã€ã³ã¿ãŒãã§ã€ã¹ã§äœããã¹ãã§ããããïŒ ç§ã«ãšã£ãŠããããŠå€ãã®éçºè
ã®æå€ãªããšã«ãjava8ã«ã¯ããã©ã«ãã®ã¡ãœãããç»å ŽããŸããã ãã£ããã ã¯ãã2017幎ãã€ãŒãã«ããããããã¥ãŒã¹ãæªãããšãç¥ã£ãŠããŸãããããã§ãã¬ãŒã§ããŸããïŒ ããããDAOã¬ã€ã€ãŒã®éçºã®åºç€ãšããŠæ¡çšãããŠãã宣èšåã®ã¹ã¿ã€ã«ãšãããžãã¹ããžãã¯ã®æ¢å®ã®ã¡ãœãããæšªæãããšã©ããªãã§ããããã ãªããžã§ã¯ãã®ORMãã§ãã¯ãnullã«è¿œå ããå¥ã®DAOããããŒã¿ãããŒãããå¿
èŠãããå Žåã¯ã©ããªãããèŠãŠã¿ãŸãããã
public interface IClientDao {
èªåãæ£ãããã©ããã¯ããããŸãããã
ã€ã³ã¿ãŒãã§ã€ã¹ããã°ã©ãã³ã°ãšåŒã³ããã§ãã ãã®ãããªãã®ã å®éãç§ãäŒãããã£ãããšãã¹ãŠã ãã ããèŠå®ããããã®ãé€ãããã¬ãŒã ã¯ãŒã¯ã§ã§ããããšã¯ããã ãã§ã¯ãããŸããïŒéãããæ°ã®åã®ãµã³ããªã³ã°ãã¹ããŒã ã®ç®¡çãããŒãžä»ãïŒãã¹ãŠã§ã¯ãããŸããïŒãããŒã¿ã®é åºãã¬ããŒããæŽæ°ãèµ·åãåé€ã®æäœ
ãããã«
èªè
ã®çãããç§ã¯ãã®æºããããSQLãã¬ãŒã ã¯ãŒã¯ã®äžçã«äœãæ°ãããã®ãããããããšãã§ãããã©ããã¯ç¥ããŸããã倿ããã®ã¯ããªã次第ã§ãã ããããç§ã¯è©ŠããŸãããã詊ããããšã«æºè¶³ããŠããŸãã ææ¡ãããã¢ãããŒããšã¢ã€ãã¢ãããã°ãããæ¹å€çã«èŠãããšã楜ãã¿ã«ããŠããŸãã ãã®ãœãªã¥ãŒã·ã§ã³ã¯githubã§å©çšã§ããŸãããªã³ã¯ã¯ããSQLæåã®ãã¬ãŒã ã¯ãŒã¯ã®ãªã¹ãã®æåŸã®è¡ã®
æŠèŠãã®ç« ã§æ¢ã«ç€ºãããŠããŸãã ãã¹ãŠæé«ã
ãšãã£ããªã¢ã«
N1ã ãªã¹ããè¿ãã¡ãœããã®@TargetQueryã¢ãããŒã·ã§ã³ã«ãªããžã§ã¯ãã¿ã€ãClient.classã远å ããŸããã