发布网友 发布时间:2023-07-31 17:06
共1个回答
热心网友 时间:2024-02-17 05:42
在hibernate中是支持多条件动态查询的 这种问题是非常实用的 比如说你做一个项目要实现一个复合查询
例如有这么一个界面
那么要实现这个查询 对于用户来说他的查询条件可能不健全 有可能只填写其中的 项 那么要实现这个查询 我们可以用hibernate的动态条件查询
下面我写一个例子
我有一张表叫user表
package fish test;
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= encoding= UTF ?>
<!DOCTYPEhibernate mapping PUBLIC
//Hibernate/HibernateMapping DTD //EN
hiber/hibernate mapping dtd >
<hibernate mapping>
<classname= fish test 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 fish domain;
import java sql Date;
import java util List;
import hibernate Criteria;
import hibernate Session;
import hibernate Transaction;
import hibernate criterion DetachedCriteria;
import hibernate criterion Restrictions;
import fish test User;
import fish util HibernateSessionFactory;
public class Test {
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 = ; i < ; i++) {
User user = new User();
user setAge( + i);
user setName( 张 + i);
user setBrithday(Date valueOf( ));
session save(user);
}
mit();
session close();
}
// 查询数据
public static void queryData() {
String outName = 张 ;
int outAge = ;
Date outDate = null;
Session session = HibernateSessionFactory getSession();
DetachedCriteria dc = DetachedCriteria forClass(User class);
if (outName !=null) {
dc add(Restrictions eq( name outName));
}
if (outAge > ) {
dc add(Restrictions eq( age outAge));
}
if (outDate !=null) {
dc add(Restrictions eq( brithday outDate));
}
Criteria c = dc getExecutableCriteria(session);
List<User> list = c list();
for (User i : list) {
System out println(i getName() + + i getAge());
}
}
}
看看测试类中的查询方法 如果String outName = 张 ;
intoutAge = ;
DateoutDate = null;
这三个条件是通过从前台或者是用户输入的那么就实现了多条件的动态查询
我们看看数据库的信息
显然这个里面有一条记录是符合的 我们看看输出的结果是什么
张
lishixin/Article/program/Java/ky/201311/28511