(一)HQL(Hibernate Query Language)查询方式:
文中Customer、LinkMan为客户和联系人类,需做好映射。
1)别名查询:
Query query = session.createQuery("from Customer c:);
List list = query.list();
2)排序查询
List
3)条件查询
多属性查询:
Query query = session.createQuery("from Customer where cust_source = ? and cust_name like = ?");
query.setParameter(0,"XXX");
query.setParameter(1,"Y%");
按名称查询:
Query query = session.createQuery("from Customer where cust_source =:aaa and cust_name like :bbb");
query.setParameter("aaa","XXX");
query.setParameter("aaa","Y%");
4)投影查询:查询对象的某个或某些属性
多属性查询:
List
将查询的属性封装到对象中:
List
5)分页查询:
Query query = session.createQuery("from Customer");
query.setFirstResult(20);
query.setMaxResults(10);
6)分组统计查询:
List
7)HQL的多表查询
A;内连接:a:显示内连接; b:隐式内连接; c:迫切内连接
B:外连接:a:左外连接; b:右外连接; c:迫切左外连接
迫切内连接:就是在普通的内连接inner join后加一个关键字fetch。普通内连接是以Object数组方式进行存储,而迫切内连接是以对象的方式进行存储。
List
(二)QBC(Query By Criteria)查询方式:
Query By Criteria:条件查询, 它是一种更加面向对象化的查询方式。
1)排序查询:
Criteria criteria = session.createCriteria(Customer.class); //获得Criteria对象
criteria.addOrder(Order.desc("cust_id"));
List
2) 分页查询:
criteria.setFirstResult(10);
criteria.setMaxResult(20);
3)条件查询:
criteria.add(Restrictions.eq("cust_source","开发部"));
criteria.add(Restrictions.like("cust_name","李%));
4)统计查询 (setProjection:聚合函数和group by having)
criteria.setProjection(Projections.rowCount));
Long num = (Long) criteria.uniqueResult();
5)离线条件查询 ---DetachedCriteria
DetachedCriteria dc = DetachedCriteria.forClass(Customer.class);
dc.add(Restrictions.like("cust_name","李%");
Criteria criteria = dc.getExecutableCriteria(session);
List
(三)QBC(Query By Criteria)查询方式:
SQL查询创建:
A:存到数组中:
SQLQuery sqlQuery = session.createQuery("select * from 表名");
List
B:封装到对象中
SQLQuery sqlQuery = session.createQuery("select * from 表名");
sqlQuery.addEntity(Customer.class); //封装到对象中
SQL多表查询
A.内连接:隐式内连接:select * from A,B where A.id = B.id;
显示内连接:select * from A inner join B on A.id = B.id;
B.外连接:左外连接:select * from A left outer join B on A.id = B.id;
右外连接:select * from A right outer join B on A.id = B.id;