Hibernate的条件查询的几种方式

  1. 1、  第一种,用?占位符,如:  
  2. //登录(用?占位符)  
  3.  public List LoginUser(UserPO up)throws Exception{  
  4.   Session session = HibernateSessionFactory.getSession();  
  5.   String hql = "from UserPO where name = ? and pwd= ?";  
  6.   Query query = session.createQuery(hql);  
  7.   query.setString(0, up.getName());  
  8.   query.setString(1, up.getPwd());  
  9.   List list = query.list();  
  10.   session.close();  
  11.   return list;  
  12.  }  
  13.   
  14. 2、用“:+命名”占位符,如:  
  15. //登录(用":命名"占位符)  
  16.  public List LoginUser2(UserPO up)throws Exception{  
  17.   Session session = HibernateSessionFactory.getSession();  
  18.   String hql = "from UserPO where name = :n and pwd= :p";  
  19.   Query query = session.createQuery(hql);  
  20.   query.setString("n", up.getName());  
  21.   query.setString("p", up.getPwd());  
  22.   List list = query.list();  
  23.   session.close();  
  24.   return list;  
  25.  }  
  26.    
  27. 2.1、使用这种占位符还可以这样设值,如:  
  28.    
  29. //登录(用":命名"占位符,用setParameter设值)  
  30.  public List LoginUser3(UserPO up)throws Exception{  
  31.   Session session = HibernateSessionFactory.getSession();  
  32.   String hql = "from UserPO where name = :n and pwd= :p";  
  33.   Query query = session.createQuery(hql);  
  34.   query.setParameter("n", up.getName());  
  35.   query.setParameter("p",up.getPwd());  
  36.   List list = query.list();  
  37.   session.close();  
  38.   return list;  
  39.  }  
  40.    使用这种方式不需要写明映射的类型,Hibernate会通过配置自动给我们转,但是由于Hibernate有两种日期格式:Date和TIMESTAMP,所以对于日期类型必须写明映射的类型。写法:   
  41.    
  42. 3、按照对象进行参数绑定,如:  
  43.    
  44.  //登录(用":命名"占位符,用setProperties设值,命名参数必须要与被绑定的属性名相同)  
  45.  public List LoginUser4(UserPO up)throws Exception{  
  46.   Session session = HibernateSessionFactory.getSession();  
  47.   String hql = "from UserPO where name = :name and pwd= :pwd";  
  48.   Query query = session.createQuery(hql);  
  49.   query.setProperties(up);  
  50.   List list = query.list();  
  51.   session.close();  
  52.   return list;  
  53.  }  
  54. 4、使用条件查询(Criteria),如:  
  55.   
  56.   
  57.  //登录(用条件查询 Criteria)完全脱离sql语句和hql语句  
  58.  public List LoginUser5(UserPO up)throws Exception{  
  59.   Session session = HibernateSessionFactory.getSession();  
  60.   Criteria cri = session.createCriteria(UserPO.class);  
  61.   cri.add(Restrictions.eq("name", up.getName()));  
  62.   cri.add(Restrictions.eq("pwd", up.getPwd()));  
  63.   List list = cri.list();  
  64.   session.close();  
  65.   return list;  
  66.  }  
  67.    
  68.    
  69. 5、离线条件查询,如:  
  70. //登录(用离线条件查询 DetachedCriteria)  
  71.  public List LoginUser6(UserPO up)throws Exception{  
  72.   Session session = HibernateSessionFactory.getSession();  
  73.   DetachedCriteria dc = DetachedCriteria.forClass(UserPO.class);  
  74.   dc.add(Restrictions.eq("name", up.getName()));  
  75.   dc.add(Restrictions.eq("pwd", up.getPwd()));  
  76.   Criteria cri = dc.getExecutableCriteria(session);  
  77.   List list = cri.list();  
  78.   session.close();  
  79.   return list;  
  80.  }  
  81.  使用离线可以将其写在业务层,以参数的形式传入,以减少DAO的代码。  
  82. 6、分页查询:分页查询是数据库应用中的处理方式,query和criteria接口都提供了用于分页查询的方法:  
  83. 1)  setFirstResult(int):指定从哪一个对象开始查询,参数是索引位置,从0开始。  
  84. 2)  setMaxResult(int):指定一次最多查询的对象数量。  

你可能感兴趣的:(Hibernate的条件查询的几种方式)