/**
* QBC Query By Criteria,使用Criteria对象进行查询。
* Criteria查询已经过时,文件建议使用JAP。
* @deprecated (since 5.2) for Session, use the JPA Criteria
* 1) 全表查询
* 2) 条件查询
* 3) 分页查询
* 4) 排序查询
* 5) 聚合查询
* 6) 投影查询
*/
public class QBCTest {
@Test
public void query06() {
// Criteria投影查询。
Criteria criteria = session.createCriteria(Customer.class);
ProjectionList projectionList = Projections.projectionList();
// 查询特定的字段
projectionList.add(Property.forName("id"));
projectionList.add(Property.forName("name"));
criteria.setProjection(projectionList);
List list = criteria.list();
for (Object[] orders : list) {
for (Object o : orders) {
System.out.print(o + "\t");
}
System.out.println();
}
}
@Test
public void query05() {
// Criteria聚合查询。
Criteria criteria = session.createCriteria(Customer.class);
// select count(id) from tb_order
criteria.setProjection(Projections.count("id"));
Long result = (Long) criteria.uniqueResult();
System.out.println(result);
}
@Test
public void query04() {
// Criteria排序查询。
Criteria criteria = session.createCriteria(Customer.class);
// id降序排列
criteria.addOrder(org.hibernate.criterion.Order.desc("id"));
List list = criteria.list();
for (Customer customer : list) {
System.out.println(customer);
}
}
@Test
public void query03() {
// Criteria分页查询。
Criteria criteria = session.createCriteria(Customer.class);
criteria.setFirstResult(0);
criteria.setMaxResults(1);
List list = criteria.list();
for (Customer customer : list) {
System.out.println(customer);
}
}
@Test
public void query02() {
// Criteria条件查询。
Criteria criteria = session.createCriteria(Customer.class);
// 相当与 where name = 'alice' or name = 'tom'
criteria.add(Restrictions.or(Restrictions.eq("name", "alice"),
Restrictions.eq("name", "tom")));
List list = criteria.list();
for (Customer customer : list) {
System.out.println(customer);
}
}
@Test
public void query01() {
// Criteria全表查询。
Criteria criteria = session.createCriteria(Customer.class);
List list = criteria.list();
for (Customer customer : list) {
System.out.println(customer);
}
}
}
4.本地SQL查询
本地SQL查询,相当与直接写SQL进行查询。
Java代码。
public class SQLTest {
@Test
public void query02() {
// 本地SQL查询,查询所有的数据,将查询结果封装为对象。
NativeQuery sqlQuery = session.createSQLQuery("select * from tb_order");
sqlQuery.addEntity(Order.class);
List list = sqlQuery.list();
for (Order order : list) {
System.out.println(order);
}
}
@Test
public void query01() {
// 本地SQL查询,查询所有的数据。
NativeQuery sqlQuery = session.createSQLQuery("select * from tb_order");
List list = sqlQuery.list();
for (Object[] orders : list) {
for (Object o : orders) {
System.out.print(o + "\t");
}
System.out.println();
}
}
}
5.hibernate对象的三种状态。
临时状态。没有OID,并且没有被Session管理。
持久化状态。有OID,被Session管理。
游离状态。有OID,但是没有被Session管理。
代码实现。
@Test
public void test01() {
Order order = new Order();
order.setOrderName("A001");
// 新创建的对象处于临时状态
System.out.println(order);
session.save(order);
// save有处于持久化状态
System.out.println(order);
session.close();
// session关闭处于游离状态
System.out.println(order);
}