2014年1月19日 星期日

HQL 使用簡介

HQL是官方推薦的查詢語法,

有點類似SQL,

比較不同的是所使用的查詢指令,

都是依照物件的屬性和類別名稱,

必須用物件的方式來下HQL指令,

簡單的查詢指令如下:
   
   Query query = session.createQuery("from Member m");
   List<Member> list = query.list();

   for (Member m : list) {
    System.out.println(m.getName() + "\t" + m.getAge());
   }

Criteria 查詢方式

在hibernate中,

你可以使用criteria的查詢方式,

不需要下SQL或HQL指令,

也可避免因為換資料庫造成SQL的不相容,

而需要重新改寫SQL的負擔,

最簡單的查詢方式如下:
   Criteria criteria = session.createCriteria(Member.class);
   List<Member> list = criteria.list();


2014年1月14日 星期二

雙向多對多 XML Mapping

在多對多的配置中,

會採用一個中介表來記錄對應的資料,

最常見的就是使用者(User)與角色(Role)的多對多配置,

一個User可以有很多種Role,

一個Role也對應很多個User,

可參考下圖:











2014年1月13日 星期一

單向一對多 XML Mapping

如果今天考慮一對多的配置模式,

例如一個老師教很多位學生,

如下圖:












單向多對一 XML Mapping

如果今天兩個資料表考慮的情況是多對一,

例如員工跟部門,

多個員工屬於同一個部門,一個部門有許多員工,

如下圖:













2014年1月11日 星期六

雙向一對一(唯一外鍵關聯) XML Mapping

假設今天一個供應商對應一個銀行帳戶,

但這兩個table有各自的primary key,

我們可以考慮在供應商的table裡面,

增加一個外鍵欄位來連結銀行帳戶,

參考以下的供應商(Supply)和銀行帳戶(BankAccount)的關聯圖,










2014年1月9日 星期四

單向一對一(主鍵關聯) XML Mapping

在hibernate的一對一配置中,

如果你採用的是如下的主鍵關聯方式,











可看到人和車的一對一關聯設定,

並且採用的是同一主鍵關聯對應,

2014年1月6日 星期一

JSON 格式介紹及範例

以前的交換訊息格式都是採用XML,

最近在使用AJAX時接觸到了JSON,

格式更簡單明瞭,而且剖析也更方便了,

先簡單介紹一下JSON,

在寫JS時,可以用以下的方式宣告物件和陣列,

var person = {
 "name" : "David",
 "age" : 18
};
var people = [ {
 "name" : "Apple",
 "age" : 15
}, {
 "name" : "John",
 "age" : 25
} ];

2014年1月5日 星期日

SQL查詢的inner join & outer join

剛開始學習SQL時,

常聽到關於inner join和outer join的問題,

自己研究了之後,

用以下簡單的例子分享給對此有疑慮的開發者,

Table Member











Table Dept









一般的inner join,

指的是兩個table都有相互對應到資料,

簡單的說就是只會查詢出交集的部分,

SQL語法通常會這樣下:

select * from member m,dept d where m.dept=d.no

查詢結果









可以看到查詢出來的結果,只有兩邊有交集的部分,

member的Daniel和dept的machine因為沒有交集所以不會列出來。

在outer join的部分,分成left join和right join,

left join以左邊table為主,附加對應出右邊table的資料,沒有的顯示null

right join 則以右邊table為主,附加顯示左邊table的資料

如果以下left join語法查詢

select * from member m left join dept d on m.dept=d.no

查詢結果










可看到Daniel的部門E7無法在dept裡找到資料,則顯示為null

如果用以下的right join語法查詢

select * from member m right join dept d on m.dept=d.no











在dept裡的W0 machine也因為對應不到member的人員資料而顯示為null。