使用Hibernate的Criteria做查询。

参考文档:

http://docs.jboss.org/hibernate/orm/3.5/reference/zh-CN/html/querycriteria.html


Java Beans:

package com.my.bean;

import java.util.Date;
import java.util.Set; import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table; @Entity
@Table(name="user")
public class User {
@Id @GeneratedValue @Column(name="user_id", nullable=false)
private long userID; @Column(name="user_name", length=100, nullable=false)
private String userName; @Column(name="create_time", nullable=false)
private Date createTime; @OneToMany(mappedBy="user", cascade=CascadeType.ALL)
private Set<UserCard> cards; public long getUserID() {
return userID;
} public void setUserID(long userID) {
this.userID = userID;
} public String getUserName() {
return userName;
} public void setUserName(String userName) {
this.userName = userName;
} public Date getCreateTime() {
return createTime;
} public void setCreateTime(Date createTime) {
this.createTime = createTime;
} public Set<UserCard> getCards() {
return cards;
} public void setCards(Set<UserCard> cards) {
this.cards = cards;
}
}
package com.my.bean;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table; @Entity
@Table(name="user_card")
public class UserCard {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="card_id")
private long cardID; @Column(name="card_name")
private String cardName; @ManyToOne(cascade=CascadeType.ALL)
@JoinColumn(name="user_id")
private User user; public long getCardID() {
return cardID;
}
public void setCardID(long cardID) {
this.cardID = cardID;
}
public String getCardName() {
return cardName;
}
public void setCardName(String cardName) {
this.cardName = cardName;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}

Java DTO beans:

package com.my.bean.dto;

public class GroupByTemp {
private long sumUser;
private long count;
private long userID; public long getSumUser() {
return sumUser;
}
public void setSumUser(long sumUser) {
this.sumUser = sumUser;
}
public long getCount() {
return count;
}
public void setCount(long count) {
this.count = count;
}
public long getUserID() {
return userID;
}
public void setUserID(long userID) {
this.userID = userID;
}
}
package com.my.bean.dto;

public class UserCardTemp {
private long userID;
private String userName;
private String cardName; public String getUserName() {
return userName;
} public void setUserName(String userName) {
this.userName = userName;
} public String getCardName() {
return cardName;
} public void setCardName(String cardName) {
this.cardName = cardName;
} public UserCardTemp() {
} public long getUserID() {
return userID;
} public void setUserID(long userID) {
this.userID = userID;
} }

测试例子:

package com.my.init;

import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.ProjectionList;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Property;
import org.hibernate.criterion.Restrictions;
import org.hibernate.sql.JoinType;
import org.hibernate.transform.Transformers; import com.my.bean.User;
import com.my.bean.UserCard;
import com.my.bean.dto.GroupByTemp;
import com.my.bean.dto.UserCardTemp;
import com.my.dao.util.HibernateUtil; public class Test { @SuppressWarnings("unchecked")
public static void main(String[] args) {
Session session = HibernateUtil.getSessionFactory().openSession();
Transaction tx = session.beginTransaction(); try {
// ----------------------------------------------------
// Set limit and get user info
// ----------------------------------------------------
Criteria crit = session.createCriteria(User.class);
List<User> users = crit.setFirstResult(1).setMaxResults(1).list();
for (User user : users) {
System.out.println("User name:" + user.getUserName());
} // ----------------------------------------------------
// Order by
// ----------------------------------------------------
crit = session.createCriteria(User.class);
crit.addOrder(Order.desc("userName"));
crit.addOrder(Order.asc("userID"));
users = crit.list();
for (User user : users) {
System.out.println("User name:" + user.getUserName());
} // ----------------------------------------------------
// Where: like and equal
// ----------------------------------------------------
crit = session.createCriteria(User.class);
crit.add(Restrictions.like("userName", "%b%")).add(
Restrictions.eq("userID", (long) 1));
users = crit.list();
for (User user : users) {
System.out.println("User name:" + user.getUserName());
} // ----------------------------------------------------
// Where: more than or less than
// ----------------------------------------------------
crit = session.createCriteria(User.class);
crit.add(Restrictions.or(Restrictions.gt("userID", (long) 1)).add(
Restrictions.lt("userID", (long) 2)));
users = crit.list();
for (User user : users) {
System.out.println("User name:" + user.getUserName());
} // ----------------------------------------------------
// Where: in
// ----------------------------------------------------
crit = session.createCriteria(User.class);
crit.add(Restrictions.in("userName",
new String[] { "Robin", "Amy" }));
users = crit.list();
for (User user : users) {
System.out.println("User name:" + user.getUserName());
} // ----------------------------------------------------
// Property
// ----------------------------------------------------
crit = session.createCriteria(User.class);
crit.add(Property.forName("userName").like("%b%"))
.add(Property.forName("userID").between((long) 1, (long) 2))
.addOrder(Property.forName("userID").desc());
users = crit.list();
for (User user : users) {
System.out.println("User name:" + user.getUserName());
} // ----------------------------------------------------
// Left join
// ----------------------------------------------------
crit = session.createCriteria(User.class);
crit.add(Restrictions.eq("userName", "Robin")).setFetchMode(
"cards", org.hibernate.FetchMode.JOIN);
users = crit.list();
for (User user : users) {
System.out.println("User name:" + user.getUserName());
} // ----------------------------------------------------
// Left join 2
// ----------------------------------------------------
crit = session.createCriteria(User.class);
crit.createAlias("cards", "C", JoinType.LEFT_OUTER_JOIN);
crit.add(Restrictions.eq("userName", "Robin"));
users = crit.list();
for (User user : users) {
System.out.println("User name:" + user.getUserName());
} // ----------------------------------------------------
// Inner join
// ----------------------------------------------------
crit = session.createCriteria(User.class);
crit.add(Restrictions.eq("userName", "Robin"));
crit.createCriteria("cards").add(
Restrictions.eq("cardID", (long) 1));
users = crit.list();
for (User user : users) {
System.out.println("User name:" + user.getUserName());
} // ----------------------------------------------------
// Inner join 2
// ----------------------------------------------------
crit = session.createCriteria(User.class);
crit.add(Restrictions.eq("userName", "Robin"));
crit.createAlias("cards", "C", JoinType.INNER_JOIN);
users = crit.list();
for (User user : users) {
System.out.println("User name:" + user.getUserName());
} // ----------------------------------------------------
// Count
// ----------------------------------------------------
crit = session.createCriteria(User.class);
crit.setProjection(Projections.rowCount()).add(
Restrictions.eq("userName", "Robin"));
System.out.println("Row count:" + crit.uniqueResult().toString()); // ----------------------------------------------------
// Max
// ----------------------------------------------------
crit = session.createCriteria(User.class);
crit.setProjection(Projections.max("userID"));
System.out.println("Max ID:" + crit.uniqueResult().toString()); // ----------------------------------------------------
// Min
// ----------------------------------------------------
crit = session.createCriteria(User.class);
crit.setProjection(Projections.min("userID"));
System.out.println("Max ID:" + crit.uniqueResult().toString()); // ----------------------------------------------------
// ProjectionList and left join
// ----------------------------------------------------
crit = session.createCriteria(User.class);
crit.createAlias("cards", "C", JoinType.LEFT_OUTER_JOIN);
ProjectionList proList = Projections.projectionList();
proList.add(Projections.property("userID"), "userID");
proList.add(Projections.property("userName"), "userName");
proList.add(Projections.property("C.cardName"), "cardName");
crit.setProjection(proList);
crit.setResultTransformer(Transformers
.aliasToBean(UserCardTemp.class));
List<UserCardTemp> temps = crit.list();
for (UserCardTemp uc : temps) {
System.out.println("User ID:" + uc.getUserID() + "\tUser name:"
+ uc.getUserName() + "\tCard name:" + uc.getCardName());
} // ----------------------------------------------------
// ProjectionList Group by
// ----------------------------------------------------
crit = session.createCriteria(User.class);
crit.createAlias("cards", "C", JoinType.LEFT_OUTER_JOIN);
proList = Projections.projectionList();
proList.add(Projections.sum("userID"), "sumUser");
proList.add(Projections.count("userID"), "count");
proList.add(Projections.groupProperty("userID"), "userID");
crit.setProjection(proList);
crit.setResultTransformer(Transformers
.aliasToBean(GroupByTemp.class));
List<GroupByTemp> gt = crit.list();
for (GroupByTemp g : gt) {
System.out.println("Sum:" + g.getSumUser() + "\tUser ID:"
+ g.getUserID() + "\tCount:" + g.getCount());
} // ----------------------------------------------------
// Sub search
// ----------------------------------------------------
crit = session.createCriteria(User.class);
DetachedCriteria sub = DetachedCriteria.forClass(UserCard.class);
sub.setProjection(Property.forName("cardID"));
sub.add(Restrictions.eq("cardID", (long) 1));
crit.add(Property.forName("cards").in(sub));
users = crit.list();
for (User item : users) {
System.out.println("User ID:" + item.getUserID());
} tx.commit();
} catch (Exception e) {
tx.rollback();
e.printStackTrace();
} session.close();
}
}

[Hibernate] - Criteria Select的更多相关文章

  1. 【hibernate criteria】hibernate中criteria的完整用法 转

    ---恢复内容开始--- 转自:http://www.360doc.com/content/090313/10/26262_2794855.html 1.Criteria Hibernate 设计了 ...

  2. atitit. 统计功能框架的最佳实践(1)---- on hibernate criteria

    atitit. 统计功能框架的最佳实践(1)---- on hibernate criteria 1. 关键字 1 2. 统计功能框架普通有有些条件选项...一个日期选项..一个日期类型(日,周,月份 ...

  3. Hibernate Criteria使用

    hibernate中Criteria的完整用法 Criteria 是一个完全面向对象,可扩展的条件查询API,通过它完全不需要考虑数据库底层如何实现.SQL语句如何编写,是Hibernate框架的核心 ...

  4. Hibernate Criteria 查询使用

    转载 http://blog.csdn.net/woshisap/article/details/6747466 Hibernate 设计了 CriteriaSpecification 作为 Crit ...

  5. 分页查询——Hibernate Criteria实现一次查询取得总记录数和分页后结果集

    使用Hibernate criteria进行分页查询时,如何实现一次查询取得总记录数和分页后结果集 - bto310 - ITeye博客 https://bto310.iteye.com/blog/1 ...

  6. hibernate.Criteria分页排序模糊查询

    org.hibernate.Criteria criteria = simpleDAO.getSession().createCriteria(Event.class); Criterion c = ...

  7. hibernate criteria中Restrictions的用法

    方法说明 方法 说明 Restrictions.eq = Restrictions.allEq 利用Map来进行多个等于的限制 Restrictions.gt > Restrictions.ge ...

  8. hibernate Criteria查询多对多(Set集合)条件筛选

    PO public class UserPO implements java.io.Serializable { /** 用户唯一标识ID */ private String id; /** 状态(在 ...

  9. [Hibernate] - Query Select

    测试了常用的一些HQL查询方法,具体HQL的强大可以参考: http://docs.jboss.org/hibernate/orm/3.5/reference/zh-CN/html/queryhql. ...

随机推荐

  1. nginx模块_使用gdb调试nginx源码

    工欲善其事必先利其器,如何使用调试工具gdb一步步调试nginx是了解nginx的重要手段. ps:本文的目标人群是像我这样初接触Unix编程的同学,如果有什么地方错误请指正. 熟悉gdb的使用 这里 ...

  2. cocos2d-html5 sprite打印宽高都为0的问题

    版本是2.1.4,在程序里直接通过图片路径addChild了一个cc.Sprite,想要缩放时通是不起做用,于是通过打印发现其宽,高都为0,查来查去,发现:原来是图片没有注册到Resource.js里 ...

  3. CentOS7.0关于libguestfs的bug

    libguestfs,libguestfs-tools是用来在不启动虚拟机的情况下,快速简单访问虚拟机磁盘的工具. 今天在CentOS7.0系统上通过guestmount命令去mount虚拟机磁盘的时 ...

  4. Cloud Foundry 在 Azure 中国正式发布

    Cloud Foundry 今天在 Azure 中国上正式发布了!这对于 Azure 平台,以及开源社区都是一个令人振奋的里程碑. Cloud Foundry 简化了云计算应用程序的构建,测试,发布和 ...

  5. nohup启动命令(转)

    简单而有用的nohup命令在UNIX/LINUX中,普通进程用&符号放到后台运行,如果启动该程序的控制台logout,则该进程随即终止. 要实现守护进程,一种方法是按守护进程的规则去编程(本站 ...

  6. UI学习笔记---第三天

    视图控制器 功能:视图大小变换 \布局视图\响应事件\检测处理内存警告\检测以及处理屏幕旋转\检测视图切换 MVC (model View controller) UIViewController是M ...

  7. Android加载网络图片的工具类

    ImageView加载网络的图片 HttpUtil.java package com.eiice.httpuimagetils; import java.io.ByteArrayOutputStrea ...

  8. Oracle语句

    分页查询: select rn,last_name,salary from( select rownum rn,last_name,salary from( select last_name,sala ...

  9. 软件推荐 - Source Insight

    一直以来从事的开发工作,涉及的范围很杂,乱七八糟的都有,其中有一项占据了比较长的时间,那就是固件程序的开发,不涉及操作系统,也就是一般意义上大家所说的裸跑程序.​用过的芯片杂七杂八,比较主要的有Ate ...

  10. 利用 t-SNE 高维数据的可视化

    利用 t-SNE 高维数据的可视化  具体软件和教程见: http://lvdmaaten.github.io/tsne/  简要介绍下用法: % Load data load ’mnist_trai ...