- 对象导航查询
1.根据id查询客户,再查询这个客户下所有联系人
@Test
public void Query1(){
Session session = SessionFactoryUtil.GetSession();
Customer customer = session.get(Customer.class, "4028802d5cc56d3b015cc56d3dc50000");
Set<LinkedMan> lm = customer.getLinkedMans();
System.out.println(lm);
}
- OID查询
1.根据id查询
Customer customer = session.get(Customer.class, "4028802d5cc56d3b015cc56d3dc50000");
- hql查询
1.hql:hibernate query language ,hibernate提供的一种查询语言,和sql很相似,区别在于sql操作数据库表和字段,hql操作实体类和属性
2.查询所有
Session session = SessionFactoryUtil.GetSession();
List<Customer> customers = session.createQuery("from Customer").list();
System.out.println(customers);
3.条件查询
//使用占位符
String hql = "from Customer where c_id =?";
List<Customer> customers = session.createQuery(hql).setParameter(0, "4028802d5cc56d3b015cc56d3dc50000").list();
System.out.println(customers);
//使用参数
String hql1 = "from Customer where c_id =:id";
List<Customer> customers1 = session.createQuery(hql1).setParameter("id","4028802d5cc56d3b015cc56d3dc50000").list();
System.out.println(customers1);
4.分页查询和投影查询
(1)分页查询
//设置开始位置setFirstResult
//设置每页记录数setMaxResults
String hql = "from LinkedMan";
List<LinkedMan> LinkedMans = session.createQuery(hql).setFirstResult(2).setMaxResults(2).list();
System.out.println(LinkedMans);
(2)投影查询:部分字段的查询(hql语句select后面不能写*不支持)
Session session = SessionFactoryUtil.GetSession();
String hql = "select l_name from LinkedMan";
List<Object> inkedMans = session.createQuery(hql).list();
System.out.println(inkedMans);
如果有多个属性,需要写相应构造方法 在hql语句new 实现
Session session = SessionFactoryUtil.GetSession();
String hql = "select new LinkedMan(l_id,l_name) from LinkedMan";
List<Object> inkedMans = session.createQuery(hql).list();
System.out.println(inkedMans);
- QBC查询
1.查询所有
Session session = SessionFactoryUtil.GetSession();
List<Customer> customers = session.createCriteria(Customer.class).list();
System.out.println(customers);
2.条件查询
Session session = SessionFactoryUtil.GetSession();
List<Customer> customers = session.createCriteria(Customer.class)
.add(Restrictions.eq("c_name","sq"))
.list();
System.out.println(customers);
3.排序和分页
(1)排序
Session session = SessionFactoryUtil.GetSession();
List<LinkedMan> customers = session.createCriteria(LinkedMan.class)
.addOrder(Order.desc("l_id"))
.list();
System.out.println(customers);
(2)分页
Session session = SessionFactoryUtil.GetSession();
List<LinkedMan> customers = session.createCriteria(LinkedMan.class)
.setFirstResult(2)
.setMaxResults(2)
.list();
System.out.println(customers);
注意:开始位置计算公式(当前页-1)*每页记录数
4.统计查询
Session session = SessionFactoryUtil.GetSession();
//创建对象
Criteria ct = session.createCriteria(LinkedMan.class);
//设置操作
ct.setProjection(Projections.rowCount());
//调用方法获取结果(出现null不会报错,使用该方法)
Object o = ct.uniqueResult();
System.out.println(o);
5.离线查询
应用场景:servlet调用service ,service调用dao,可以把离线对象在servlet创建,传到dao
Session session = SessionFactoryUtil.GetSession();
//创建对象
DetachedCriteria criteria = DetachedCriteria.forClass(LinkedMan.class);
//在最终执行才需要session
Criteria ct = criteria.getExecutableCriteria(session);
List<LinkedMan> lm =ct.list();
System.out.println(lm);