Hibernate的几种查询方式

Hibernate查询方式:

  1. 对象导航查询:根据已经加载的对象,导航到他的关联对象。它利用类与类之间的关系来检索对象。
  2. OID查询:根据id查询某一条记录,返回对象。
  3. HQL查询:(Hibernate Query Language),Hibernate提供的一种查询语言,它和sql查询语言有些相似,但它使用的是类、对象和属性的概念,而没有表和字段的概念。
  4. QBC查询:(Query By Criteria)利用Criteria对象
  5. 本地sql查询:利用SQLQuery对象,使用普通的sql语句实现查询。

对象导航查询和OID查询示例:

public class HibernateDemo08 {

	public static void main(String[] args) {
		Session session = null;
		Transaction tx = null;
		try {
			session = HibernateUtils.getSession();
			tx = session.beginTransaction();
			
			//对象导航查询
			NativePlace nativePlace = session.get(NativePlace.class, 1);
			//该集合中存储着所有"陕西省"(t_user表中外键为1)的用户
			Set<User> userSet = nativePlace.getUserSet();
			for(User user : userSet) {
				System.out.println(user);
			}
			
			//OID查询 根据session对象的get和load()方法
			User user = session.get(User.class, 3);
			System.out.println(user);
			
			tx.commit();
		} catch (Exception e) {
			e.printStackTrace();
			tx.rollback();
		}finally {
			session.close(); 
		}
	}

}

HQL查询:

使用hql查询需要写hql语句。它与sql语句不同,sql语句操作的是表,而它操作的是类。几种常用的查询总结:

  1. 查询所有:from 实体类名称
  2. 条件查询:from 实体类名称 where 属性名称=?
  3. 排序查询:from 实体类名称 oder by 实体类属性名称 asc/desc
  4. 分页查询:MySQL中实现分页查询需要使用关键字limit。而在hql操作中,在语句里面不能写limit。Hibernate的Query对象封装了两个方法实现分页操作
public class HibernateDemo09 {

	public static void main(String[] args) {
		Session session = null;
		Transaction tx = null;
		try {
			session = HibernateUtils.getSession();
			tx = session.beginTransaction();
			//查询所有
			Query query1 = session.createQuery("from User");
			List<User>	users = query1.list();	
			for(User user : users) {
				System.out.println(user);
			}
			
			//条件查询,查询用户名中包含"杨"的,并按id降序排列
			Query query2 = session.createQuery("from User u where u.userName like ? order by id desc");
			query2.setParameter(0, "%杨%");		//这里的索引是从0开始
			users = query2.list();
			for(User user : users) {
				System.out.println(user);
			}
			
			//分页查询
			Query query3 = session.createQuery("from User");
			//设置本页的开始位置
			query3.setFirstResult(0);
			//设置本页要显示的记录数
			query3.setMaxResults(2);		
			users = query3.list();	
			for(User user : users) {
				System.out.println(user);
			}
			
			
			//聚合函数的使用
			Query query4 = session.createQuery("select count(*) from User");
			Long count = (Long) query4.uniqueResult();
			System.out.println(count);
			
			tx.commit();
		} catch (Exception e) {
			e.printStackTrace();
			tx.rollback();
		}finally {
			session.close(); 
		}
	}

}

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值