ããã¯PostgreSQL Advent Calendar 2015 - Qiitaã®è¨äºã§ãã
æ¨æ¥ã¯sawada_masahikoããã®PostgreSQL開発の基本動作まとめ - Qiitaã§ããï¼
SIerã¨ããã°ãã½ã¼ã¹ã³ã¼ãã®èªåçæã§ããï¼
éçºãé²ãã¦ããããã§ãã³ãã³ãã¨å¤ãã£ã¦ãããã¼ãã«æ§æããã
ãããªä¸ã§ãã¾ã£ããã½ã¼ã¹ã³ã¼ãã触ããã«ï¼sqlãjavaã触ããªãï¼ã¤ã¾ã誰ã§ãï¼ã©ããªäººã§ãï¼ï¼ä½æ¥ã§ããï¼ï¼ï¼ï¼
ãã¼ãã«æ§ç¯ãããã¼ã¿æå
¥ãããã«ã¯Entityã¯ã©ã¹ãçæãããã¨ãåºæ¥ããã¼ã«(mavenãã©ã°ã¤ã³)ããä»ã®ããã¸ã§ã¯ãã§ä½¿ã£ã¦ããã®ã§ãããã®ç´¹ä»ã¨ä½¿ãããã説æãã¾ãã
ããããªDBã«å¯¾å¿ãã¦ãããã©ãä»ã®ããã¸ã§ã¯ãã§ã¯PostgreSQLã使ã£ã¦ããã®ã§ãä»åã¯PostgreSQLçã®ä½¿ããã説æã§ãï¼*1
ãªããä»å使ã£ã¦ããPostgreSQLã®ãã¼ã¸ã§ã³ã¯9.1.15ã§ãï¼
â å¿ è¦ãªãã®
- PostgreSQL ï¼ã¤ã³ã¹ãã¼ã«ã¨ã¦ã¼ã¶ä½æãå®äºãã¦ãããã®ï¼
- maven
- ObjectBrowserERï¼ãã¼ãã«ã®èªåçæã§å¿ è¦ãã©ã¤ã»ã³ã¹ãããï¼
- ããã¸ã§ã¯ãç¨ã®maven ãªãã¸ããªï¼ããããã¸ã§ã¯ãã®äººã«ãã³ããã¡ã¤ã«ããæè»½ã«é å¸ããããªããï¼ï¼ãã¡ã®ããã¸ã§ã¯ãã§ã¯Artifactoryã使ã£ã¦ã¾ãï¼
â ããããã¿ããªèªåçæã£ã¦ã©ããã¦ãã®ï¼
Googleããã§èª¿ã¹ã¦ã¿ãã¨ããããªæãã§S2JDBC-Genã使ã£ã¦ãã人ãå¤ããã
ã§ããS2JDBC-Genã®èª¬æãè¦ãã¨ããããªæãã§DBã«ãã¼ãã«ããããã¨åæã§è¨è¼ããã¦ããã
ãã¤ãçæããå¾ã¯ãEntityãã¡ã¤ã«ãä¿®æ£ããçãªãã¨ãæããã¦ããã
ï¼ã¿ããªãã¿ããªããã¼ãã«ãä½ãããããããªãï¼Javaãä¿®æ£ã§ãããããããªãï¼ï¼
ãã£ããã£åå¾å ï¼Seasar2 - S2JDBC-Gen - S2JDBC-Genとは
ã§ããã°ãsqlãããããªãã¦ããJavaãããããªãã¦ãããªãããã¼ã«ãåæã«ãããªã«ãã£ã¨ãã¦ã»ããï¼ï¼
â ãããªæ©ã¿ãè§£æ¶ãã¦ããããã¼ã«ããã¡ã
ã³ã³ã»ããã¯@kawasimaãããシステムエンジニア Advent Calendar 2015 - Qiitaã§è©±ãã¦ããã¾ããï¼
qiita.com
ä»ç§ãããããã¸ã§ã¯ãã®é£ã®é£ãããã®ãã¼ã ã®äººéãä½ã£ã¦ã(ã»_ã»)
ããã¯S2JDBC-Genãã©ãããã¦ããã®ã§ãåºæ¬çã«ã¯S2JDBC-Genã¨åãããã«ãããã§ããï¼
ãã£ãããªèª¬æã«ãªãã¾ãããä¸ã®å³ã®ããã«ãERå³ã¨ãã¼ã¿ããããã°å®è¡ã§ããã®ã§ãsqlã¨Javaãæ¸ããªãã¦ãããã¨ããï¼
â ãã£ã¦ã¿ãã
âã¾ãã¯ERå³ãç¨æãã
ObjectBrowserERã使ç¨ãã¦ERå³ãæãã¦ããã
ããã§ã¯ãç¹ã«sqlãæ¸ãããããå¿
è¦ã¯ãªãã¦ããã¹ã¦GUIã§ã®æä½ã«ãªãã
ãããªæãã§ERå³ãæãã
âcsvãã¡ã¤ã«ã«ãã¼ã¿ãæ¸ã
ãã¼ãã«ã«æ ¼ç´ãããã¼ã¿ãcsvãã¡ã¤ã«ã§æ¸ãã¦ããã
ã¡ãªã¿ã«ãcsvãã¡ã¤ã«åã¯[ãã¼ãã«å].csvã«ããã
âgsp-dba-pluginããã¼ã«ã«ã§ãã«ããã
ãã ããããã¯ã»ã³ãã©ã«ã«ã¯ã¾ã ãªãã®ã§ããã¼ã«ã«ã§buildãã¦ããå¿
è¦ãããã
ï¼ãã¤ãArtifactoryãªã©ã®ããã¸ã§ã¯ãç¨ã®mavenãªãã¸ããªã«jarãæ ¼ç´ãã¦ããå¿
è¦ããããï¼
以ä¸ã³ãã³ããå©ãã¨ããã«ããå®è¡ããã¦ãã¼ã«ã«ã®~/.m2/repositoryãã©ã«ãã«jarãã§ããï¼
ãæè»½ã
// gsp-dba-pluginããã«ãï¼ > git clone https://github.com/coastland/gsp-dba-maven-plugin.git > cd gsp-dba-maven-plugin > mvn install
âpomãæ¸ã
ãã£ã¨PostgreSQLãåºã¦ããï¼
pomã«ãããªæãã§ãã©ã°ã¤ã³ãè¨å®ãã¦ãã
<build> <plugins> <plugin> <groupId>jp.co.tis.gsp</groupId> <artifactId>gsp-dba-maven-plugin</artifactId> <version>3.0.0</version> <configuration> <!-- DBã®æ å ±ãæ¸ãã¦ãã --> <driver>org.postgresql.Driver</driver> <url>jdbc:postgresql://localhost:5432/postgres</url> <!-- ã¦ã¼ã¶ã¯äºåã«ä½ã£ã¦ãã --> <adminUser>postgres</adminUser> <adminPassword>postgres</adminPassword> <user>postgres</user> <password>postgres</password> <!-- ããã§æå®ããã¹ãã¼ãåã«ãªã --> <schema>sample</schema> <!-- csvãã¡ã¤ã«ã®æ ¼ç´å ãã¹ããã¼ã¿ãèªã¿è¾¼ãã --> <dataDirectory>src/test/resources/data</dataDirectory> <!-- ERå³ã®æ ¼ç´å --> <erdFile>src/main/resources/entity/data-model.edm</erdFile> <lengthSemantics>CHAR</lengthSemantics> <!-- Entityã¯ã©ã¹ã¯com.syobochim.entityããã±ã¼ã¸ã«åºæ¥ã --> <rootPackage>com.syobochim</rootPackage> <entityPackageName>entity</entityPackageName> <!-- Entityã¯ã©ã¹ã«ã¢ã¯ã»ãµã¤ãããã©ãã --> <useAccessor>true</useAccessor> <!-- jarãåºæ¥ããã©ãjavaãã¡ã¤ã«ãã©ãã«çæããã --> <javaFileDestDir>target/generated-sources/entity</javaFileDestDir> </configuration> <dependencies> <!-- ããã¸ã§ã¯ãã§ä½¿ç¨ããDB製åã«ããããJDBCãã©ã¤ãã«ä¿®æ£ãã¦ãã ããã --> <dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> <version>9.4-1201-jdbc41</version> </dependency> </dependencies>
ãã®ã³ã¼ãã¯ãã¡ã
sandbox/gsp-dba-plugin-sample at master · syobochim/sandbox · GitHub
âå®è¡ããï¼
ãããªæãã§ã³ãã³ããå®è¡ããã
> mvn install
ã¨ããããªæãã§targeté ä¸ã«jarãEntityãçæãããï¼
ââsrc â ââmain â â ââjava â â ââresources â â ââentity â â data-model.edm â â â ââtest â ââjava â ââresources â ââdata â DEPARTMENT.csv â EMPLOYEE.csv â ââtarget â sample-1.0-SNAPSHOT.jar â ââclasses â â convention.dicon â â jdbc.dicon â â s2jdbc.dicon â â â ââentity â data-model.edm â ââddl â 10_CREATE_DEPARTMENT.sql â 10_CREATE_EMPLOYEE.sql â 20_CREATE_PK_DEPARTMENT.sql â 20_CREATE_PK_EMPLOYEE.sql â 30_CREATE_FK_EMPLOYEE01.sql â ââdump â sample-testdata-1.0-SNAPSHOT.jar â sample.dmp â ââgenerated-sources â ââentity â ââcom â ââsyobochim â ââentity â Department.java â Employee.java â ââmaven-archiver â pom.properties â ââmaven-status â ââmaven-compiler-plugin â ââcompile â â ââdefault-compile â â inputFiles.lst â â â ââtestCompile â ââdefault-testCompile â inputFiles.lst â ââtest-classes ââdata DEPARTMENT.csv EMPLOYEE.csv
çæã§ããJavaã¯ãããªæã
package com.syobochim.entity; import java.io.Serializable; import java.util.List; import javax.annotation.Generated; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.OneToMany; import javax.persistence.Table; /** * DEPARTMENT * */ @Generated("GSP") @Entity @Table(name = "department") public class Department implements Serializable { private static final long serialVersionUID = 1L; /** DEPARTMENT_ID */ private Integer departmentId; /** DEPARTMENT_NAME */ private String departmentName; /** employeeListé¢é£ãããã㣠*/ private List<Employee> employeeList; /** * DEPARTMENT_IDãè¿ãã¾ãã * * @return DEPARTMENT_ID */ @Id @GeneratedValue(generator = "generator", strategy = GenerationType.AUTO) @Column(name = "department_id", precision = 10, nullable = false, unique = true) public Integer getDepartmentId() { return departmentId; } /** * DEPARTMENT_IDãè¨å®ãã¾ãã * * @param departmentId DEPARTMENT_ID */ public void setDepartmentId(Integer departmentId) { this.departmentId = departmentId; } /** * DEPARTMENT_NAMEãè¿ãã¾ãã * * @return DEPARTMENT_NAME */ @Column(name = "department_name", length = 20, nullable = true, unique = false) public String getDepartmentName() { return departmentName; } /** * DEPARTMENT_NAMEãè¨å®ãã¾ãã * * @param departmentName DEPARTMENT_NAME */ public void setDepartmentName(String departmentName) { this.departmentName = departmentName; } /** * employeeListãè¿ãã¾ãã * * @param employeeList */ @OneToMany(mappedBy = "department") public List<Employee> getEmployeeList() { return employeeList; } /** * employeeListãè¨å®ãã¾ãã * * @param employeeList */ public void setEmployeeList(List<Employee> employeeList) { this.employeeList = employeeList; } }
ã§ãã¦ãã¼ã£ï¼
Javaã®åã¨DBã®åã¯S2JDBC-Genã¨åãã«ãªãã®ã§ãããã«å¯¾å¿è¡¨ããããã
http://s2container.seasar.org/2.4/ja/s2jdbc_gen/tasks/gen_entity.html#ãã¼ã¿ãã¼ã¹ã®ãã¼ã¿åã¨Javaã®åã®å¯¾å¿è¡¨
ã¡ãªã¿ã«JSONåãæå®ããã¨Stringã«ãªã£ãã
ãã¨ããã¼ãã«ã¯ãããªæãã§ã§ãã¦ããã
â ã¡ãªã¿ã«
gsp-dba-pluginã®README.mdã®ä¸çªä¸ã«ããã¦ããå¶ç´ãè¦ãã¨ã
ã¤ã¾ãPostgreSQLã«ã¯å¶ç´ã¤ãã¦ãªãï¼ãã£ãã¼ï¼
PostgreSQLã®ãã¨ããã¾ãæ¸ãã¦ãªãæ°ããããã©ã大ä¸å¤«ããªããã
ãããããï¼ã¬ãå¢ã®ä¸ããéªéãã¾ããï¼ï¼ï¼
ãæ¬¡ã¯tksy - Qiitaããï¼
â æ¬æ¥ã®ã³ã¼ãã¯ãã¡ãï¼
*1:PostgreSQLè¦ç´ å°ãªãã§ãããããªãã