1. Use the Criteria class to query
eg:
public StoreOrderConsume getByCode(String consumeCode){ Criteria criteria = this.getSessionFactory().getCurrentSession(). createCriteria(StoreOrderConsume.class); criteria.add(Restrictions.eq("consumerCode", consumeCode)); @SuppressWarnings("unchecked") List<StoreOrderConsume> storeOrderConsumes = criteria.list(); if(!CollectionUtils.isEmpty(storeOrderConsumes)){ return storeOrderConsumes.get(0); } return null; }
2. Use Query query
2.1 hql statement query
eg:
public List<StoreOrderConsume> getList() { String sql = " FROM StoreOrderConsume WHERE num >1"; Query query = this.getHibernateTemplate().getSessionFactory().getCurrentSession() .createQuery(sql.toString()); return ( List<StoreOrderConsume>) query.list(); }
2.2 Querying tea with sql statement
eg:
@Override public Integer getConsumerCountByOrderPrdId(Integer orderPrdId) { String sql = " SELECT COUNT(id) FROM store_order_consume WHERE STATUS=0 AND order_prd_id= "+ orderPrdId; Query query = this.getHibernateTemplate().getSessionFactory().getCurrentSession() .createSQLQuery(sql.toString()); return Integer.parseInt(query.list().get(0)+""); }
The difference between using hql statement and sql statement is whether createSQLQuery has SQL.SQL.
3. hibernate query parameter return encapsulation
3.1 Using Transformers to transform entities
eg:
(List<ConsumeListVo>) query.setResultTransformer(Transformers.aliasToBean(ConsumeListVo.class)) .list());
3.2 Single field conversion using addScalar method
@Override public List<String> getConsumeBuyerMobile() { String sql = "SELECT DISTINCT o.buyer_mobile AS buyerMobile FROM store_order o,store_order_prd p " + "WHERE o.id=p.order_id AND o.order_type =1 AND p.order_status = 2 AND " + "TIMESTAMPDIFF(MONTH,o.pay_time,NOW()) >1 "; Query query = this.getHibernateTemplate().getSessionFactory().getCurrentSession().createSQLQuery(sql.toString()) .addScalar("buyerMobile", StringType.INSTANCE); List <String> list = query.list(); return list; }
4. Hibernate paging query
query.setFirstResult((orderListMessDo.getPageNum()-1)*orderListMessDo.getPageSize());
query.setMaxResults(orderListMessDo.getPageSize());
5. Bring in parameters using query.setParameter
public int updateDeliverTime(Integer orderId) throws Exception { String sql = "UPDATE store_order SET remind_time=NOW() WHERE status=1 AND id=:orderId"; Query query = this.getHibernateTemplate().getSessionFactory().getCurrentSession().createSQLQuery(sql.toString()); query.setParameter("orderId",orderId); return query.executeUpdate(); }
6. The method that hibernate uses in query is query.setParameterList( "ids" , ids) ;
public int updateMult(List<Integer> ids) { String hql = "update ServiceOrder mso set mso.isDel = 1 where mso.id in(:ids)"; Query query= this.currentSession().createQuery(hql); query.setParameterList("ids", ids); return query.executeUpdate(); }