最近在研究hibernate,想創建一個簡單的Hibernate+maven+mysql工程,網上找了一大堆的示例,要麼看不懂結構,要麼就是缺乏必要文件。總之都沒有成功,結果無心在一個外文網上找了一個實例,驚歎於人家的排版。也不得不感嘆的說下浩瀚的百度裏,想找到本身想要的東西是多麼難啊!java
如下借鑑人家文章和內容並作部分補充,以供初學者一塊兒分享:node
(準備工做myeclipse的安裝+maven的下載+mysql的配置略過)mysql
1.mysql中建一個mkyong的數據庫,其下面新建一個stock的空表格。web
//啓動mysql服務器 sudo service mysql start //進入mysql mysql -uroot -p 輸入mysql密碼 //建立數據庫mkyong >create database mkyong; //使用數據庫mkyong >use mkyong; //在數據庫mkyong中建立表stock。請直接copy。 >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;
2.在myeclipse中建立一個maven工程,本身取一個名字。sql
3.建立源文件(Source Folder)數據庫
在 「src/main」目錄下建立 「/src/main/resources」 , 以後全部的Hibernate’s xml配置文件都將放置在該文件下。apache
在「src/main」目錄下建立「/src/main/java」文件,其中放置java源代碼文件。服務器
4.如今該工程的結構看起來以下:session
5.添加Hibernate和Mysql依賴app
修改項目的pom.xml配置文件,它將支持Hibernate和mysql的鏈接,Hibernate項目須要dom4j, commons-logging, commons-collections和 cglib文件,mysql須要鏈接jdbc的文件。將原來的內容更換爲以下代碼。
文件:pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com</groupId>
<artifactId>Hibernate</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>Hibernate Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<!-- MySQL database driver -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.9</version>
</dependency>
<!-- Hibernate library dependecy start -->
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.1</version>
</dependency>
<!-- http://mvnrepository.com/artifact/org.hibernate/hibernate -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate</artifactId>
<version>3.2.6.ga</version>
</dependency>
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>3.2.1</version>
</dependency>
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib-nodep</artifactId>
<version>3.1</version>
</dependency>
<!-- Hibernate library dependecy end -->
<dependency>
<groupId>javax.transaction</groupId>
<artifactId>jta</artifactId>
<version>1.1</version>
</dependency>
</dependencies>
<build>
<finalName>Hibernate</finalName>
</build>
</project>
6.建立Hibernate類表映射文件
新建一個Stock.hbm.xml
映射文件,路徑爲:「src/main/resources/com/mkyong/common/Stock.hbm.xml「
文件:Stock.hbm.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.mkyong.common.Stock" table="stock" catalog="mkyong">
<id name="stockId" type="java.lang.Integer">
<column name="STOCK_ID" />
<generator class="identity" />
</id>
<property name="stockCode" type="string">
<column name="STOCK_CODE" length="10" not-null="true" unique="true" />
</property>
<property name="stockName" type="string">
<column name="STOCK_NAME" length="20" not-null="true" unique="true" />
</property>
</class>
</hibernate-mapping>
7.建立一個Stock的POJO java文件,路徑爲:「src/main/java/com/mkyong/common/Stock.java」
文件:Stock.java
package com.mkyong.common;
/**
* Model class for Stock
*/
public class Stock implements java.io.Serializable {
private static final long serialVersionUID = 1L;
private Stock stock;
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;
}
public Stock getOper() {
return stock;
}
public void setOper(Stock stock) {
this.stock = stock;
}
}
8.建立Hibernate配置文件
建立一個Hibernate配置文件,路徑爲:「src/main/resources/hibernate.cfg.xml「。(注意修改其中的「數據庫密碼」,mkyong即爲數據庫的名稱)
文件: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/mkyong</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="person">true</property>
<mapping resource="com/mkyong/common/Stock.hbm.xml"></mapping>
</session-factory>
</hibernate-configuration>
9.建立Hibernate會話文件
建立一個java類型的Hibernate會話文件,路徑爲:「src/main/java/com/mkyong/persistence/HibernateUtil.java」。
文件:HibernateUtil.java
package com.mkyong.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();
}
}
10.建立測試文件
建立一個名爲App.java的測試文件,路徑爲:「src/main/java/com/mkyong/common/App.java」.
文件:App.java
package com.mkyong.common;
import org.hibernate.Session;
import com.mkyong.persistence.HibernateUtil;
public class App
{
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("4715");
stock.setStockName("GENM");
session.save(stock);
session.getTransaction().commit();
}
}
11.再來看看工程的結構
建立和修改的六個文件結構以下:
12.運行結果
運行App.java這個程序,它將會插入一條數據到mysql數據庫中去。咱們能夠在myeclipse中看到該結果,也能夠去mysql數據庫中查看是否已經插入成功。如下是運行結果:
Picked up _JAVA_OPTIONS: -Dawt.useSystemAAFontSettings=gasp Maven + Hibernate + MySQL ....... 五月 24, 2016 5:31:56 上午 org.hibernate.impl.SessionFactoryImpl <init> 信息: building session factory 五月 24, 2016 5:31:56 上午 org.hibernate.impl.SessionFactoryObjectFactory addInstance 信息: Hibernate: insert into mkyong.stock (STOCK_CODE, STOCK_NAME) values (?, ?)