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();
分页查询
总条数
总页数
每页显示条数
当前页数
每页显示的信息
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();
分页查询
总条数
总页数
每页显示条数
当前页数
每页显示的信息