[Java] สร้าง Hibernate Entity ด้วยวิธี Reverse Engineering ผ่าน Maven
การสร้าง Hibernate Entity ผ่าน Eclipse (สร้าง Hibernate Entity ด้วยวิธี Reverse Engineering) นั้นอาจจะดูยุ่งยาก เพราะมีขั้นตอนค่อนข้างเยอะ อีกทั้งยังไม่สามารถ share code ร่วมกัน หรือจะเก็บไว้ใช้ในโปรเจคอื่นก็ลำบาก โพสนี้ผมจะมาแชร์วิธีการที่สะดวกมากขึ้น เพราะเราจะ generated Entity ด้วย maven กัน
Maven ไม่ได้เป็นแค่ dependency สำหรับ library เท่านั้น แต่ยังมี dependency ประเภท plugin ทำให้เพิ่มความสามารถของ maven เข้าไปอีก(Maven Plugin) เช่น เราสามารถดึง application server มาใช้ทดสอบโดยไม่ต้องโหลดมาติดตั้งแยก (Wildfly Maven Plugin) หรือ เราจะทำ war file ที่มี configuration สำหรับ production แบบพร้อมใช้งาน (Maven WAR Plugin) เป็นต้น
สำหรับโพสนี้เราจะมาใช้ Maven AntRun Plugin สำหรับ generate Hibernate Entity แบบ pure code กัน ไม่ต้องยุ่งกับเครื่องมือของ editor อะไรอีก และได้ใช้ความสามารถของ Hibernate Reverse Engineering ด้วย ทีนี้เราก็สามารถส่งต่อ config ไปใช้กันภายในทีม หรือจะเผื่อใช้ในโปรเจคอนาคตก็ได้เช่นกัน
ก่อนจะเริ่มทำตามตัวอย่าง อยากให้แน่ใจก่อนว่ารู้จัก keyword ต่อไปนี้ซะก่อน
ข้อควรระวัง !!
dependency ของ project กับของ plugin เป็นอิสระต่อกัน เพราะฉะนั้นแล้ว library ที่ใส่เพื่อใช้ใน project ไม่ได้ส่งผลมาถึง plugin อาจจำเป็นจะต้องใส่ทั้ง 2 ที่ ถ้าใช้ library ตัวเดียวกัน เช่น database driver, hibernate-core เป็นต้น
ref.
https://eugencovaciq.wordpress.com/2016/02/01/hibernate-tools-reverse-engineering-using-maven/
Maven ไม่ได้เป็นแค่ dependency สำหรับ library เท่านั้น แต่ยังมี dependency ประเภท plugin ทำให้เพิ่มความสามารถของ maven เข้าไปอีก(Maven Plugin) เช่น เราสามารถดึง application server มาใช้ทดสอบโดยไม่ต้องโหลดมาติดตั้งแยก (Wildfly Maven Plugin) หรือ เราจะทำ war file ที่มี configuration สำหรับ production แบบพร้อมใช้งาน (Maven WAR Plugin) เป็นต้น
สำหรับโพสนี้เราจะมาใช้ Maven AntRun Plugin สำหรับ generate Hibernate Entity แบบ pure code กัน ไม่ต้องยุ่งกับเครื่องมือของ editor อะไรอีก และได้ใช้ความสามารถของ Hibernate Reverse Engineering ด้วย ทีนี้เราก็สามารถส่งต่อ config ไปใช้กันภายในทีม หรือจะเผื่อใช้ในโปรเจคอนาคตก็ได้เช่นกัน
ก่อนจะเริ่มทำตามตัวอย่าง อยากให้แน่ใจก่อนว่ารู้จัก keyword ต่อไปนี้ซะก่อน
- OR-Mapping
- Hibernate Entity Class
- Hibernate Config
- Hibernate Reverse Engineering
<!-- pom.xml --> <project> <!-- ... --> <build> <plugins> <plugin> <artifactId>maven-antrun-plugin</artifactId> <version>1.8</version> <executions> <execution> <!--mvn antrun:run@hbm2java--> <id>hbm2java</id> <phase>none</phase> <configuration> <target> <echo message="Start generating entities .."/> <taskdef name="hibernatetool" classname="org.hibernate.tool.ant.HibernateToolTask"/> <hibernatetool destdir="src/main/java"> <jdbcconfiguration revengfile="src/main/resources/hibernate.reveng.xml" packagename="th.in.lordgift.model.entity" detectmanytomany="true" configurationfile="src/main/resources/hibernate.cfg.xml"/> <hbm2java destdir="src/main/java" jdk5="true" ejb3="true"/> </hibernatetool> <echo message="End generating entities"/> </target> </configuration> <goals> <goal>run</goal> </goals> </execution> </executions> <dependencies> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>5.2.5.Final</version> </dependency> <dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>2.3.28</version> </dependency> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.1</version> </dependency> <dependency> <groupId>commons-collections</groupId> <artifactId>commons-collections</artifactId> <version>3.2.1</version> </dependency> <dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> <version>42.2.2</version> </dependency> </dependencies> </plugin> </plugins> </build> </project>รันคำสั่งใน command-line
mvn antrun:run@hbm2javaเราจะพบกับไฟล์ Entity Class ตามที่เรา config ไว้ที่ hibernate.reveng.xml และได้ data type ตรงตาม type mapping
ข้อควรระวัง !!
dependency ของ project กับของ plugin เป็นอิสระต่อกัน เพราะฉะนั้นแล้ว library ที่ใส่เพื่อใช้ใน project ไม่ได้ส่งผลมาถึง plugin อาจจำเป็นจะต้องใส่ทั้ง 2 ที่ ถ้าใช้ library ตัวเดียวกัน เช่น database driver, hibernate-core เป็นต้น
ref.
https://eugencovaciq.wordpress.com/2016/02/01/hibernate-tools-reverse-engineering-using-maven/