天天看點

六種方式實作hibernate查詢,及IDE推薦

這些天過的好亂,也許是因為考完試了,心裡有些松懈吧。也許是最近發生的事對我有些觸動

吧。感覺自己都已經不懂自己了。面對一些人的教導,我很感激。因為很多話都對我有非常大的幫助和

啟發,也讓我除了做技術,玩程式設計外,明白了很多道理,也許這就是一個人成熟的過程吧。我真的很希

望我能夠忘掉以前的不懂事,忘掉以前的輕狂,踏踏實實的做技術。

           自己的“真理”有時也會錯,自己的想法有時也很“天真”。我真的很想靜一靜。晚飯後看了

高深的東西。

           我很想從現在做起,使自己能夠真正享受程式設計帶來的快樂,沒有虛榮,沒有競争,沒有雜念。

隻有快樂,隻有充實,隻有無悔。當然我說到做到,那篇日志講的是一個從點到面,從面到點的哲理。

我覺得有必要寫一個hibernate的總結性随筆,從點到面,講講hibernate查詢的6種方法。分别是hql查詢

,對象化查詢criteria方法,動态查詢detachedcriteria,例子查詢,sql查詢,命名查詢。

           如果單純的使用hibernate查詢資料庫隻需要懂其中的一項就可以完成想要實作的一般功能,但是

從一個點,讓我們掌握6中方法,則提供了更多選擇。每一種方法都有其适用的情況與前提。

hql查詢

hql是hibernate自己的一套查詢語言,于sql文法不同,具有跨資料庫的優點。示例代碼:

六種方式實作hibernate查詢,及IDE推薦

static void query(string name){

  session s=null;

  try{

   s=hibernateutil.getsession();

   //from後面是對象,不是表名

   string hql="from admin as admin where admin.aname=:name";//使用命名參數,推薦使用,易讀。

   query query=s.createquery(hql);

   query.setstring("name", name);

   list<admin> list=query.list();

   for(admin admin:list){

    system.out.println(admin.getaname());

   }

  }finally{

   if(s!=null)

   s.close();

  }

 }

六種方式實作hibernate查詢,及IDE推薦

适用情況:常用方法,比較傳統,類似jdbc。缺點:新的查詢語言,适用面有限,僅适用于hibernate架構。

對象化查詢criteria方法:

六種方式實作hibernate查詢,及IDE推薦

static void cri(string name,string password){

   criteria c=s.createcriteria(admin.class);

   c.add(restrictions.eq("aname",name));//eq是等于,gt是大于,lt是小于,or是或

   c.add(restrictions.eq("apassword", password));

   list<admin> list=c.list();

六種方式實作hibernate查詢,及IDE推薦

适用情況:面向對象操作,革新了以前的資料庫操作方式,易讀。缺點:适用面較hql有限。

動态分離查詢detachedcriteria

六種方式實作hibernate查詢,及IDE推薦

static list dc(detachedcriteria dc) {

  session s = hibernateutil.getsession();

  criteria c = dc.getexecutablecriteria(s);

  list rs = c.list();

  s.close();

  return rs;

六種方式實作hibernate查詢,及IDE推薦
六種方式實作hibernate查詢,及IDE推薦

detachedcriteria dc = detachedcriteria.forclass(user.class);

  int id = 1;

  if (id != 0)

   dc.add(restrictions.eq("id", id));

  date age = new date();

  if (age != null)

   dc.add(restrictions.le("birthday", age));

  list users = dc(dc);

  system.out.println("離線查詢傳回結果:" + users);

六種方式實作hibernate查詢,及IDE推薦

适用情況:面向對象操作,分離業務與底層,不需要字段屬性攝入到dao實作層。  缺點:适用面較hql有限。

例子查詢

六種方式實作hibernate查詢,及IDE推薦

static list example(user user) {

  list<user> users = s.createcriteria(user.class).add(

    example.create(user)).list();

  // list<user>

  // users2=s.createcriteria(user.class).add((example.create(user)).ignorecase())

  // .createcriteria("child").add((example.create(user))).list();

  return users;

六種方式實作hibernate查詢,及IDE推薦

适用情況:面向對象操作。   缺點:适用面較hql有限,不推薦。

sql查詢

六種方式實作hibernate查詢,及IDE推薦

static list sql() {

  query q = s.createsqlquery("select * from user").addentity(user.class);

  list<user> rs = q.list();

六種方式實作hibernate查詢,及IDE推薦

适用情況:不熟悉hql的朋友,又不打算轉資料庫平台的朋友,萬能方法   缺點:破壞跨平台,不易維護,不面向對象。

命名查詢

static list namedquery(int id) {

  query q = s.getnamedquery("getuserbyid");

  q.setinteger("id", id);

  return q.list();

六種方式實作hibernate查詢,及IDE推薦

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

<!doctype hibernate-mapping public "-//hibernate/hibernate mapping dtd 3.0//en"

<hibernate-mapping>

    <class name="com.sy.vo.user" table="user" catalog="news">

六種方式實作hibernate查詢,及IDE推薦
六種方式實作hibernate查詢,及IDE推薦

    </class>

    <!-- 命名查詢:定義查詢條件 -->

    <query name="getuserbyid">

     <![cdata[from user where id=:id]]>

    </query>

    <!-- 命名查詢中使用sql,不推薦使用,影響跨資料庫

    <sql-query name="getuserbyid2">

     <![cdata[select * from user where 

六種方式實作hibernate查詢,及IDE推薦

]]>

    </sql-query> -->

</hibernate-mapping>

六種方式實作hibernate查詢,及IDE推薦

适用情況:萬能方法,有點像ibatis輕量級架構的操作,友善維護。  缺點:不面向對象。基于hql和sql,有一定缺陷。

**************精品軟體推薦:netbeans6.5 java和php開發人員的利器*****************

程式員雜志上robbin推薦了這個ide,于是昨天下載下傳了一個,個人感覺很好用。以下是我覺得比較好的地方:

netbeans6.5(最新版)是一個免費的ide工具,很利于推廣。

基于jdk5和6,基于tomcat6,mysql5。

支援插件,有完美漢化的開發環境,利于新手使用。

目前支援j2se,j2ee(jsf,ejb,hibernate,spring,jpa),j2me,

php,ruby,c/c++,groovy,javafx,js......的開發。

c/c++需要自己添加配置,預設不支援編譯。ruby預設有内置解析器。

别的支援有待嘗試。

具備自動提示,但是感覺速度較慢,不夠強。

xml配置檔案操作智能化,友善開發。

記憶體占用少160mb左右,軟體大小不到250mb。