หมายเหตุ 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 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;
}
}
ขั้นตอนที่ 9 : โครงสร้างโปรเจคที่ได้ขั้นตอนที่ 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.Environment
INFO: 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();
List result = 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.Environment
INFO: 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.Environment
INFO: 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.Environment
INFO: 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