Hibernate 入門(2)

 完成以後創建一個空的文件,保存在你工程的類文件同個文件夾裏(例如hibernate/classes/hibernate/目錄下),文件名爲:Hello_Bean.hbm.xml

內容如下:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 2.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
<hibernate-mapping>

<class name="hibernate.Hello_Bean" table="test_hibernate" >

<id name="id" column="id">

<generator class="identity"/>

</id>

<property name="name" type="string" update="true" insert="true" column="name" />
<property name="address" type="string" update="true" insert="true" column="address" />

</class>

</hibernate-mapping>

稍微解釋一下,<class name="hibernate.Hello_Bean" table="test_hibernate" >裏的name指你的生成表的類,

table則指定你要創建的數據庫表的名字,可以自由修改,沒有影響.

<id name="id" column="id">設置主鍵ID,這裏name的值id跟Hello_Bean.java裏的方法getId與setId對應,不用管這個,hibernate會自動調用,配置好就可以了,column的值爲要生成的字段名,可以自由修改,沒有影響。

<generator class="identity"/>屬性讓主鍵的ID自增(插入數據的時候自動加1)

<property name="name" type="string" update="true" insert="true" column="name" />這裏的name值"name"跟Hello_Bean.java裏的getName方法對應,column爲要生成的字段名
<property name="address" type="string" update="true" insert="true" column="address" />

分別添加一個字段name與address,注意這裏的type屬性類型爲string,如果這裏的類型與Hello_Bean.java裏設置的類型不一樣會出錯。

修改完以後保存。

最後在JB裏新建一個類,名字爲Hello.java,我會一步步解釋,代碼如下:

package hibernate;

import net.sf.hibernate.cfg.Configuration;
import net.sf.hibernate.SessionFactory;
import net.sf.hibernate.tool.hbm2ddl.SchemaExport;
import net.sf.hibernate.Session;
import net.sf.hibernate.Query;
import net.sf.hibernate.Hibernate;
import net.sf.hibernate.type.LongType;
import net.sf.hibernate.Transaction;
import net.sf.hibernate.ScrollableResults;
import java.util.*;

/**
* @author geezer
* QQ:9986986 MSN:[email protected]
*/


public class Hello {


public Hello() {


}

public static void main(String[] args) throws Exception {

Configuration cfg = new Configuration().addClass(Hello_Bean.class);//用Hello_Bean.class類初始化

SessionFactory sessions = cfg.buildSessionFactory();//用buildSessionFactory方法得到一個SessionFactory對象

Session session = sessions.openSession();//再用SessionFactory的openSession方法得到一個session

new SchemaExport(cfg).create(true, true);//這句意思是創建表,第一次運行以後,就是創建完表以後再把這行加上註釋。如果建表以後不把這一句註釋掉的話會刪掉以前創建的表再重新建一個。

Hello_Bean my_hibernate = new Hello_Bean();//得到一個Hello_Bean對象

my_hibernate.setName("my_name");//設置Hello_Bean對象的name值爲my_name,這裏其實就是說把字符串my_name當作數據庫字段name的值.數據庫字段name與Hello_Bean類裏的getName,setName方法是對應的。形成一個映射關係。

my_hibernate.setAddress("my_address");//如上

session.save(my_hibernate);//這句很重要,將my_hibernate對象寫進數據庫(my_hibernate對象裏的name與address我們剛剛已經設置了值了,會直接把name,address的值寫進數據庫去)

session.flush();
session.close();


//上面是一個簡單的插入數據與第一次運行建表的介紹,下面我再介紹刪除與修改的方法,下面的代碼我都加了註釋,自己需要什麼方法(刪除,修改,循環數據庫的值)就把註釋去掉就可以了
HSQL比較簡單,大家看一下例子就應該明白了,這裏就不講了。
遍歷數據庫的方法有三種,分別是Query,find,iterate,Query和find返回一個List接口,iterate返回一個Iterator,具體方法可以查看這些類得知。

//刪除數據
/*
int a=session.delete("from Hello_Bean where id=1");//如果沒有找到id爲1的數據那麼返回0,如果找到返回1,這裏的Hello_Bean是我們的Hello_Bean類,他跟數據庫表對應,所以我們在這裏是直接用Hello_Bean來代碼數據庫表的。
System.out.println(a);
session.flush();
session.close();

*/

//Query方法查詢數據
/*
Hello_Bean my_hibernate = null;
Query q = session.createQuery("from Hello_Bean");
// Query q = session.createQuery("from Hello_Bean where name=?");//這裏的?跟JDBC的PreparedStatement方法的差不多,只不過這裏的是以0開始,jdbc的是1開始。
// q.setString(0,"my_name");
// q.setFirstResult(0);//這句話的意思是說查詢結果從第幾行開始列出數據
// q.setMaxResults(3);//這句話的意思是取多少條數據,就跟SQL SERVER的TOP方法和MYSQL的LIMIT方法一樣的意思。
// ScrollableResults sc=q.scroll();//得到一個ScrollableResults,可滾動的,如果你的數據庫支持遊標自由移動的話可以加上,也就是說可以判斷查詢結果有沒有值,或者移動到下一行記錄等等。

// if(!sc.next())
// {
// System.out.println("沒有找到你需要的數據");
// }

session.flush();//如果使用了ScrollableResults的話請把這行註釋掉
session.close();//如果使用了ScrollableResults的話請把這行註釋掉

List l=q.list();//返回一個List接口,用來遍歷結果集

for(int i=0;i<l.size();i++){
my_hibernate = (Hello_Bean) l.get(i);//從List中取得一個my_hibernate對象
System.out.println(my_hibernate.getName());//調用my_hibernate對象的getName方法取得數據庫name字段的值

}

*/

//find方法查詢數據
/*
Hello_Bean my_hibernate = null;
List q = session.find("from Hello_Bean");
session.flush();
session.close();

for(int i=0;i<q.size();i++)
{
my_hibernate = (Hello_Bean) q.get(i);
System.out.println(my_hibernate.getName());
}
*/

//iterate方法查詢數據
/*
Hello_Bean my_hibernate = null;
Iterator q = session.iterate("from Hello_Bean");

while(q.hasNext())
{
my_hibernate = (Hello_Bean) q.next();
System.out.println(my_hibernate.getName());
}

*/

//修改數據
/*
Query qq=session.createQuery("from Hello_Bean");

Hello_Bean my_hibernate=(Hello_Bean)session.load(Hello_Bean.class,new Integer(2));
//這裏的new Integer(2)意思是修改表中id爲2的那一行數據,必須是一個包裝類的對象,如果使用int的話會出錯。
my_hibernate.setName("geezer");//把id爲2的那一行數據的name字段值改爲"geezer"
session.flush();
session.close();

*/

}

}

最後運行就可以了。 (未完待續)  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章