十、Hibernate 查询方式

Hibernate  查询方式简介:

1,导航对象图查询方式;

2,OID 查询方式;

3,本地 SQL 查询方式;

4,HQL 查询方式;

5,QBC 查询方式;(Query By Criteria)

 导航对象图查询方式:根据已经加载的对象导航到其他对象

例如:在前面的各种映射关系中,实体类包含对其他类对象的引用。

 Dept d = (Dept) session.get(Dept.class,2);

 d.getStaffSet().size(); //d对象关联Staff集合,hibernate会自动检索Staff数据。如何检索的,看下面图中发送的sql语句。

 OID 查询方式:按照对象的OID来检索对象

例如:session.get()/session.load();  这里过多的阐述了。

 本地 SQL 查询方式:使用标准的SQL语句来编写。

1.普通本地SQL查询(不带查询条件):

//本地SQL查询
	@Test
	public void testSQL01() throws Exception {
		String sql = "select * from student";
		//因为引用的是SQL 底层封装查询的都是Object 所以我们要绑定查询出来要绑定一个实体  addEntity
		Query query = session.createSQLQuery(sql).addEntity(Student.class);
		List<Student> list = query.list();
		for(Student s:list){
			System.out.println(s);
		}
	}

2:带查询条件的本地SQL查询:

@Test
	public void testSQL02() throws Exception {
		String sql = "select  * from student where student_name like :studentName and student_age=:studentAge";
		Query query = session.createSQLQuery(sql).addEntity(Student.class);
		query.setString("studentName", "张%");
		query.setInteger("studentAge", 10);
		List<Student> list = query.list();
		for(Student s:list){
			System.out.println(s);
		}
	}

 

HQL 查询方式:,是面向对象的查询语言,它和SQL查询语言有些相似,在Hibernate提供的各种检索方式中,HQL是使用的最广的一种检索方式。

注意:HQL操作的全是POJO类中的属性,而不是操作数据库表中的字段。

1.不带查询条件的HQL查询:

@Test
	public void testHQL01() throws Exception {
		String hql = "from Student";
		Query query = session.createQuery(hql);
		List<Student> list = query.list();
		for(Student s:list){
			System.out.println(s);
		}
	}

2.带查询条件的HQL查询(可使用别名 增强可读性):

@Test
	public void testHQL03() throws Exception {
		String hql = "from Student as s where s.studentName like :studentName and s.studentAge=:studentAge";
		Query query = session.createQuery(hql);
		query.setString("studentName",  "张%");
		query.setInteger("studentAge", 10);
		List<Student> list = query.list();
		for(Student s:list){
			System.out.println(s);
		}
	}

3.HQL查询对结果排序:

@Test
	public void testHQL04() throws Exception {
		String hql = "from Student as s order by s.studentAge desc";
		Query query = session.createQuery(hql);
		List<Student> list = query.list();
		for(Student s:list){
			System.out.println(s);
		}
	}

4.HQL查询分页处理:

@Test
	public void testHQL05() throws Exception {
		String hql = "from Student";
		Query query = session.createQuery(hql);
		query.setFirstResult(1);
		query.setMaxResults(2);
		List<Student> list = query.list();
		for(Student s:list){
			System.out.println(s);
		}
	}

5.HQL查询单个对象:

@Test
	public void testHQL06() throws Exception {
		String hql = "from Student";
		Query query = session.createQuery(hql);
		query.setFirstResult(1);
		query.setMaxResults(1);
		Student student = (Student)query.uniqueResult();
		System.out.println(student);
	}

6.HQL查询链式写法:

@Test
	public void testHQL07() throws Exception {
		String hql = "from Student as s where s.studentName like :studentName and s.studentAge=:studentAge";
		Query query = session.createQuery(hql);
		List<Student> list = query
				.setString("studentName",  "张%")
				.setInteger("studentAge", 10)
				.list();
		for(Student s:list){
			System.out.println(s);
		}
	}

QBC 查询方式(Query By Criteria)是用一套接口来实现的查询方式 

普通查询:

@Test
	public void testQBC01() throws Exception {
		Criteria criteria = session.createCriteria(Student.class);
		List<Student> list = criteria.list();
		for(Student s:list){
			System.out.println(s);
		}
	}

带条件查询:

@Test
	public void testQBC02() throws Exception {
		Criteria criteria = session.createCriteria(Student.class);
		Criterion c1 = Restrictions.like("studentName", "张%");
		Criterion c2 = Restrictions.eq("studentAge", 10);
		criteria.add(c1);
		criteria.add(c2);
		List<Student> list = criteria.list();
		for(Student s:list){
			System.out.println(s);
		}
	}

对结果排序:

@Test
	public void testQBC03() throws Exception {
		Criteria criteria = session.createCriteria(Student.class);
		criteria.addOrder(Order.desc("studentAge"));
		List<Student> list = criteria.list();
		for(Student s:list){
			System.out.println(s);
		}
	}

分页查询:

@Test
	public void testQBC04() throws Exception {
		Criteria criteria = session.createCriteria(Student.class);
		criteria.setFirstResult(0);
		criteria.setMaxResults(2);
		List<Student> list = criteria.list();
		for(Student s:list){
			System.out.println(s);
		}
	}

单个对象查询:

@Test
	public void testQBC05() throws Exception {
		Criteria criteria = session.createCriteria(Student.class);
		criteria.setFirstResult(2);
		criteria.setMaxResults(1);
		Student student = (Student) criteria.uniqueResult();
		System.out.println(student);
	}

链式写法:

@Test
	public void testQBC06() throws Exception {
		Criteria criteria = session.createCriteria(Student.class);
		List<Student> list = criteria
				.setFirstResult(0)
				.setMaxResults(2)
				.list();
		for(Student s:list){
			System.out.println(s);
		}
	}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值