2014年5月28日 星期三

Hibernate 學習筆記(一) 使用 Maven 建立 Hibernate EXAMPLE


1. 先在 eclipse create maven project

Choose File –> New –> Project. Select Maven-> Maven Project -> Next
-> choice "maven-archetype-quickstart" -> Next

Group Id: whatever
Artifact Id: test_hibernate
Package: com.wiki.common

Click Finish.

2.  在 eclipse 左方的 那欄 針對剛 create 的 project 按右鍵
New -> Source Folder -> src/main/resources
要置入一些 xml檔使用


3. 在 pom.xml  <dependencies> </dependencies> 中加入以下的 dependency

Modify the Maven’s pom.xml file, add support for Hibernate and MySQL.
Hibernate requires dom4j, commons-logging, commons-collections and cglib as dependency library, mysql-connector-java  add it.

    
    
     org.hibernate
     hibernate-core
     4.3.5.Final
    
    
     dom4j
     dom4j
     1.6.1
    
    
     commons-logging
     commons-logging
     1.1.3
    
    
     commons-collections
     commons-collections
     3.2.1
    
    
     cglib
     cglib
     3.1
    
    
     mysql
     mysql-connector-java
     5.1.30
    


4.  在 src/main/resources 底下 add two xml file :  Stock.hbm.xml  and  hibernate.cfg.xml


Stock.hbm.xml

<hibernate-mapping>
    <class catalog="stock" name="com.wiki.common.Stock" table="stock">
        <id name="stockId" type="java.lang.Integer">
            <column name="STOCK_ID">
            <generator class="identity">
        </generator></column></id>
        <property name="stockCode" type="string">
            <column length="10" name="STOCK_CODE" not-null="true" unique="true">
        </column></property>
        <property name="stockName" type="string">
            <column length="20" name="STOCK_NAME" not-null="true" unique="true">
        </column></property>
    </class>
</hibernate-mapping>


hibernate.cfg.xml


<?xml version="1.0" encoding="UTF-8"?>
< !DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
    <session-factory>
        <property name="hibernate.bytecode.use_reflection_optimizer">false</property>
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.password"></property>
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/stock</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="show_sql">true</property>
        <mapping resource="Stock.hbm.xml"></mapping>
    </session-factory>
</hibernate-configuration>



 5. 在 src/main/java/com/wiki/common/ 新增 Stock.java   及  main.java


Stock.java
package com.wiki.common;

/**
 * Model class for Stock
 */
public class Stock implements java.io.Serializable {

 private static final long serialVersionUID = 1L;

 private Integer stockId;
 private String stockCode;
 private String stockName;

 public Stock() {
 }

 public Stock(String stockCode, String stockName) {
  this.stockCode = stockCode;
  this.stockName = stockName;
 }

 public Integer getStockId() {
  return this.stockId;
 }

 public void setStockId(Integer stockId) {
  this.stockId = stockId;
 }

 public String getStockCode() {
  return this.stockCode;
 }

 public void setStockCode(String stockCode) {
  this.stockCode = stockCode;
 }

 public String getStockName() {
  return this.stockName;
 }

 public void setStockName(String stockName) {
  this.stockName = stockName;
 }

}



main.java
package com.wiki.common;

import org.hibernate.Session;
import com.wiki.persistence.HibernateUtil;

public class main 
{
    public static void main( String[] args )
    {
        System.out.println("Maven + Hibernate + MySQL");
        Session session = HibernateUtil.getSessionFactory().openSession();
 
        session.beginTransaction();
        Stock stock = new Stock();
 
        stock.setStockCode("9999");
        stock.setStockName("法克康");
 
        session.save(stock);
        session.getTransaction().commit();
    }
}


6.  在 src/main/java/com/wiki/persistence 新增 HibernateUtil.java


HibernateUtil.java

package com.wiki.persistence;

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();

    }

}


7. 到 mysql 終端介面 create database

# mysql -uroot -p

mysql> create database stock;
mysql> use stock;

mysql> CREATE TABLE `stock` (
   `STOCK_ID` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `STOCK_CODE` VARCHAR(10) NOT NULL,
  `STOCK_NAME` VARCHAR(20) NOT NULL,
  PRIMARY KEY (`STOCK_ID`) USING BTREE,
  UNIQUE KEY `UNI_STOCK_NAME` (`STOCK_NAME`),
  UNIQUE KEY `UNI_STOCK_ID` (`STOCK_CODE`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


8. Run main.java

若有成功看到這兩行,代表 data 已成功寫入 DB了
Maven + Hibernate + MySQL

Hibernate: insert into stock.stock (STOCK_CODE, STOCK_NAME) values (?, ?)




reference(參考來源)