今天介紹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
以上有錯歡迎指出更正 ~ 感恩!!