org.hibernate.criterion.Restrictions
HQL(Hibernate Query Language) 和 Criteria 都是面向对象的查询,只不过Criteria更面向对象,Criteria和Restrictions这个类连用来实现条件查询
下面给出一个小例子:
这里只列出其中一个页面,其它页面都没有列出,主要是让大家看看Query和Criteria怎么用
首先是Query的用法:
package cn.itcast.hibernate.domain;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import cn.itcast.hibernate.method.MethodManager;
public class QueryTest {
/**
* @param args
*/
public static void main(String[] args) {
User user = new User();
for(int i=1; i<5; i++) {
user.setName("Aaron"+i);
user.setBirthday(new Date());
MethodManager.addUser(user);//保存数据
}
User ss = new User();
ss.setName("Aaron1");
ss.setBirthday(new Date());
MethodManager.addUser(ss);
User ss1 = new User();
ss1.setName("Aaron1");
ss1.setBirthday(new Date());
MethodManager.addUser(ss1);
query("Aaron1");
}
@SuppressWarnings("unchecked")
static void query(String userName){
Session session = null;
try{
session = HibernateUtils.getSession();
String hql = "from User user where user.name = ?";
//String hql1 = "from User user where user.name.birthday is not null"; //多个属性不为空
//String hql = "from User as user where user.name = :ss";
Query query = session.createQuery(hql);
query.setString(0, userName);//问号的位置从0开始
//query.setString("ss", userName);//当多个问号时,可以指定别名,这样可以防止混乱
query.setFirstResult(0);//表示从结果集的第一条记录开始
query.setMaxResults(10);//表示每次取20条记录,这样可以实现跨数据库分页
List<User> list = query.list();
/* Iterator<User> iterator = query.iterate();
while(iterator.hasNext()){
System.out.println(iterator.next().getName());
} */
//User u = (User)query.uniqueResult();//确定独一无二的结果
//System.out.println(u);
/* List names = new ArrayList();
names.add("Aaron1");
names.add("Aaron2");
Query q = session.createQuery("from User user where user.name in (:naa) order by user.birthday desc");
q.setParameterList("naa", names);
List<User> cats = q.list();
for(User userList : cats){
System.out.println(userList.getName()+","+userList.getBirthday());
}
*///查询条件是一个集合
for(User userList : list){
System.out.println(userList.getName()+","+userList.getBirthday());
}
} finally {
if(session!=null)
session.close();//必须关闭session
}
}
}
Criteria的用法:
package cn.itcast.hibernate.domain;
import java.util.Date;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;
import cn.itcast.hibernate.method.MethodManager;
public class CriteriaQuery {
/**
* @param args
*/
public static void main(String[] args) {
User user = new User();
for(int i=1; i<5; i++) {
user.setName("Aaron"+i);
user.setBirthday(new Date());
MethodManager.addUser(user);//保存数据
}
User ss = new User();
ss.setName("Aaron1");
ss.setBirthday(new Date());
MethodManager.addUser(ss);
User ss1 = new User();
ss1.setName("Aaron1");
ss1.setBirthday(new Date());
MethodManager.addUser(ss1);
query("Aaron1");
}
@SuppressWarnings("unchecked")
static void query(String userName){
Session session = null;
try{
//Criteria和Restrictions实现条件查询
session = HibernateUtils.getSession();
Criteria criteria = session.createCriteria(User.class);
criteria.add(Restrictions.eq("name", userName));
criteria.add(Restrictions.le("birthday", new Date()));//多个add表示与
// criteria.add(Restrictions.or(Restrictions.eq("name", userName), Restrictions.eq("name", "Aaron2")));//表示逻辑或,表示名字为Aaron和Aaron1的都查询出来
criteria.addOrder(Order.desc("id")); //按照id倒序
//criteria.setFirstResult(0);
//criteria.setMaxResults(30);
List<User> list = criteria.list();
for(User userList : list){
System.out.println(userList.getName()+","+userList.getBirthday());
}
} finally {
if(session!=null)
session.close();//必须关闭session
}
}
}