Hibernate查询方式及关联

本文详细介绍了Hibernate中的查询方式,包括使用HQL、Criteria API进行查询,以及如何处理关联关系。从基本的查询到复杂的条件过滤、排序、分页和投影查询,展示了Hibernate强大的查询能力。同时,还提到了使用注解配置实体类的方法。
摘要由CSDN通过智能技术生成
Hibernate查询方式

hql:hibernate QUery Language :以字符串的形式进行数据查询。
-------------面向对象的字符串格式。
原生sql/本地查询:就是纯粹的sql语句。
Criteria查询:动态生成查询语句。

2.使用hql的步骤:
---获得session
a.创建Query对象,并且执行sql语句
b.接受返回值。
c.处理返回值。
---关闭session。
3.hql语句
【from 实体类的名字】 ===select * from 表名=====select 别名 from 表名 别名
from Users
from org.ecjtu.entity.Users
from Users u
添加查询条件
from 实体的名字 where 实体的属性=?and 实体的属性=?
例如:
1)
String hql="from Users where username=?";
Query query=session.createQuery(hql);
 query.setString(0, "小明");
2)
String hql="from Users where username=:a";  --a为代号名。
Query query=session.createQuery(hql);
 query.setString("a", "小明");
使用setxxx()   确定变量的类型。
使用setParameter(),可以不在乎属性是什么类型的。在不确定变量类型的时候,使用。
query.setParameter("b", 7);
 
query.list()和query.iterate()区别
1.返回值不一样
2.查询原理不一样。
list查询:select * from 表名
Iterate()查询:
select id from 表名
select * from 表名  where id=?
3.list()执行1条语句
iterate()----n+1条语句
4.list()直走1级缓存
 iterate()-走2级缓存
5.list()直接去数据库查询数据
 iterate()先去1级缓存查看,是否有满足条件的,再去2级缓存查看,若没有满足条件的,进入数据库查询。---减少访问数据库的次



例子1:
Iterator<Users> iter=query.iterate();
while(iter.hasNext()){//光标在上一行,判断下一行有没有。
Users user=iter.next();
System.out.println(user.toString());
}
例子2: ArrayList<Users> list=(ArrayList<Users>) query.list();//1.
ArrayList<Users> list=(ArrayList<Users>) session.createQuery("from Users").list();//2.
for(Users user:list){
System.out.println(user.toString());
}
【from 实体类名 where 属性=?order by id desc】
 
5.动态查询
--需求根据用户输入的查询条件个数,进行动态拼接查询
1.新建一个javaBean
2.
3.处理不确定条件个数是使用
query.setProperties(pv);
---两种方案,进行数据封装
map集合
javaBean工具类

6.query对象的特殊方法:针对某些功能,查询更方便。
uniqueResult():根据hql查询条件,进行查询,只返回单个对象。
---条件:必须保证查询后的结果只有一条数据,否则报错。
setMaxResults():控制查询的个数

----一起组合使用
Users user=(Users) query.setMaxResults(1).uniqueResult(); 

setFirstResult(i);//数据查询的起始位置,i表示从数据的第i+1条开始查询。(数据下标从0开始)
例子:
ArrayList<Users> list=(ArrayList<Users>) query.setMaxResults(3).setFirstResult(2).list();

分页查询
总条数
总页数
每页显示条数
当前页数
每页显示的信息
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值