【hibernate的多条件动态查询】
在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"?>
<!DOCTYPEhibernate-mapping PUBLIC
"-//Hibernate/HibernateMapping DTD 3.0//EN"
"hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<classname="com.fish.testdao.User">
<idname="id" type="integer">
<generatorclass="increment"></generator>
</id>
<propertyname="name"></property>
<propertyname="age"></property>
<propertyname="brithday"></property>
</class>
</hibernate-mapping>
在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();
}