close

今天介紹Hibernate 共四堂課

資料庫內 先建好 message 資料庫

首先必須先介紹一下Hibernate 的架構

Hibernate 主要功用是簡化 java與資料庫間的溝通方式

而其有三大部分 ** Entity 、Mapping 、Confile File ;

 

開始我們先建立 Message類別 也就是 Mapping 

Message.java :

package hello;

public class Message {
private Integer messageId;
private String content;

//預設建構式
public Message(){
super();
}

public Integer getMessageId() {
return messageId;
}
public void setMessageId(Integer messageId) {
this.messageId = messageId;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
}

定義好 Message資料庫內的欄位成員,也相當於.net中的Model;

接下來要來定義 Mapping的xml   // Message.hbm.xml

 

 Message.hbm.xml :

?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="message" >

// 下面給予類別名稱 及資料庫名稱

<class name="Message" table="message">

//定義資料庫主鍵(PK)與類別屬性的對應
<id name="messagId" type="java.lang.Integer">
<column name="message_id"></column>
<generator class="identity"></generator>
</id>

// ps Hibernate的Generator属性有7種class

//1、identity:用於MySql。特點:遞增

//2、sequence:用於Oracle

//3、native:跨資料庫時使用

//4、hilo:通過高低位合成id,先建表hi_value,再建列next_value。必需要有初始值。

//5、sequencehilo:同過高低位合成id,建一個sequence序列,不用建表。 

//6、assigned:用戶自定id;

//7、foreign:用於一對一關係共享主健時,兩id值一樣。

//1 ~ 7說明來源: http://developer.51cto.com/art/200906/132120.htm

//定義資料庫欄位與類別屬性的對應
<property name="content" type="string">
<column name="content"></column>
</property>


</class>
</hibernate-mapping>

以上架構看內容應該很容易看得懂,就是在定義資料庫內的成員

 

接著看Entity :

建立一個Entity類別(EntityManager.java)

 

EntityManager.java :

public class EntityManager {


private void createAndStoreMessage(String content) {
Message message = new Message();
Session session = HibernateUtils.getSessionFactory()
.getCurrentSession();
session.beginTransaction();
session.save(message);
session.getTransaction().commit();
}

private void listMessage() {
//Message message = new Message();
Session session = HibernateUtils.getSessionFactory()
.getCurrentSession();
session.beginTransaction();
List<Message> messages=session.createQuery("from Message").list();

session.getTransaction().commit();
for (Message message : messages){
System.out.println("message id:"+message.getMessageId());
System.out.println("message content:"+message.getContent());
}

}

public static void main(String[] ages){
EntityManager em = new EntityManager();
em.createAndStoreMessage("Hello World!");
em.listMessage();
}

}

關於Hibernate資料庫連線,也可線上看範例如下

ex: http://blog.csdn.net/yingjiebohe/article/details/8283185    

主要是下面這幾行程式

Session session = HibernateUtils.getSessionFactory()  
.getCurrentSession();  // 取得當前session 當然 HibernateUtils 是由Hibernate.cfg.xml內定義來的,可參考下方code
session.beginTransaction(); // 根據資料存放區開始交易。
session.save(message); // 存取message 資料
session.getTransaction().commit(); // 提交

 

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 name="SessionFactory">
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost/webimpl</property>

 <!--    <property name="connection.url">jdbc:mysql://localhost:3306/Test</property> --> // mysql port
<property name="connection.username">root</property>
<property name="connection.password"></property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<property name="current_session_context_class">thread</property>
<mapping resource="hello/Message.hbm.xml" />
</session-factory>
</hibernate-configuration>

// property 屬性 

至於 Hibernate.cfg.xml  可以上網查 name 所需的定義  最後一定要加上 mapping resource  去指向其對應的 mapping

 

以上有錯歡迎指出更正 ~ 感恩!!

 

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 JoshS 的頭像
    JoshS

    JoshS的部落格

    JoshS 發表在 痞客邦 留言(0) 人氣()