Hibernate 中的 DetachedCriteria查詢(所有使用到的類屬性必須在映射文件中存在)
DetachedCriteria對象爲hibernate的離線查詢對象(即該對象不是由session創建[由forClass或者forEntityName來創建],查詢的動態sql語句在web層即可以生成[即可以脫離session來動態構建sql語句,進行查詢])
查找哪一個類:
DetachedCriteria criteria = DetachedCriteria.forClass(Project.class);
判斷類屬性(表中列,以後直接用列表示)是否等於某個值:
DetachedCriteria.add(Restrictions.eq("user.id", userId));
or查詢條件
Criterion leader = Restrictions.eq("leader.id", userId);
Criterion member = Restrictions.eq("members.member.id", userId);
LogicalExpression orExp1 = Restrictions.or(leader, member);
criteria.add(orExp1);
like查詢條件
Criterion fullName = Restrictions.like("fullName", findKey);
Criterion shortName = Restrictions.like("shortName", findKey);
Criterion leaderName = Restrictions.like("key", findKey);
LogicalExpression orExp = Restrictions.or( Restrictions.or(fullName, shortName), leaderName);
criteria.add(orExp);
5、查詢數據一共有多少條
DetachedCriteria criteria = this.createFindProjectsCriteria(findKey, userId, scope) ;
criteria.setProjection(Projections.rowCount());
List results = getHibernateTemplate().findByCriteria(criteria);
int count = ((Integer) results.get(0)).intValue();
return count;
查詢不重複的數據條數(其它同5)
criteria.setProjection(Projections.countDistinct("key"));根據主鍵key來查
動態關聯查詢
List cats = sess.createCriteria(Cat.class)
.add( Restrictions.like("name", "Fritz%") )
.setFetchMode("mate", FetchMode.EAGER)
.setFetchMode("kittens", FetchMode.EAGER)
.list();
添加按列排序:
criteria.addOrder(Order.asc(類的屬性));
去掉重複項 :
(1)criteria.setResultTransformer(DetachedCriteria.DISTINCT_ROOT_ENTITY);
(2)detachedCriteria.setProjection(Projections.distinct(Projections.property(str)));
detachedCriteria.setProjection(Projections.groupProperty(str));
使用自定義的sql語言查詢
criteria.add(Restrictions.sqlRestriction(" project_Id="+projectId+" connect by prior id= prev_ver "));
使用自定義的sql返回實體類的集合
criteria.add(Restrictions.sqlRestriction(" project_Id="+projectId+" connect by prior id= prev_ver ")).addxxx();
Query query =session.createSQLQuery(sql).addEntity(Project.class);
query.setString("active", "Y");
query.setLong("leaderId", userId);
條件拼裝完成後,邊可以進行查詢了 :
getHibernateTemplate().findByCriteria
查找哪一個類:
DetachedCriteria criteria = DetachedCriteria.forClass(Project.class);
判斷類屬性(表中列,以後直接用列表示)是否等於某個值:
DetachedCriteria.add(Restrictions.eq("user.id", userId));
or查詢條件
Criterion leader = Restrictions.eq("leader.id", userId);
Criterion member = Restrictions.eq("members.member.id", userId);
LogicalExpression orExp1 = Restrictions.or(leader, member);
criteria.add(orExp1);
like查詢條件
Criterion fullName = Restrictions.like("fullName", findKey);
Criterion shortName = Restrictions.like("shortName", findKey);
Criterion leaderName = Restrictions.like("key", findKey);
LogicalExpression orExp = Restrictions.or( Restrictions.or(fullName, shortName), leaderName);
criteria.add(orExp);
5、查詢數據一共有多少條
DetachedCriteria criteria = this.createFindProjectsCriteria(findKey, userId, scope) ;
criteria.setProjection(Projections.rowCount());
List results = getHibernateTemplate().findByCriteria(criteria);
int count = ((Integer) results.get(0)).intValue();
return count;
查詢不重複的數據條數(其它同5)
criteria.setProjection(Projections.countDistinct("key"));根據主鍵key來查
動態關聯查詢
List cats = sess.createCriteria(Cat.class)
.add( Restrictions.like("name", "Fritz%") )
.setFetchMode("mate", FetchMode.EAGER)
.setFetchMode("kittens", FetchMode.EAGER)
.list();
添加按列排序:
criteria.addOrder(Order.asc(類的屬性));
去掉重複項 :
(1)criteria.setResultTransformer(DetachedCriteria.DISTINCT_ROOT_ENTITY);
(2)detachedCriteria.setProjection(Projections.distinct(Projections.property(str)));
detachedCriteria.setProjection(Projections.groupProperty(str));
使用自定義的sql語言查詢
criteria.add(Restrictions.sqlRestriction(" project_Id="+projectId+" connect by prior id= prev_ver "));
使用自定義的sql返回實體類的集合
criteria.add(Restrictions.sqlRestriction(" project_Id="+projectId+" connect by prior id= prev_ver ")).addxxx();
Query query =session.createSQLQuery(sql).addEntity(Project.class);
query.setString("active", "Y");
query.setLong("leaderId", userId);
條件拼裝完成後,邊可以進行查詢了 :
getHibernateTemplate().findByCriteria
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.