[Hibernate] - Query Select
测试了常用的一些HQL查询方法,具体HQL的强大可以参考:
http://docs.jboss.org/hibernate/orm/3.5/reference/zh-CN/html/queryhql.html#queryhql-casesensitivity
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;
}
}
一些DTO的Java Beans:
package com.my.bean.dto; public class GroupByTemp {
private long sumUser;
private long userID; public long getSumUser() {
return sumUser;
}
public void setSumUser(long sumUser) {
this.sumUser = sumUser;
}
public long getUserID() {
return userID;
}
public void setUserID(long userID) {
this.userID = userID;
} /**
* @param sumUser
* @param userID
*/
public GroupByTemp(long sumUser, long userID) {
this.sumUser = sumUser;
this.userID = userID;
}
}
package com.my.bean.dto; import java.math.BigInteger;
import java.util.Date; public class UserSQLTemp {
private BigInteger userID;
private Date createTime;
private String userName;
public BigInteger getUserID() {
return userID;
}
public void setUserID(BigInteger userID) {
this.userID = userID;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
}
package com.my.bean.dto; public class UserTemp {
private long userID;
private String userName;
private String cardName; 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 String getCardName() {
return cardName;
}
public void setCardName(String cardName) {
this.cardName = cardName;
} public UserTemp(long userID, String userName, String cardName) {
super();
this.userID = userID;
this.userName = userName;
this.cardName = cardName;
}
}
测试:
package com.my.init; import java.util.List; import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
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.UserSQLTemp;
import com.my.bean.dto.UserTemp;
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 {
// ----------------------------------------------------
// Select all data
// ----------------------------------------------------
String hql = "FROM User AS U ORDER BY U.createTime DESC";
Query query = session.createQuery(hql);
List<User> users = query.list();
for (User user : users) {
System.out.println("User:" + user.getUserName());
System.out.println("Card size:" + user.getCards().size());
for (UserCard c : user.getCards()) {
System.out.println("Card:" + c.getCardName());
}
} // ----------------------------------------------------
// Select all user name
// ----------------------------------------------------
hql = "SELECT U.userName FROM User AS U";
query = session.createQuery(hql);
List<String> userNames = query.list();
for (String item : userNames) {
System.out.println("Name:" + item);
} // ----------------------------------------------------
// Where
// ----------------------------------------------------
hql = "FROM User AS U WHERE U.userID=:userID";
query = session.createQuery(hql);
query.setParameter("userID", (long) 1);
users = query.list();
for (User user : users) {
System.out.println("User:" + user.getUserName());
} // ----------------------------------------------------
// Other fields, DTO
// ----------------------------------------------------
hql = "SELECT new com.my.bean.dto.UserTemp(U.userID, U.userName, C.cardName)"
+ " FROM User AS U, UserCard AS C"
+ " WHERE U.userID=:userID";
query = session.createQuery(hql);
query.setParameter("userID", (long) 2);
List<UserTemp> temps = query.list();
for (UserTemp item : temps) {
System.out.println("User name:" + item.getUserName()
+ "\tCard name:" + item.getCardName());
} // ----------------------------------------------------
// Group by
// ----------------------------------------------------
hql = "SELECT new com.my.bean.dto.GroupByTemp(SUM(C.user.userID), C.user.userID) FROM UserCard AS C GROUP BY C.cardName";
query = session.createQuery(hql);
List<GroupByTemp> results = query.list();
for (GroupByTemp item : results) {
System.out.println("UserID:" + item.getUserID() + "\tSum:"
+ item.getSumUser());
} // ----------------------------------------------------
// Count
// ----------------------------------------------------
hql = "SELECT COUNT(*) FROM User";
query = session.createQuery(hql);
long count = (long) query.uniqueResult();
System.out.println("Total:" + count); // ----------------------------------------------------
// SQL
// ----------------------------------------------------
String sql = "SELECT user_id AS userID, user_name AS userName, create_time AS createTime FROM user";
query = session.createSQLQuery(sql).setResultTransformer(
Transformers.aliasToBean(UserSQLTemp.class));
List<UserSQLTemp> usersTemp = query.list();
for (UserSQLTemp item : usersTemp) {
System.out.println("UserID:" + item.getUserID()
+ "\tUser name:" + item.getUserName());
} // ----------------------------------------------------
// Left join
// ----------------------------------------------------
hql = "SELECT U FROM User U LEFT JOIN U.cards C WITH C.cardID=:cardID WHERE U.userName=:userName";
query = session.createQuery(hql);
query.setLong("cardID", 1);
query.setString("userName", "Robin");
users = query.list();
for (User user : users) {
System.out.println("User ID:" + user.getUserID()
+ "\tUser name:" + user.getUserName());
} // ----------------------------------------------------
// Top N records
// ----------------------------------------------------
hql = "SELECT U FROM User AS U";
query = session.createQuery(hql).setMaxResults(1);
users = query.list();
for (User user : users) {
System.out.println("User name:" + user.getUserName());
} // ----------------------------------------------------
// Like
// ----------------------------------------------------
hql = "SELECT U FROM User AS U WHERE U.userName LIKE :userName";
query = session.createQuery(hql);
query.setString("userName", "%m%");
users = query.list();
for (User user : users) {
System.out.println("User name:" + user.getUserName());
} // ----------------------------------------------------
// Paging, set First result and Max result
// ----------------------------------------------------
hql = "SELECT U FROM User AS U";
query = session.createQuery(hql).setFirstResult(1).setMaxResults(1);
users = query.list();
for (User user : users) {
System.out.println("User name:" + user.getUserName());
} // ----------------------------------------------------
// IN
// ----------------------------------------------------
hql = "SELECT U FROM User AS U WHERE U.userID IN (:userID)";
query = session.createQuery(hql);
Long[] userIDs = new Long[] { (long) 1, (long) 2 };
query.setParameterList("userID", userIDs);
users = query.list();
for (User user : users) {
System.out.println("User name:" + user.getUserName());
} // ----------------------------------------------------
// Sub search
// ----------------------------------------------------
hql = "SELECT U FROM User AS U WHERE U IN (SELECT C.user FROM UserCard AS C WHERE C.cardID=:cardID)";
query = session.createQuery(hql);
query.setLong("cardID", 1);
users = query.list();
for (User user : users) {
System.out.println("User name:" + user.getUserName());
} // ----------------------------------------------------
// Sub case
// ----------------------------------------------------
hql = "SELECT new com.my.bean.dto.UserTemp("
+ "U.userID, U.userName, (SELECT C.cardName FROM UserCard C WHERE C.cardID=:cardID)"
+ ") FROM User U";
query = session.createQuery(hql);
query.setLong("cardID", 1);
temps = query.list();
for (UserTemp item : temps) {
System.out.println("UserID:" + item.getUserID()
+ "\tUser name:" + item.getUserName() + "\tCard name:"
+ item.getCardName());
} tx.commit();
} catch (Exception e) {
tx.rollback();
e.printStackTrace();
} session.close();
} }
HQL中也可以使用SQL,见测试例子:SQL
(但这种方法不推荐使用,因为这样就破坏了OO设计,除非在逼不得已的情况下,比如那些最初没设计好数据库然后又要出复杂到恶心的报表时)
[Hibernate] - Query Select的更多相关文章
- Hibernate 查询:HQL查询(Hibernate Query Languge)
HQL是一种面向对象的查询语言,其中没有表和字段的概念,只有类,对象和属性的概念. 使用HQL查询所有学生: public static void main(String[] args) { Sess ...
- hql(Hibernate Query Language)
1.Criteria查询对查询条件进行了面向对象封装,符合编程人员的思维方式,不过HQL(Hibernate Query Language)查询提供了更加丰富的和灵活的查询特性,因此Hibernate ...
- HQL: The Hibernate Query Language
Chapter 14. HQL: The Hibernate Query Language 14.1. Case Sensitivity 14.2. The from clause 14.3. Ass ...
- Hibernate Query Language查询:
Hibernate Query Language查询: Criteria查询对查询条件进行了面向对象封装,符合编程人员的思维方式,不过HQL(Hibernate Query Language)查询提供 ...
- HQL(Hibernate Query Language)
1. NativeSQL > HQL > EJB QL(JP QL 1.0) > QBC(Query By Criteria) > QBE(Query By Example)2 ...
- 关于SubSonic3.0插件使用SubSonic.Query.Select查询时,字段类型为tinyint时列丢失问题的Bug修复
下午在写代码时,突然发现一个列名为Enable的字段怎么也查询不出来,开始以为可能这个名称是关键字,所以给过滤掉了,所以就将名称修改为IsEnable,问题还是一样......将名称又改为IsEnab ...
- 为SubSonic3.0的查询(SubSonic.Query.Select和存储过程)添加更多的执行功能
在使用SubSonic3.0的查询功能时,会发现想通过执行返回我们想要的数据,切没有相关的功能,比如说:SubSonic.Query.Select,在使用查询时没有返回DataSet或DataTabl ...
- Event filter with query "SELECT * FROM __InstanceModi
Event filter with query "SELECT * FROM __InstanceModi 问题描述: Details -Event filter with quer ...
- Hibernate - Query简易
package cn.demo; import java.util.List; import org.hibernate.Query; import org.hibernate.Session; im ...
随机推荐
- QQ截图取色方法
转自:http://www.oicqzone.com/qqjiqiao/2014110920194.html ctrl+alt+a截图的时候,会显示RGB值.是的,你也许会想,但是我要的是#RRGGB ...
- ci(转)
1 从代码管理器签出源文件 2 修改代码 3 编译代码 4 遇到错误,转到2继续修改直到达到预期 5 运行单元测试,期望所有的测试绿色(通过) 6 单元测试出错,转入2 7 重构代码,按 ...
- MapBox TileMill
TileMill 学习网站: Walkthrough: Creating tiles with Mapnik using TileMill TileMill 快速入门 Cartography With ...
- Hierarchical Token Bucket
例子一: # tc qdisc add dev eth0 root handle 1: htb default 30 # tc class add dev eth0 parent 1: classid ...
- Java 简介
前言 本文大致介绍 Java 语言 什么是 Java 语言? Java 不仅仅是一门语言,Java 是一个完整的平台,有一个庞大的库,其中包含很多可重用的代码和一个提供诸如安全性,跨操作系统的可移植性 ...
- HOG特征提取分析(转)
背景引言 方向梯度直方图(Histogram of Oriented Gradient,HOG)是用于在计算机视觉和图像处理领域,目标检测的特征描述子.该项技术是用来计算图像局部出现的方向梯度次数或信 ...
- arraylist 转json
java.lang.ClassNotFoundException: org.apache.commons.lang.exception.NestableRuntimeException 标签: cla ...
- HDU-5781 ATM Mechine(概率DP)
题目大意:某个未知整数x等概率的分布在[0,k]中.每次你都可以从这个整数中减去一个任意整数y,如果x>=y,那么x=x-y,操作次数累计加1:否则,将会受到一次错误提示.当错误提示超过w次,将 ...
- 【LOI2005】【P1306】河流
树归题,本来比较简单,但是因为几个思想搞错了,所以卡了两天 原题: 几乎整个Byteland 王国都被森林和河流所覆盖.小点的河汇聚到一起,形成了稍大点的河.就这样,所有的河水都汇聚并流进了一条大河, ...
- 【转】SocketRocket:iOS WebSocket客户端开源框架
原文网址:http://blog.csdn.net/zmp1123/article/details/44015507 WebSocket: WebSocket通信协议实现的是基于浏览器的原生socke ...