`
Brera
  • 浏览: 2513 次
  • 性别: Icon_minigender_1
  • 来自: 火星
社区版块
存档分类
最新评论

hibernate高级查询

 
阅读更多

条件查询

session.createCriteria(Item.class);
session.createCriteria(java.lang.Object.class);
 
session.createCriteria(User.class).addOrder( Order.asc("lastname") ).addOrder( Order.asc("firstname") );

 不必再session开启的条件下创建查询

DetachedCriteria crit =
DetachedCriteria.forClass(User.class).addOrder( Order.asc("lastname") ).addOrder( Order.asc("firstname") );
List result = crit.getExecutableCriteria(session).list();

限制

Criterion emailEq = Restrictions.eq("email", "foo@hibernate.org");
Criteria crit = session.createCriteria(User.class);
crit.add(emailEq);
User user = (User) crit.uniqueResult();
 
User user =
(User) session.createCriteria(User.class).add(Restrictions.eq("email", "foo@hibernate.org")).uniqueResult();
 
session.createCriteria(User.class).add( Property.forName("email").eq("foo@hibernate.org") );
 
session.createCriteria(User.class).add( Restrictions.eq("homeAddress.street", "Foo"));

 比较表达式

Criterion restriction =
Restrictions.between("amount",new BigDecimal(100),new BigDecimal(200) );
session.createCriteria(Bid.class).add(restriction);
session.createCriteria(Bid.class).add( Restrictions.gt("amount", new BigDecimal(100) ) );
String[] emails = { "foo@hibernate.org", "bar@hibernate.org" };
session.createCriteria(User.class).add( Restrictions.in("email", emails) );
 
session.createCriteria(User.class).add( Restrictions.isNull("email") );
session.createCriteria(User.class).add( Restrictions.isNotNull("email") );
session.createCriteria(Item.class).add( Restrictions.isEmpty("bids"));
session.createCriteria(Item.class).add( Restrictions.sizeGt("bids", 3));
 
session.createCriteria(User.class).add( Restrictions.eqProperty("firstname", "username") );

 字符串匹配

session.createCriteria(User.class).add( Restrictions.like("username", "G%") );
session.createCriteria(User.class).add( Restrictions.like("username", "G", MatchMode.START) );
 
session.createCriteria(User.class).add( Restrictions.eq("username", "foo").ignoreCase() );

 组合

session.createCriteria(User.class).add( Restrictions.like("firstname", "G%") ).add( Restrictions.like("lastname", "K%") );
 
session.createCriteria(User.class)
.add(
Restrictions.or(
Restrictions.and(
Restrictions.like("firstname", "G%"),
Restrictions.like("lastname", "K%")
),
Restrictions.in("email", emails)
)
);

 添加任意SQL

session.createCriteria(User.class)
.add( Restrictions.sqlRestriction(
"length({alias}.PASSWORD) < ?",
5,
Hibernate.INTEGER
)
);
 
session.createCriteria(Item.class)
.add( Restrictions.sqlRestriction(
"'100' > all" +
" ( select b.AMOUNT from BID b" +
" where b.ITEM_ID = {alias}.ITEM_ID )"
)
);

 子查询

DetachedCriteria subquery =
DetachedCriteria.forClass(Item.class, "i");
subquery.add( Restrictions.eqProperty("i.seller.id", "u.id"))
.add( Restrictions.isNotNull("i.successfulBid") )
.setProjection( Property.forName("i.id").count() );
Criteria criteria = session.createCriteria(User.class, "u")
.add( Subqueries.lt(10, subquery) );

 级联和动态抓取

Criteria itemCriteria = session.createCriteria(Item.class);
itemCriteria.add(
Restrictions.like("description",
"Foo",
MatchMode.ANYWHERE)
);
Criteria bidCriteria = itemCriteria.createCriteria("bids");
bidCriteria.add( Restrictions.gt( "amount", new BigDecimal(99) ) );
List result = itemCriteria.list();
 
List result =
session.createCriteria(Item.class)
.add( Restrictions.like("description",
"Foo",
MatchMode.ANYWHERE)
)
.createCriteria("bids")
.add( Restrictions.gt("amount", new BigDecimal(99) ) )
.list();

 通过条件查询动态抓取

session.createCriteria(Item.class)
.setFetchMode("bids", FetchMode.JOIN)
.add( Restrictions.like("description", "%Foo%") );
 
session.createCriteria(Item.class)
.createAlias("bids", "b", CriteriaSpecification.INNER_JOIN)
.setFetchMode("b", FetchMode.JOIN)
.add( Restrictions.like("description", "%Foo%") );

 投影

session.createCriteria(Item.class)
.add( Restrictions.gt("endDate", new Date()) )
.setProjection( Projections.id() );
 
session.createCriteria(Item.class)
.setProjection( Projections.projectionList()
.add( Projections.id() )
.add( Projections.property("description") )
.add( Projections.property("initialPrice") )
);
 
session.createCriteria(Item.class)
.setProjection( Projections.projectionList()
.add( Property.forName("id") )
.add( Property.forName("description") )
.add( Property.forName("initialPrice") )
);
 
session.createCriteria(Item.class)
.setProjection( Projections.projectionList()
.add( Projections.id().as("itemId") )
.add( Projections.property("description")
.as("itemDescription") )
.add( Projections.property("initialPrice")
.as("itemInitialPrice") )
).setResultTransformer(
new AliasToBeanResultTransformer(ItemPriceSummary.class)
);

 统计分组

session.createCriteria(Item.class).setProjection( Projections.rowCount() );
 
session.createCriteria(Bid.class)
.createAlias("bidder", "u")
.setProjection( Projections.projectionList()
.add( Property.forName("u.id").group() )
.add( Property.forName("u.username").group() )
.add( Property.forName("id").count())
.add( Property.forName("amount").avg() )
);
 

示例查询

public List findUsers(String firstname,
String lastname) {
StringBuffer queryString = new StringBuffer();
boolean conditionFound = false;
if (firstname != null) {
queryString.append("lower(u.firstname) like :firstname ");
conditionFound=true;
}
if (lastname != null) {
if (conditionFound) queryString.append("and ");
queryString.append("lower(u.lastname) like :lastname ");
conditionFound=true;
}
String fromClause = conditionFound ?
"from User u where " :
"from User u ";
queryString.insert(0, fromClause).append("order by u.username");
Query query = getSession()
.createQuery( queryString.toString() );
if (firstname != null)
query.setString( "firstName",
'%' + firstname.toLowerCase() + '%' );
if (lastname != null)
query.setString( "lastName",
'%' + lastname.toLowerCase() + '%' );
return query.list();
}
 
public List findUsers(String firstname,
String lastname) {
Criteria crit = getSession().createCriteria(User.class);
if (firstname != null) {
crit.add( Restrictions.ilike("firstname",firstname,
MatchMode.ANYWHERE) );
}
if (lastname != null) {
crit.add( Restrictions.ilike("lastname",
lastname,
MatchMode.ANYWHERE) );
}
crit.addOrder( Order.asc("username") );
return crit.list();
}
 
public List findUsersByExample(User u) throws {
Example exampleUser =
Example.create(u)
.ignoreCase()
.enableLike(MatchMode.ANYWHERE)
.excludeProperty("password");
return getSession().createCriteria(User.class)
.add(exampleUser)
.list();
}
 
public List findUsersByExample(User u){
Example exampleUser =
Example.create(u)
.ignoreCase()
.enableLike(MatchMode.ANYWHERE);
return getSession().createCriteria(User.class)
.add( exampleUser )
.createCriteria("items")
.add( Restrictions.isNull("successfulBid") )
.list();
}
 
public List findUsersByExample(User u, Item i) {
Example exampleUser =
Example.create(u).ignoreCase().enableLike(MatchMode.ANYWHERE);
Example exampleItem =
Example.create(i).ignoreCase().enableLike(MatchMode.ANYWHERE);
return getSession().createCriteria(User.class)
.add( exampleUser )
.createCriteria("items")
.add( exampleItem )
.list();
}

  原生查询

List result = session.createSQLQuery("select * from CATEGORY")
.addEntity(Category.class).list();
 
session.createSQLQuery("select {i.*} from ITEM i" +
" join USERS u on i.SELLER_ID = u.USER_ID" +
" where u.USERNAME = :uname")
.addEntity("i", Item.class)
.setParameter("uname", "johndoe");
 
session.createSQLQuery("select {i.*}, {u.*} from ITEM i" +
" join USERS u on i.SELLER_ID = u.USER_ID" +
" where u.USERNAME = :uname")
.addEntity("i", Item.class)
.addJoin("u", "i.seller")
.setParameter("uname", "johndoe");
 
session.createSQLQuery("select u.FIRSTNAME as fname from USERS u")
.addScalar("fname");
 
Properties params = new Properties();
params.put("enumClassname", "auction.model.Rating");
session.createSQLQuery(
"select c.RATING as rating from COMMENTS c" +
" where c.FROM_USER_ID = :uid"
)
.addScalar("rating",
Hibernate.custom(StringEnumUserType.class, params) )
.setParameter("uid", new Long(123));
 
session.createSQLQuery(
"select {i.*}, u.FIRSTNAME as fname from ITEM i" +
" join USERS u on i.SELLER_ID = u.USER_ID" +
" where u.USERNAME = :uname"
)
.addEntity("i", Item.class)
.addScalar("fname")
.setParameter("uname", "johndoe");

 过滤集合

List filteredCollection =session.createFilter( item.getBids(),"order by this.created asc" ).list();
 
List filteredCollection =session.createFilter( item.getBids(), "" ).list();
 
List filteredCollection =session.createFilter( item.getBids(), "" )
.setFirstResult(50).setMaxResults(100).list();
 
String filterString ="select other from Category other where this.name = other.name";
List result =session.createFilter( cat.getChildCategories(), filterString ).list();
 
List result =session.createFilter( item.getBids(),"select this.bidder" ).list();
 
List result =session.createFilter(item.getBids(),"select elements(this.bidder.bids)").list();
 
List result =session.createFilter( user.getBids(),
"where this.created > :oneWeekAgo" ).setTimestamp("oneWeekAgo", oneWeekAgo).list();
 

 

 

 

 

 

 

分享到:
评论

相关推荐

    Hibernate的高级查询

    当我们需要进行更复杂的数据库查询时,Hibernate提供了丰富的高级查询功能,这正是“Hibernate的高级查询”这一主题的核心所在。 在Hibernate中,高级查询主要包括HQL(Hibernate Query Language)、Criteria API和...

    Hibernate QBC高级查询.rar

    本资源“Hibernate QBC高级查询”聚焦于Hibernate Query by Criteria(QBC)的高级用法,旨在帮助开发者深入理解并熟练运用这一强大的查询机制。 Query by Criteria是Hibernate提供的另一种查询方式,与HQL...

    Hibernate

    Hibernate高级查询 介绍了hibernate的各种查询方法,以及HQL的使用

    Hibernate高级教程

    《Hibernate高级教程》是一份深度探索Java对象关系映射(ORM)框架Hibernate的教程,它包含14个精心设计的章节,旨在帮助开发者深入理解并掌握Hibernate的核心特性和高级用法。以下是对这些章节可能涉及的主要知识点...

    通用的hibernate查询

    除了基础的查询,Hibernate还支持连接查询、子查询、聚合函数等高级功能。例如,如果你需要根据用户的年龄进行分组并计算每个年龄段的用户数量,可以这样写: ```java String hql = "select age, count(*) from ...

    Hibernate的高级操作[归纳].pdf

    除了状态转换,数据缓存也是Hibernate高级特性的一部分。Hibernate提供了First-Level Cache(一级缓存)和Second-Level Cache(二级缓存)来优化性能。一级缓存是每个Session的私有缓存,存储了Session内的实体对象...

    Hibernate高级映射实例

    本实例主要探讨的是Hibernate的高级映射技术,包括单向一对一、单向多对一、单向一对多以及单向多对多这四种关系映射。 首先,我们来理解一下什么是映射。在Hibernate中,映射是将对象模型与关系数据库之间的桥梁,...

    JAVA高级教程(Hibernate高级+Javascript高级+CSS滤镜+插件编程)

    Hibernate高级 1.Hibernate中文手册 2.Hibernate课件 Javascript高级 1.JS验证大全(很全) 2.Javascript高级教程 3.Javascript参考手册 CSS滤镜 1.精通CSS--滤镜 JSP高级编程 1.jsp高级编程 插件编程 1....

    Hibernate 多表连接分页查询示范项目

    总结,"Hibernate 多表连接分页查询示范项目"是一个实用的示例,它展示了如何在实际应用中利用 Hibernate Criteria API 实现复杂查询和分页,对于学习和掌握 Hibernate 的高级特性和数据库操作技巧非常有帮助。...

    hibernate查询之HQLhibernate查询之HQL

    Hibernate查询之HQL是ORM(对象关系映射)框架Hibernate中的一个重要组成部分,它是一种面向...同时,由于HQL与ORM框架紧密集成,它能够充分利用Hibernate的缓存机制和其他高级特性,提高了应用程序的性能和灵活性。

    基于Jsp的在线考试系统毕业设计论文

    使用ssh必然用到了hql查询,虽然学习过hibernate高级查询,而用hibernate联合4,5张表进行查询时就不知道该用hibernate的那种方式进行查询了,一开始觉得hibernate远没有jdbc直接连数据库简单,后来随着使用hql...

    hiber开发指南 hibernate高级特性

    **hibernate 开发指南:深入理解高级特性** 在Java世界中,Hibernate作为一个强大的对象关系映射(ORM)框架,极大地简化了数据库操作。本文将深入探讨Hibernate的高级特性,帮助开发者更好地理解和应用这一工具,...

    hibernate查询方法

    QueryOver是NHibernate(.NET版Hibernate)引入的一个高级查询API,但也可以在Java Hibernate中使用,它提供了更丰富的查询语法。虽然在Java中使用QueryOver不如使用Criteria API常见,但在某些场景下,QueryOver能...

    数据分页以及高级查询

    在Java中,我们可以使用JPA(Java Persistence API)或Hibernate等ORM框架来实现高级查询。例如,JPA提供了 Criteria API 和 Querydsl 等工具,它们可以用来创建动态、类型安全的查询,避免了SQL注入的风险。...

    Hibernate高级操作

    **Hibernate高级操作** 在Java开发领域,Hibernate是一个广泛使用的对象关系映射(ORM)框架,它简化了数据库操作,使得开发者可以使用面向对象的方式处理数据。深入理解Hibernate的高级操作对于提升开发效率和代码...

    Hibernate查询映射试验

    此外,项目可能还会涉及二级缓存的使用,以及如何在查询中进行分页、排序、聚合函数的应用等高级特性。学习并实践这些内容,不仅可以加深对Hibernate的理解,还能提高代码的可读性和维护性。 总之,通过“Hibernate...

    Hibernate的高级操作

    综上所述,Hibernate的高级操作涵盖了各种查询方式、关联管理、事务处理、缓存机制等多个方面,熟练掌握这些技巧将极大地提升开发效率和应用性能。通过深入学习《精通Hibernate》和《Hibernate的高级操作》等资料,...

    Hibernate学习笔记和资料

    hibernate概述,hibernate入门Demo,hibernate配置文件详解(全局配置,实体类映射配置),配置...hibernate查询方式概述,HQL查询,QBC查询,分页,结果集封装方式 ,高级查询 查询的优化,一级缓存,二级缓存,批量查询,注解方式

    Hibernate 高级配置

    Hibernate高级配置 1. Hibernate与触发器协同工作 1)、触发器使session的缓存中的数据与数据库中的数据不一致 2)、session的update()方法盲目的激发触发器 2. Hibernate中的createQuery方法 1)、uniqueResult()...

    web高级查询+分页

    本项目标题提及的是“web高级查询+分页”,并且描述中提到了使用三大框架Struts2、Hibernate和Spring来实现这一功能。以下是关于这三个框架以及如何利用它们实现高级查询和分页的详细解释。 **Struts2框架** Struts...

Global site tag (gtag.js) - Google Analytics