熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java開源技術 >> 正文

hibernate的多條件動態查詢

2013-11-23 20:26:48  來源: Java開源技術 

  在hibernate中是支持多條件動態查詢的這種問題是非常實用的比如說你做一個項目要實現一個復合查詢

  例如有這麼一個界面

  

  那麼要實現這個查詢對於用戶來說他的查詢條件可能不健全有可能只填寫其中的那麼要實現這個查詢我們可以用hibernate的動態條件查詢

  下面我寫一個例子

  我有一張表叫user表

  package comfishtestdao;

  import javasqlDate;

  public class User {

  int id;

  String name;

  int age;

  Date brithday;

  public String getName() {

  returnname;

  }

  public void setName(String name) {

  thisname = name;

  }

  public int getAge() {

  returnage;

  }

  public void setAge(int age) {

  thisage = age;

  }

  public Date getBrithday() {

  returnbrithday;

  }

  public void setBrithday(Date brithday) {

  thisbrithday = brithday;

  }

  public int getId() {

  returnid;

  }

  public void setId(int id) {

  thisid = id;

  }

  }

  Userhbmxml

  <?xmlversion=encoding=UTF?>

  <!DOCTYPEhibernatemapping PUBLIC

  //Hibernate/HibernateMapping DTD //EN

  hiber/hibernatemappingdtd>

  <hibernatemapping>

  <classname=comfishtestdaoUser>

  <idname=id type=integer>

  <generatorclass=increment></generator>

  </id>

  <propertyname=name></property>

  <propertyname=age></property>

  <propertyname=brithday></property>

  </class>

  </hibernatemapping>

  在XXXcgfxml注冊一下

  然後我們寫一個測試類

  package comfishdomain;

  import javasqlDate;

  import javautilList;

  import orghibernateCriteria;

  import orghibernateSession;

  import orghibernateTransaction;

  import orghibernatecriterionDetachedCriteria;

  import orghibernatecriterionRestrictions;

  import comfishtestdaoUser;

  import comfishutilHibernateSessionFactory;

  public class Test {

  public static void main(String[] args) {

  // addData();

  queryData();

  }

  // 添加數據

  public static void addData() {

  Session session = HibernateSessionFactorygetSession();

  Transaction transaction = sessionbeginTransaction();

  transactionbegin();

  for (int i = ; i < ; i++) {

  User user = new User();

  usersetAge( + i);

  usersetName( + i);

  usersetBrithday(DatevalueOf());

  sessionsave(user);

  }

  mit();

  sessionclose();

  }

  // 查詢數據

  public static void queryData() {

  String outName = ;

  int outAge = ;

  Date outDate = null;

  Session session = HibernateSessionFactorygetSession();

  DetachedCriteria dc = DetachedCriteriaforClass(Userclass);

  if (outName !=null) {

  dcadd(Restrictionseq(nameoutName));

  }

  if (outAge > ) {

  dcadd(Restrictionseq(age outAge));

  }

  if (outDate !=null) {

  dcadd(Restrictionseq(brithday outDate));

  }

  Criteria c = dcgetExecutableCriteria(session);

  List<User> list = clist();

  for (User i : list) {

  Systemoutprintln(igetName() +  + igetAge());

  }

  }

  }

  看看測試類中的查詢方法如果String outName = ;

  intoutAge = ;

  DateoutDate = null;

  這三個條件是通過從前台或者是用戶輸入的那麼就實現了多條件的動態查詢

  我們看看數據庫的信息

  

  顯然這個裡面有一條記錄是符合的我們看看輸出的結果是什麼

  張  

  利用hibernate的好處是這樣我只要個if語句就可以解決如果是我們的自己寫的話我們分個不為空 種情況個不為空種情況 個不為空 種情況加上全空種情況 總共種情況然後我們在自己拼接hql或者sql語句很麻煩如果是個條件一起或者更加多動態查詢就更加占優勢了


From:http://tw.wingwit.com/Article/program/Java/ky/201311/28511.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.