hibernate的多条件动态查询(非常实用)

2014-11-24 09:46:39 · 作者: · 浏览: 1

在hibernate中是支持多条件动态查询的。这种问题是非常实用的。比如说你做一个项目要实现一个复合查询。

例如有这么一个界面:



那么要实现这个查询,对于用户来说他的查询条件可能不健全。有可能只填写其中的1-3项。那么要实现这个查询。我们可以用hibernate的动态条件查询。

下面我写一个例子。

我有一张表叫user表。

package com.fish.testdao;

import java.sql.Date;

public class User {

int id;

String name;

int age;

Date brithday;

public String getName() {

returnname;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

returnage;

}

public void setAge(int age) {

this.age = age;

}

public Date getBrithday() {

returnbrithday;

}

public void setBrithday(Date brithday) {

this.brithday = brithday;

}

public int getId() {

returnid;

}

public void setId(int id) {

this.id = id;

}

}

User.hbm.xml

< xmlversion="1.0"encoding="UTF-8" >

"-//Hibernate/HibernateMapping DTD 3.0//EN"

"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

在XXX.cgf.xml注册一下。

然后我们写一个测试类

package com.fish.domain;

import java.sql.Date;

import java.util.List;

import org.hibernate.Criteria;

import org.hibernate.Session;

import org.hibernate.Transaction;

import org.hibernate.criterion.DetachedCriteria;

import org.hibernate.criterion.Restrictions;

import com.fish.testdao.User;

import com.fish.util.HibernateSessionFactory;

public class Test8 {

public static void main(String[] args) {

// addData();

queryData();

}

// 添加数据

public static void addData() {

Session session = HibernateSessionFactory.getSession();

Transaction transaction = session.beginTransaction();

transaction.begin();

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

User user = new User();

user.setAge(10 + i);

user.setName("张" + i);

user.setBrithday(Date.valueOf("1990-12-04"));

session.save(user);

}

transaction.commit();

session.close();

}

// 查询数据

public static void queryData() {

String outName = "张3";

int outAge = 13;

Date outDate = null;

Session session = HibernateSessionFactory.getSession();

DetachedCriteria dc = DetachedCriteria.forClass(User.class);

if (outName !=null) {

dc.add(Restrictions.eq("name",outName));

}

if (outAge > 0) {

dc.add(Restrictions.eq("age", outAge));

}

if (outDate !=null) {

dc.add(Restrictions.eq("brithday", outDate));

}

Criteria c = dc.getExecutableCriteria(session);

List list = c.list();

for (User i : list) {

System.out.println(i.getName() +" " + i.getAge());

}

}

}

看看测试类中的查询方法。如果String outName = "张3";

intoutAge = 13;

DateoutDate = null;

这三个条件是通过从前台或者是用户输入的那么就实现了多条件的动态查询。