hibernate查询方式

  • 对象导航查询

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);


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值