在hibrnate中get()方法的查询能力比较弱,只能按id查询。
进而引出hql和critae两种比较复杂的查找方法
2-1、HQL(Hibernate Query Language)
面向对象的查询语言,与SQL不同,HQL中的对象名是区分大小写的(除了JAVA类和属性其他部分不区分大小写);HQL中查的是对象而不是和表,并且支持多态;HQL主要通过Query来操作,Query的创建方式:
Query q = session.createQuery(hql);
·from Person
·from User user where user.name=:name
·from User user where user.name=:name and user.birthday < :birthday
例子:
package com.hbsi.test;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import com.hbsi.domain.User;
import com.hbsi.hibrnate.HibrnateUtil;
public class QueryTest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
query2("www");
}
//查询所有
public static void query(){
Session s=null;
try{
s=HibrnateUtil.getSession();
String queryString="from User";//hibrnate的查询语言
Query query=s.createQuery(queryString);
List<User> list=query.list();//符合的所有结果集
//query.uniqueResult();//一行结果
//遍历所有的记录
for(User u:list){
System.out.println(u.toString());
}
}finally{
if(s!=null){
s.close();
}
}
}
//查询
public static void query1(String name){
Session s=null;
try{
s=HibrnateUtil.getSession();
String queryString="from User user where user.name=?";//hibrnate的查询语言
Query query=s.createQuery(queryString);
query.setString(0, name);
/*List<User> list=query.list();//符合的所有结果集
//query.uniqueResult();//一行结果
//遍历所有的记录
for(User u:list){
System.out.println(u.toString());
}*/
User user=(User)query.uniqueResult();
System.out.println(user.toString());
}finally{
if(s!=null){
s.close();
}
}
}
//查询 hibrnate的查询语言 用命名参数
public static void query2(String name){
Session s=null;
try{
s=HibrnateUtil.getSession();
String queryString="from User user where user.name=:n";//hibrnate的查询语言
Query query=s.createQuery(queryString);
query.setString("n", name);
query.setFirstResult(0);
query.setMaxResults(2);
List<User> list=query.list();//符合的所有结果集
//遍历所有的记录
for(User u:list){
System.out.println(u.toString());
}
/*User user=(User)query.uniqueResult();//一行结果
System.out.println(user.toString());*/
}finally{
if(s!=null){
s.close();
}
}
}
}
2-2、Criteria
Criteria是一种比HQL更面向对象的查询方式;Criteria的创建方式:
Criteria crit = session.createCriteria(DomainClass.class);
简单属性条件如:criteria.add(Restrictions.eq(propertyName, value)),
criteria.add(Restrictions.eqProperty(propertyName,otherPropertyName
例子:package com.hbsi.test;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;
import com.hbsi.domain.User;
import com.hbsi.hibrnate.HibrnateUtil;
public class CriTest {
/**
* @param args
*/
public static void main(String[] args) {
cri("rrr");
}
public static void cri(String name){
Session s=null;
try{
s=HibrnateUtil.getSession();
Criteria c=s.createCriteria(User.class).add(Restrictions.eq("name", name));
List<User> list=c.list();
for(User u:list){
System.out.println(u.toString());
}
}finally{
if(s!=null){
s.close();
}
}
}
}