หมายเหตุ 1 : เครื่องมือที่ใช้ในบทความนี้
- JDK 1.7.0_79
- MySQL 5.6
- Hibernate 5.0.2.Final
- Eclipse 4.5 (Maven Integrate)
- การติดตั้ง Java JDK 7
- การกำหนด Java Path (JAVA_HOME)
- การติดตั้ง MySQL ใน Window
- การติดตั้ง Eclipse ใน Window
CREATE TABLE `user` (`id` bigint(20) NOT NULL AUTO_INCREMENT, `first_name` varchar(50) NOT NULL, `last_name` varchar(50) NOT NULL, `age` int(11) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
ขั้นตอนที่ 2 : สร้าง Java Project ด้วย Maven
สามารถดูตัวอย่างวิธีการสร้างได้จาก การสร้าง Java Project ด้วย Maven ใน Eclipse
ขั้นตอนที่ 3 : แก้ไฟล์ pom.xml
ทำการแก้ไฟล์ pom.xml เพื่อเพิ่ม dependency ต่างๆที่จำเป็นสำหรับโปรเจค ซึ่งตัว Maven จะทำการดาวน์โหลด *.jar ต่างๆที่เกี่ยวข้อง ตามที่เราระบุไว้ใน pom.xml มาไว้ในเครื่องเราเพื่อใช้กับโปรเจค
ขั้นตอนที่ 4 : สร้างไฟล์ Hibernate Mapping (hbm) + Model4.0.0 com.xml.hibernate HibernateXML 0.0.1-SNAPSHOT jar HibernateXML http://maven.apache.org UTF-8 junit junit 3.8.1 test mysql mysql-connector-java 5.1.36 org.hibernate hibernate-core 5.0.2.Final org.jboss.logging jboss-logging 3.3.0.Final org.codehaus.mojo exec-maven-plugin 1.4.0 package java com.xml.hibernate.App false
- สร้างไฟล์ที่ชื่อว่า User.hbm.xml ซึ่งไฟล์ *.hbm.xml ทำหน้าที่ในการ mapping filed จากฐานข้อมูลกับ Object ของ java โดยมีการระบุความสัมพันธ์ว่า ตัวแปลไหนใน object (Class) java ทำการ map กับ ตารางอะไร, column อะไรในฐานข้อมูล โดยสร้างไว้ที่ /src/main/resources/com/xml/hibernate/User.hbm.xml และใส่โคดดังต่อไปนี้
- ต่อมาสร้างไฟล์ที่ชื่อว่า User.java ซึ่งเป็นไฟล์ Java ที่เรียกว่า POJO (Plain Old Java Object) โดยโครงสร้างภายในจะมีแต่ ตัวแปล และ get, set เท่านั้น โดยสร้างไว้ที่ src/main/java/com/xml/hibernate/model/User.java และใส่โคดดังต่อไปนี้
package com.xml.hibernate.model; import java.io.Serializable; @SuppressWarnings("serial") public class User implements Serializable { private Integer id; private String firstName; private String lastName; private Integer age; public User() { // TODO Auto-generated constructor stub } public Integer getId() { return id; } public User(String firstName, String lastName, Integer age) { super(); this.firstName = firstName; this.lastName = lastName; this.age = age; } public void setId(Integer id) { this.id = id; } public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } }ขั้นตอนที่ 5 : สร้างไฟล์ Hibernate Configuration
สร้างไฟล์ที่ชื่อว่า hibernate.cfg.xml ซึ่งเป็นไฟล์ที่ทำหน้าที่เก็บข้อมูลต่างๆที่ใช้ในการเชื่อมต่อกับฐานข้อมูลโดยที่
- hibernate.connection.driver_class : driver ซึ่งต้องเป็น driver ที่เกี่ยวกับฐานข้อมูลที่ใช้อยู่
- hibernate.connection.url : url ที่อยู่ของฐานข้อมูล
- hibernate.connection.username : ชื่อผู้ใช้
- hibernate.connection.password : รหัสผ่าน
- hibernate.connection.pool_size : จำนวนสูงสุดที่สามารถเชื่อมต่อฐานข้อมูลได้
- hibernate.dialect : ค่าที่กำหนดเพื่อให้ Hibernate Generate SQL กับฐานข้อมูลนั้นๆ เช่น
- DB2 : org.hibernate.dialect.DB2Dialect
- HSQLDB : org.hibernate.dialect.HSQLDialect
- HypersonicSQL : org.hibernate.dialect.HSQLDialect
- Informix : org.hibernate.dialect.InformixDialect
- Ingres : org.hibernate.dialect.IngresDialect
- Interbase : org.hibernate.dialect.InterbaseDialect
- Microsoft SQL Server 2000 : org.hibernate.dialect.SQLServerDialect
- Microsoft SQL Server 2005 : org.hibernate.dialect.SQLServer2005Dialect
- Microsoft SQL Server 2008 : org.hibernate.dialect.SQLServer2008Dialect
- MySQL : org.hibernate.dialect.MySQLDialect
- Oracle (any version) : org.hibernate.dialect.OracleDialect
- Oracle 11g : org.hibernate.dialect.Oracle10gDialect
- Oracle 10g : org.hibernate.dialect.Oracle10gDialect
- Oracle 9i : org.hibernate.dialect.Oracle9iDialect
- PostgreSQL : org.hibernate.dialect.PostgreSQLDialect
- Progress : org.hibernate.dialect.ProgressDialect
- SAP DB : org.hibernate.dialect.SAPDBDialect
- Sybase : org.hibernate.dialect.SybaseDialect
- Sybase Anywhere : org.hibernate.dialect.SybaseAnywhereDialect
- show_sql : กำหนดเพื่อแสดงชุดคำสั่ง SQL หรือไม่
- /* Mapping Files */ : ใน Mapping Files ใช้สำหรับอ้างอิงไฟล์ Mapping ที่เราสร้างไปก่อนหน้านั้น
ขั้นตอนที่ 6 : สร้างไฟล์ log4.propertiescom.mysql.jdbc.Driver jdbc:mysql://localhost:3306/hibernate root 1234 org.hibernate.dialect.MySQLDialect true
สร้างไฟล์ที่ชื่อว่า log4.properties ซึ่งเป็นไฟล์ที่ทำหน้าที่เก็บค่าต่างๆสำหรับ Logs โดยสร้างไว้ที่ /src/main/resources/log4.properties และใส่โคดดังต่อไปนี้
# Root logger option log4j.rootLogger=DEBUG,stdout # Redirect log messages to console log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target=System.out log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n # hibernate log log4j.logger.org.hibernate.SQL=ALL log4j.logger.org.hibernate.type=ALL log4j.logger.org.hibernate.tool.hbm2ddl=INFO log4j.logger.org.hibernate=INFOขั้นตอนที่ 7 : สร้างไฟล์ Hibernate Utility
สร้างไฟล์ที่ชื่อว่า HibernateUtil.java ซึ่งเป็นไฟล์ที่ทำหน้าที่สร้าง Session เพื่อเชื่อมต่อกับฐานข้อมูลโดยสร้างไว้ที่ /src/main/java/com/xml/hibernate/util/HibernateUtil.java และใส่โคดดังต่อไปนี้
package com.xml.hibernate.util; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; public class HibernateUtil { private static final SessionFactory sessionFactory = buildSessionFactory(); private static SessionFactory buildSessionFactory() { try { // Create the SessionFactory from hibernate.cfg.xml return new Configuration().configure().buildSessionFactory(); } catch (Throwable ex) { // Make sure you log the exception, as it might be swallowed System.err.println("Initial SessionFactory creation failed." + ex); throw new ExceptionInInitializerError(ex); } } public static SessionFactory getSessionFactory() { return sessionFactory; } public static void shutdown() { // Close caches and connection pools getSessionFactory().close(); } }ขั้นตอนที่ 8 : สร้างไฟล์ UserManager.java
สร้างไฟล์ที่ชื่อว่า UserManager.java ซึ่งทำหน้าที่เป็นตัวจัดการการ insert, update, delete และ query ต่างๆ โดยสร้างไว้ที่ /src/main/java/com/xml/hibernate/manager/HibernateUtil.java และใส่โคดดังต่อไปนี้
package com.xml.hibernate.manager; import java.util.ArrayList; import java.util.List; import org.hibernate.Query; import org.hibernate.Session; import org.jboss.logging.Logger; import com.xml.hibernate.manager.UserManager; import com.xml.hibernate.model.User; public class UserManager { private static final Logger logger = Logger.getLogger(UserManager.class); public void create(User user) { logger.info("========== Insert Data Section =========="); Session session = HibernateUtil.getSessionFactory().openSession(); session.beginTransaction(); session.save(user); session.getTransaction().commit(); } public void update(User user) { logger.info("========== Update Data Section =========="); Session session = HibernateUtil.getSessionFactory().openSession(); session.beginTransaction(); session.update(user); session.getTransaction().commit(); } public void delete(User user) { logger.info("========== Delete Data Section =========="); Session session = HibernateUtil.getSessionFactory().openSession(); session.beginTransaction(); session.delete(user); session.getTransaction().commit(); } @SuppressWarnings("unchecked") public Listขั้นตอนที่ 9 : โครงสร้างโปรเจคที่ได้query() { logger.info("========== Query Data Section =========="); List result = new ArrayList (); Session session = HibernateUtil.getSessionFactory().openSession(); session.beginTransaction(); Query query = session.createQuery("FROM User "); // FROM com.xml.hibernate.User session.getTransaction().commit(); result = (List ) query.list(); return result; } }
ขั้นตอนที่ 10 : แก้ไฟล์หลักของโปรเจค App.java
กรณี Create :
package com.xml.hibernate; import java.util.List; import org.jboss.logging.Logger; import com.xml.hibernate.manager.UserManager; import com.xml.hibernate.model.User; public class App { final static Logger logger = Logger.getLogger(App.class); public static void main(String[] args) { UserManager usermgr = new UserManager(); User user1 = new User(); user1.setFirstName("Nopphanan"); user1.setLastName("Mayoe"); user1.setAge(18); User user2 = new User(); user2.setFirstName("Kingsuwan"); user2.setLastName("Mayoe"); user2.setAge(18); // insert usermgr.create(user1); usermgr.create(user2); } }
ผลลัพธ์ที่ได้
Oct 10, 2015 10:01:11 PM com.xml.hibernate.manager.UserManager create INFO: ========== Insert Data Section ========== Oct 10, 2015 10:01:12 PM org.hibernate.Version logVersion INFO: HHH000412: Hibernate Core {5.0.2.Final} Oct 10, 2015 10:01:12 PM org.hibernate.cfg.EnvironmentINFO: HHH000206: hibernate.properties not found Oct 10, 2015 10:01:12 PM org.hibernate.cfg.Environment buildBytecodeProvider INFO: HHH000021: Bytecode provider name : javassist Oct 10, 2015 10:01:13 PM org.hibernate.annotations.common.reflection.java.JavaReflectionManager INFO: HCANN000001: Hibernate Commons Annotations {5.0.0.Final} Oct 10, 2015 10:01:15 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure WARN: HHH000402: Using Hibernate built-in connection pool (not for production use!) Oct 10, 2015 10:01:15 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator INFO: HHH000401: using driver [com.mysql.jdbc.Driver] at URL [jdbc:mysql://localhost:3306/hibernate] Oct 10, 2015 10:01:15 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator INFO: HHH000046: Connection properties: {user=root, password=****} Oct 10, 2015 10:01:15 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator INFO: HHH000006: Autocommit mode: false Oct 10, 2015 10:01:15 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure INFO: HHH000115: Hibernate connection pool size: 10 (min=1) Oct 10, 2015 10:01:15 PM org.hibernate.dialect.Dialect INFO: HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect Oct 10, 2015 10:01:16 PM org.hibernate.boot.internal.SessionFactoryBuilderImpl$SessionFactoryOptionsStateStandardImpl WARN: Unrecognized hbm2ddl_auto value : Create. Supported values include create, create-drop, update, and validate. Ignoring Hibernate: insert into hibernate.user (FIRST_NAME, LAST_NAME, AGE) values (?, ?, ?) Oct 10, 2015 10:01:16 PM com.xml.hibernate.manager.UserManager create INFO: ========== Insert Data Section ========== Hibernate: insert into hibernate.user (FIRST_NAME, LAST_NAME, AGE) values (?, ?, ?)
กรณี Read:
package com.xml.hibernate; import java.util.List; import org.jboss.logging.Logger; import com.xml.hibernate.manager.UserManager; import com.xml.hibernate.model.User; public class App { final static Logger logger = Logger.getLogger(App.class); public static void main(String[] args) { // query UserManager usermgr = new UserManager(); Listresult = usermgr.query(); for (int i = 0; i < result.size(); i++) { logger.info("========== query index " + i + " =========="); User user = result.get(i); logger.info("id : " + user.getId() + " first name : " + user.getFirstName() + " last name : " + user.getLastName() + " age : " + user.getAge()); } } }
ผลลัพธ์ที่ได้
Oct 10, 2015 10:05:23 PM com.xml.hibernate.manager.UserManager query INFO: ========== Query Data Section ========== Oct 10, 2015 10:05:23 PM org.hibernate.Version logVersion INFO: HHH000412: Hibernate Core {5.0.2.Final} Oct 10, 2015 10:05:23 PM org.hibernate.cfg.EnvironmentINFO: HHH000206: hibernate.properties not found Oct 10, 2015 10:05:23 PM org.hibernate.cfg.Environment buildBytecodeProvider INFO: HHH000021: Bytecode provider name : javassist Oct 10, 2015 10:05:25 PM org.hibernate.annotations.common.reflection.java.JavaReflectionManager INFO: HCANN000001: Hibernate Commons Annotations {5.0.0.Final} Oct 10, 2015 10:05:27 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure WARN: HHH000402: Using Hibernate built-in connection pool (not for production use!) Oct 10, 2015 10:05:27 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator INFO: HHH000401: using driver [com.mysql.jdbc.Driver] at URL [jdbc:mysql://localhost:3306/hibernate] Oct 10, 2015 10:05:27 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator INFO: HHH000046: Connection properties: {user=root, password=****} Oct 10, 2015 10:05:27 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator INFO: HHH000006: Autocommit mode: false Oct 10, 2015 10:05:27 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure INFO: HHH000115: Hibernate connection pool size: 10 (min=1) Oct 10, 2015 10:05:27 PM org.hibernate.dialect.Dialect INFO: HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect Oct 10, 2015 10:05:27 PM org.hibernate.boot.internal.SessionFactoryBuilderImpl$SessionFactoryOptionsStateStandardImpl WARN: Unrecognized hbm2ddl_auto value : Create. Supported values include create, create-drop, update, and validate. Ignoring Oct 10, 2015 10:05:28 PM org.hibernate.hql.internal.QueryTranslatorFactoryInitiator initiateService INFO: HHH000397: Using ASTQueryTranslatorFactory Hibernate: select user0_.id as id1_0_, user0_.FIRST_NAME as FIRST_NA2_0_, user0_.LAST_NAME as LAST_NAM3_0_, user0_.AGE as AGE4_0_ from hibernate.user user0_ Oct 10, 2015 10:05:28 PM com.xml.hibernate.App main INFO: ========== query index 0 ========== Oct 10, 2015 10:05:28 PM com.xml.hibernate.App main INFO: id : 2 first name : Nopphanan last name : Mayoe age : 18 Oct 10, 2015 10:05:28 PM com.xml.hibernate.App main INFO: ========== query index 1 ========== Oct 10, 2015 10:05:28 PM com.xml.hibernate.App main INFO: id : 3 first name : Kingsuwan last name : Mayoe age : 18
กรณี Update:
package com.xml.hibernate; import java.util.List; import org.jboss.logging.Logger; import com.xml.hibernate.manager.UserManager; import com.xml.hibernate.model.User; public class App { final static Logger logger = Logger.getLogger(App.class); public static void main(String[] args) { UserManager usermgr = new UserManager(); User user1 = new User(); user1.setId(2); user1.setFirstName("Hello"); user1.setLastName("World"); user1.setAge(15); // update usermgr.update(user1); } }
ผลลัพธ์ที่ได้
Oct 10, 2015 10:10:26 PM com.xml.hibernate.manager.UserManager update INFO: ========== Update Data Section ========== Oct 10, 2015 10:10:26 PM org.hibernate.Version logVersion INFO: HHH000412: Hibernate Core {5.0.2.Final} Oct 10, 2015 10:10:26 PM org.hibernate.cfg.EnvironmentINFO: HHH000206: hibernate.properties not found Oct 10, 2015 10:10:26 PM org.hibernate.cfg.Environment buildBytecodeProvider INFO: HHH000021: Bytecode provider name : javassist Oct 10, 2015 10:10:29 PM org.hibernate.annotations.common.reflection.java.JavaReflectionManager INFO: HCANN000001: Hibernate Commons Annotations {5.0.0.Final} Oct 10, 2015 10:10:30 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure WARN: HHH000402: Using Hibernate built-in connection pool (not for production use!) Oct 10, 2015 10:10:30 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator INFO: HHH000401: using driver [com.mysql.jdbc.Driver] at URL [jdbc:mysql://localhost:3306/hibernate] Oct 10, 2015 10:10:30 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator INFO: HHH000046: Connection properties: {user=root, password=****} Oct 10, 2015 10:10:30 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator INFO: HHH000006: Autocommit mode: false Oct 10, 2015 10:10:30 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure INFO: HHH000115: Hibernate connection pool size: 10 (min=1) Oct 10, 2015 10:10:31 PM org.hibernate.dialect.Dialect INFO: HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect Oct 10, 2015 10:10:31 PM org.hibernate.boot.internal.SessionFactoryBuilderImpl$SessionFactoryOptionsStateStandardImpl WARN: Unrecognized hbm2ddl_auto value : Create. Supported values include create, create-drop, update, and validate. Ignoring Hibernate: update hibernate.user set FIRST_NAME=?, LAST_NAME=?, AGE=? where id=?
กรณี Delete:
package com.xml.hibernate; import java.util.List; import org.jboss.logging.Logger; import com.xml.hibernate.manager.UserManager; import com.xml.hibernate.model.User; public class App { final static Logger logger = Logger.getLogger(App.class); public static void main(String[] args) { UserManager usermgr = new UserManager(); User user1 = new User(); user1.setId(2); user1.setFirstName("Hello"); user1.setLastName("World"); user1.setAge(15); // delete usermgr.delete(user1); } }
ผลลัพธ์ที่ได้
Oct 10, 2015 10:16:24 PM com.xml.hibernate.manager.UserManager delete INFO: ========== Delete Data Section ========== Oct 10, 2015 10:16:24 PM org.hibernate.Version logVersion INFO: HHH000412: Hibernate Core {5.0.2.Final} Oct 10, 2015 10:16:24 PM org.hibernate.cfg.EnvironmentINFO: HHH000206: hibernate.properties not found Oct 10, 2015 10:16:24 PM org.hibernate.cfg.Environment buildBytecodeProvider INFO: HHH000021: Bytecode provider name : javassist Oct 10, 2015 10:16:25 PM org.hibernate.annotations.common.reflection.java.JavaReflectionManager INFO: HCANN000001: Hibernate Commons Annotations {5.0.0.Final} Oct 10, 2015 10:16:29 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure WARN: HHH000402: Using Hibernate built-in connection pool (not for production use!) Oct 10, 2015 10:16:29 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator INFO: HHH000401: using driver [com.mysql.jdbc.Driver] at URL [jdbc:mysql://localhost:3306/hibernate] Oct 10, 2015 10:16:29 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator INFO: HHH000046: Connection properties: {user=root, password=****} Oct 10, 2015 10:16:29 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator INFO: HHH000006: Autocommit mode: false Oct 10, 2015 10:16:29 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure INFO: HHH000115: Hibernate connection pool size: 10 (min=1) Oct 10, 2015 10:16:29 PM org.hibernate.dialect.Dialect INFO: HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect Oct 10, 2015 10:16:29 PM org.hibernate.boot.internal.SessionFactoryBuilderImpl$SessionFactoryOptionsStateStandardImpl WARN: Unrecognized hbm2ddl_auto value : Create. Supported values include create, create-drop, update, and validate. Ignoring Hibernate: delete from hibernate.user where id=?
0 comments:
Post a Comment