Java web开发(9)Hibernate使用_c
QBC查询和HQL查询
这里还是以上一篇中的类Customer 和LinkMan为例子:
1查询所有
QBC
//1 创建对象 Criteria criteria = session.createCriteria(Customer.class); //2 调用方法得到结果 List<Customer> list = criteria.list(); for (Customer customer : list) { System.out.println(customer.getCid()+"::"+customer.getCustName()); }
HQL
//1 创建query对象 Query query = session.createQuery("from Customer"); //2 调用方法得到结果 List<Customer> list = query.list(); for (Customer customer : list) { System.out.println(customer.getCid()+"::"+customer.getCustName()); }
2. 条件查询
SELECT * FROM t_customer WHERE cid=? AND custName=?
QBC
Criteria criteria = session.createCriteria(Customer.class); criteria.add(Restrictions.eq("cid", 1)); criteria.add(Restrictions.eq("custName", "XX")); List<Customer> list = criteria.list();
HQL
Query query = session.createQuery("from Customer c where c.cid=? and c.custName=?"); //设置条件值 // 第一个参数:int类型是?位置,?位置从0开始 // 第二个参数:具体参数值 //设置第一个?值 query.setParameter(0, 1); //设置第二个?值 query.setParameter(1, "XX"); //3 调用方法得到结果 List<Customer> list = query.list();
3模糊查询
QBC
//1 创建对象 Criteria criteria = session.createCriteria(Customer.class); //2设置模糊查询 criteria.add(Restrictions.like("custName", "%浪%")); //3 调用方法得到结果 List<Customer> list = criteria.list();
HQL
//1 创建query对象 Query query = session.createQuery("from Customer c where c.custName like ?"); //2 设置?的值 // %浪% query.setParameter(0, "%浪%"); //3 调用方法得到结果 List<Customer> list = query.list();
4排序查询
QBC
//1 创建对象 Criteria criteria = session.createCriteria(Customer.class); //2 设置对哪个属性进行排序,设置排序规则 criteria.addOrder(Order.desc("cid")); //3 调用方法得到结果 List<Customer> list = criteria.list();
HQL
//1 创建query对象 Query query = session.createQuery("from Customer order by cid desc"); //2 调用方法得到结果 List<Customer> list = query.list();
5分页查询
QBC
//1 创建对象 Criteria criteria = session.createCriteria(Customer.class); //2 设置分页数据 //2.1 设置开始位置 criteria.setFirstResult(0); //2.2 每页显示记录数 criteria.setMaxResults(3); //3 调用方法得到结果 List<Customer> list = criteria.list();
HQL
Query query = session.createQuery("from Customer"); //2 设置分页数据 //2.1 设置开始位置 query.setFirstResult(0); //2.2 设置每页记录数 query.setMaxResults(3); //3 调用方法得到结果 List<Customer> list = query.list();
6.统计查询
QBC
//1 创建对象 Criteria criteria = session.createCriteria(Customer.class); //2 设置操作 criteria.setProjection(Projections.rowCount()); //3 调用方法得到结果 Object obj = criteria.uniqueResult(); Long lobj = (Long) obj; int count = lobj.intValue(); System.out.println(count);
HQL
//1 创建query对象 Query query = session.createQuery("select count(*) from Customer"); //2 调用方法得到结果 //query对象里面有方法,直接返回对象形式 Object obj = query.uniqueResult(); Long lobj = (Long) obj; int count = lobj.intValue(); System.out.println(count);
最末,HQL的投影查询
//1 创建query对象 Query query = session.createQuery("select custName from Customer"); //2 调用方法得到结果 List<Object> list = query.list();
Hibernate对象导航查询
//根据cid=1客户,再查询这个客户里面所有联系人 Customer customer = session.get(Customer.class, 1); //再查询这个客户里面所有联系人 //直接得到客户里面联系人的set集合 //得到set集合,没有发送语句 Set<LinkMan> linkman = customer.getSetLinkMan();
批量抓取
//查询所有客户 Criteria criteria = session.createCriteria(Customer.class); List<Customer> list = criteria.list(); //得到每个客户里面所有的联系人 for (Customer customer : list) { System.out.println(customer.getCid()+"::"+customer.getCustName()); //每个客户里面所有的联系人 Set<LinkMan> setLinkMan = customer.getSetLinkMan(); for (LinkMan linkMan : setLinkMan) { System.out.println(linkMan.getLkm_id()+"::"+linkMan.getLkm_name()); } }