Hibernate③单表和多表的查询方式

更多Hibernate在框架开发


1 单表查询

1.1 QID检索与查询中的效率优化

OID检索方式是Session对象的get()方法和load()方法 。都是根据id查询返回实体类对象。 其中get()是立即查询,load()是延迟查询 。

1.1.1 get()与立即查询

Depart dept = session.get(Depart.class, 1); //发送sql语句 
System.out.println(dept.getDepName());

立即查询: 调用方法后立即发送sql语句进行查询操作,返回实体类对象

代码中,调用get()方法后,立即发送sql语句,查询id=1的记录,返回Depart实体类的对象。

1.1.2 load()与延迟查询

Depart dept = session.load(Depart.class, 2); //没有发送sql语句
System.out.println(dept.getDepId()); //没有发送sql语句
System.out.println(dept.getDepName()) //发送sql语句

延迟查询: 调用方法后不会发送sql语句,只是返回一个实体类的代理对象,此代理对象是一个空壳,只有实体类的id属性,当用到其他属性时才发送sql语句。也叫懒加载或懒查询

代码中,调用load()方法后,不发送sql语句,返回Depart实体类的代理对象,该代理对象只有id属性,当使用name属性时,才发送sql语句。

load()方法默认是延迟查询,可以通过配置修改成立即查询,配置为: 在查询实体类的映射配置文件的<class>标签中添加属性lazy=false

提醒 : 延迟查询因为其代理对象空壳的性质,极大的节约了内存空间,提高了查询效率,所以能用延迟查询就不要用立即查询

1.2 HQL检索

HQL检索是hibernate提供的一种常用的检索方法。需要使用org.hibernate.Query 。需要使用hql语言,其与sql语言的不同在于 实体类名和属性名代替了表名和字段名,且可以省略select关键字,但*不再可用。

/**
 * 查询所有记录
 *    from User   //查询所有,可以省略select,但不能用*代替所有 
 *    select u from User u  //别名
 *    from User order by userid  // 排序查询
 */
Query query = session.createQuery("select u from User u"); 
List<User> list = query.list();
for(User user : list){
    System.out.println(user.getUsername());
}
/**
 * 条件查询
 *    两种方式,索引方式中是从0开始的
 */
/*Query quer
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孤旅青山迷情人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值