<?xml version="1.0" encoding="UTF-8"?> <document xmlns="http://maven.apache.org/XDOC/2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd"> <properties> <title>スクリプト</title> </properties> <body> <section name="目次"> <ul> <li><a href="#概è¦">概è¦</a></li> <li><a href="#スクリプトファイル">スクリプトファイル</a></li> <li><a href="#スクリプトã®è¨˜è¿°ä¾‹">スクリプトã®è¨˜è¿°ä¾‹</a></li> </ul> </section> <section name="概è¦"> <p> SQLスクリプトã®å®Ÿè¡Œã‚’è¡Œã†ã«ã¯ã€ <a href="../../apidocs/org/seasar/doma/Script.html"><code>@Script</code></a>ã‚’Daoã®ãƒ¡ã‚½ãƒƒãƒ‰ã«æ³¨é‡ˆã—ã¾ã™ã€‚ </p> <source><![CDATA[@Config(config = AppConfig.class) public interface EmployeeDao { @Script void createTable(); ... }]]></source> <p> メソッドã®æˆ»ã‚Šå€¤ã®åž‹ã¯voidã§ãªã‘ã‚Œã°ã„ã‘ã¾ã›ã‚“。パラメータã®æ•°ã¯0ã§ãªã‘ã‚Œã°ã„ã‘ã¾ã›ã‚“。 </p> <p> ã¾ãŸã€ãƒ¡ã‚½ãƒƒãƒ‰ã«å¯¾å¿œã™ã‚‹ã‚¹ã‚¯ãƒªãƒ—トファイルãŒå¿…é ˆã§ã™ã€‚ </p> </section> <section name="スクリプトファイル"> <subsection name="é…ç½®å ´æ‰€"> <p> スクリプトファイルã¯ã‚¯ãƒ©ã‚¹ãƒ‘スãŒé€šã£ãŸ <code>META-INF</code> ディレクトリ以下ã«é…ç½®ã—ãªã‘ã‚Œã°ã„ã‘ã¾ã›ã‚“。 </p> </subsection> <subsection name="ファイルåã®å½¢å¼"> <p> ファイルåã¯ã€æ¬¡ã®å½¢å¼ã§ãªã‘ã‚Œã°ã„ã‘ã¾ã›ã‚“。 </p> <source>META-INF/Daoã®ã‚¯ãƒ©ã‚¹ã®å®Œå…¨ä¿®é£¾åをディレクトリã«å¤‰æ›ã—ãŸã‚‚ã®/Daoã®ãƒ¡ã‚½ãƒƒãƒ‰å.script</source> <p> 例ãˆã°ã€ Daoã®ã‚¯ãƒ©ã‚¹ãŒ <code>aaa.bbb.EmployeeDao</code>㧠マッピングã—ãŸã„メソッド㌠<code>createTable</code> ã®å ´åˆã€ãƒ‘スåã¯æ¬¡ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚ </p> <source>META-INF/aaa/bbb/EmployeeDao/createTable.script</source> <p> 複数ã®RDBMSã«å¯¾å¿œã™ã‚‹å¿…è¦ãŒã‚り特定ã®RDBMSã§ã¯åˆ¥ã®ã‚¹ã‚¯ãƒªãƒ—トファイルを使ã„ãŸã„å ´åˆã€ <code>.script</code> ã®å‰ã«ãƒã‚¤ãƒ•ãƒ³åŒºåˆ‡ã‚Šã§RDBMSåを入れるã“ã¨ã§ã€å„ªå…ˆçš„ã«ä½¿ç”¨ã™ã‚‹ãƒ•ã‚¡ã‚¤ãƒ«ã‚’指示ã§ãã¾ã™ã€‚ ãŸã¨ãˆã°ã€PostgreSQL専用ã®SQLファイルã¯æ¬¡ã®åå‰ã«ã—ã¾ã™ã€‚ </p> <source>META-INF/aaa/bbb/EmployeeDao/createTables-postgres.script</source> <p> ã“ã®å ´åˆã€PostgreSQLを使用ã—ã¦ã„ã‚‹å ´åˆã«é™ã‚Šã€<code>META-INF/aaa/bbb/EmployeeDao/createTable.script</code> よりも <code>META-INF/aaa/bbb/EmployeeDao/createTable-postgres.script</code> ãŒå„ªå…ˆçš„ã«ä½¿ç”¨ã•ã‚Œã¾ã™ã€‚ </p> <p> RDBMSåã¯ã€ <code>org.seasar.doma.jdbc.dialect.Dialect</code>ã® <code>getName</code>メソッドã®å€¤ãŒä½¿ç”¨ã•ã‚Œã¾ã™ã€‚ ã‚らã‹ã˜ã‚用æ„ã•ã‚ŒãŸDialectã«ã¤ã„ã¦ãã‚Œãžã‚Œã®RDBMSåを以下ã®è¡¨ã«ç¤ºã—ã¾ã™ã€‚ </p> <table> <tr> <th>データベース</th> <th>方言クラスã®åå‰</th> <th>RDBMSå</th> </tr> <tr> <td>DB2</td> <td><code>org.seasar.doma.jdbc.dialect.Db2Dialect</code></td> <td><code>db2</code></td> </tr> <tr> <td>H2 Database Engine 1.2.126</td> <td><code>org.seasar.doma.jdbc.dialect.H212126Dialect</code></td> <td><code>h2</code></td> </tr> <tr> <td>H2 Database Engine</td> <td><code>org.seasar.doma.jdbc.dialect.H2Dialect</code></td> <td><code>h2</code></td> </tr> <tr> <td>HSQLDB</td> <td><code>org.seasar.doma.jdbc.dialect.HsqldbDialect</code></td> <td><code>hsqldb</code></td> </tr> <tr> <td>Microsoft SQL Server 2008</td> <td><code>org.seasar.doma.jdbc.dialect.Mssql2008Dialect</code></td> <td><code>mssql2008</code></td> </tr> <tr> <td>Microsoft SQL Server</td> <td><code>org.seasar.doma.jdbc.dialect.MssqlDialect</code></td> <td><code>mssql</code></td> </tr> <tr> <td>MySQL</td> <td><code>org.seasar.doma.jdbc.dialect.MySqlDialect</code></td> <td><code>mysql</code></td> </tr> <tr> <td>Oracle Database</td> <td><code>org.seasar.doma.jdbc.dialect.OracleDialect</code></td> <td><code>oracle</code></td> </tr> <tr> <td>PostgreSQL</td> <td><code>org.seasar.doma.jdbc.dialect.PostgresDialect</code></td> <td><code>postgres</code></td> </tr> <tr> <td>SQLite</td> <td><code>org.seasar.doma.jdbc.dialect.SqliteDialect</code></td> <td><code>sqlite</code></td> </tr> </table> </subsection> <subsection name="エンコーディング"> <p> スクリプトファイルã®ã‚¨ãƒ³ã‚³ãƒ¼ãƒ‡ã‚£ãƒ³ã‚°ã¯UTF-8ã§ãªã‘ã‚Œã°ã„ã‘ã¾ã›ã‚“。 </p> </subsection> <subsection name="区切り文å—"> <p> スクリプトファイルã®åŒºåˆ‡ã‚Šæ–‡å—ã«ã¯ã€ã‚¹ãƒ†ãƒ¼ãƒˆãƒ¡ãƒ³ãƒˆã®åŒºåˆ‡ã‚Šæ–‡å—ã¨ãƒ–ãƒãƒƒã‚¯ã®åŒºåˆ‡ã‚Šæ–‡å—ã®2種類ãŒã‚ã‚Šã¾ã™ã€‚ </p> <p> ステートメントã®åŒºåˆ‡ã‚Šæ–‡å—ã¯ã‚»ãƒŸã‚³ãƒãƒ³ï¼ˆ;)ã§ã™ã€‚ </p> <p> ブãƒãƒƒã‚¯ã®åŒºåˆ‡ã‚Šæ–‡å—ã¯ã€æ–¹è¨€ã‚¯ãƒ©ã‚¹ã®ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã®å€¤ãŒä½¿ç”¨ã•ã‚Œã¾ã™ã€‚ </p> <table> <tr> <th>データベース</th> <th>方言クラスã®åå‰</th> <th>ブãƒãƒƒã‚¯ã®åŒºåˆ‡ã‚Šæ–‡å—</th> </tr> <tr> <td>DB2</td> <td><code>org.seasar.doma.jdbc.dialect.Db2Dialect</code></td> <td>@</td> </tr> <tr> <td>H2 Database Engine 1.2.126</td> <td><code>org.seasar.doma.jdbc.dialect.H212126Dialect</code></td> <td>ãªã—</td> </tr> <tr> <td>H2 Database Engine</td> <td><code>org.seasar.doma.jdbc.dialect.H2Dialect</code></td> <td>ãªã—</td> </tr> <tr> <td>HSQLDB</td> <td><code>org.seasar.doma.jdbc.dialect.HsqldbDialect</code></td> <td>ãªã—</td> </tr> <tr> <td>Microsoft SQL Server 2008</td> <td><code>org.seasar.doma.jdbc.dialect.Mssql2008Dialect</code></td> <td>GO</td> </tr> <tr> <td>Microsoft SQL Server</td> <td><code>org.seasar.doma.jdbc.dialect.MssqlDialect</code></td> <td>GO</td> </tr> <tr> <td>MySQL</td> <td><code>org.seasar.doma.jdbc.dialect.MySqlDialect</code></td> <td>/</td> </tr> <tr> <td>Oracle Database</td> <td><code>org.seasar.doma.jdbc.dialect.OracleDialect</code></td> <td>/</td> </tr> <tr> <td>PostgreSQL</td> <td><code>org.seasar.doma.jdbc.dialect.PostgresDialect</code></td> <td>$$</td> </tr> <tr> <td>SQLite</td> <td><code>org.seasar.doma.jdbc.dialect.SqliteDialect</code></td> <td>ãªã—</td> </tr> </table> <p> ブãƒãƒƒã‚¯ã®åŒºåˆ‡ã‚Šæ–‡å—ã¯ã€ã‚¢ãƒŽãƒ†ãƒ¼ã‚·ãƒ§ãƒ³ã®<code>blockDelimiter</code>è¦ç´ ã§æ˜Žç¤ºã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚アノテーションã§æŒ‡å®šã—ãŸå ´åˆã€æ–¹è¨€ã‚¯ãƒ©ã‚¹ã®ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã®å€¤ã‚ˆã‚Šã‚‚優先ã•ã‚Œã¾ã™ã€‚ </p> <source><![CDATA[ @Script(blockDelimiter = "GO") void createTable(); ]]></source> </subsection> <subsection name="エラー発生時ã®ç¶™ç¶šå®Ÿè¡Œ"> <p> デフォルトã§ã¯ã€ã‚¹ã‚¯ãƒªãƒ—トä¸ã®ã©ã‚Œã‹ã®SQLã®å®Ÿè¡ŒãŒå¤±æ•—ã™ã‚Œã°ã€å‡¦ç†ã¯ãã“ã§æ¢ã¾ã‚Šã¾ã™ã€‚ ã—ã‹ã—ã€ã‚¢ãƒŽãƒ†ãƒ¼ã‚·ãƒ§ãƒ³ã®<code>haltOnError</code>è¦ç´ ã«<code>false</code>を指定ã™ã‚‹ã“ã¨ã§ã€ã‚¨ãƒ©ãƒ¼ç™ºç”Ÿæ™‚ã«å‡¦ç†ã‚’継続ã•ã›ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ </p> <source><![CDATA[ @Script(haltOnError = false) void createTable(); ]]></source> </subsection> </section> <section name="スクリプトã®è¨˜è¿°ä¾‹"> <p> スクリプトã¯ã‚¹ã‚¯ãƒªãƒ—トファイルã«æ¬¡ã®ã‚ˆã†ã«è¨˜è¿°ã§ãã¾ã™ã€‚ ã“ã®ä¾‹ã¯ã€Oracle Databaseã«æœ‰åŠ¹ãªã‚¹ã‚¯ãƒªãƒ—トã§ã™ã€‚ </p> <source><![CDATA[/* * テーブル定義(SQLステートメント) */ create table EMPLOYEE ( ID numeric(5) primary key, -- è˜åˆ¥å NAME varchar2(20) -- åå‰ ); /* * データã®è¿½åŠ (SQLステートメント) */ insert into EMPLOYEE (ID, NAME) values (1, 'SMITH'); /* * プãƒã‚·ãƒ¼ã‚¸ãƒ£ãƒ¼å®šç¾©ï¼ˆSQLブãƒãƒƒã‚¯ï¼‰ */ create or replace procedure proc ( cur out sys_refcursor, employeeid in numeric ) as begin open cur for select * from employee where id > employeeid order by id; end proc_resultset; / /* * プãƒã‚·ãƒ¼ã‚¸ãƒ£ãƒ¼å®šç¾©2(SQLブãƒãƒƒã‚¯ï¼‰ */ create or replace procedure proc2 ( cur out sys_refcursor, employeeid in numeric ) as begin open cur for select * from employee where id > employeeid order by id; end proc_resultset; / ]]></source> <p> コメントã¯1行コメント(--)ã¨ãƒ–ãƒãƒƒã‚¯ã‚³ãƒ¡ãƒ³ãƒˆï¼ˆ/* */)ã®2種類ãŒä½¿ç”¨ã§ãã¾ã™ã€‚ コメントã¯å–り除ã‹ã‚Œã¦ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã¸ç™ºè¡Œã•ã‚Œã¾ã™ã€‚ </p> <p> 1ã¤ã®SQLステートメントã¯è¤‡æ•°è¡Œã«åˆ†ã‘ã¦è¨˜è¿°ã§ãã¾ã™ã€‚ ステートメントã¯ã‚»ãƒŸã‚³ãƒãƒ³ï¼ˆ;)ã§åŒºåˆ‡ã‚‰ãªã‘ã‚Œã°ã„ã‘ã¾ã›ã‚“。 改行ã¯ã‚¹ãƒ†ãƒ¼ãƒˆãƒ¡ãƒ³ãƒˆã®åŒºåˆ‡ã‚Šã¨ã¯ã¿ãªã•ã‚Œã¾ã›ã‚“。 </p> <p> ストアドプãƒã‚·ãƒ¼ã‚¸ãƒ£ãƒ¼ãªã©ã®ãƒ–ãƒãƒƒã‚¯ã®åŒºåˆ‡ã‚Šã¯ã€æ–¹è¨€ã‚¯ãƒ©ã‚¹ã®ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã®å€¤ã‹ã€@Scriptã®<code>blockDelimiter</code>è¦ç´ ã«æŒ‡å®šã—ãŸå€¤ã‚’使用ã—ã¦ç¤ºã›ã¾ã™ã€‚ ã“ã®ä¾‹ã§ã¯ã€Oracle Database用ã®æ–¹è¨€ã‚¯ãƒ©ã‚¹ã®ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã®åŒºåˆ‡ã‚Šæ–‡å—ã§ã‚るスラッシュ(/)を使用ã—ã¦ã„ã¾ã™ã€‚ ブãƒãƒƒã‚¯ã® 区切り文å—ã¯è¡Œé ã«è¨˜è¿°ã—ã€åŒºåˆ‡ã‚Šæ–‡å—ã®å¾Œã‚ã«ã¯ä½•ã‚‚記述ã—ãªã„よã†ã«ã—ã¦ãã ã•ã„。 ã¤ã¾ã‚Šã€åŒºåˆ‡ã‚Šæ–‡å—ã ã‘ã®è¡Œã¨ã—ãªã‘ã‚Œã°ã„ã‘ã¾ã›ã‚“。 </p> </section> </body> </document>