hibernate全部查询方式以及批量抓取

对象导航查询

根据id查询某个公司,再查询这个公司里面所有的员工。

GongsiEntitygongsi=(GongsiEntity)session.get(GongsiEntity.class,2);

Set<YuangongEntity>yuangongEntitySet= gongsi.getYuangongSet();

OID查询

根据id查询某一条记录,返回对象

GongsiEntitygongsi=(GongsiEntity)session.get(GongsiEntity.class,2);

hql查询

hql语言和普通sql很相似,普通sql操作数据库表和字段,hql操作实体类和属性。

步骤:创建Query对象,写hql语句,调用query对象里面的方法得到结果。

(1)查询所有

查询所有语句:from 实体类名称

Queryquery=session.createQuery("from GongsiEntity ");

List<YuangongEntity>yuangongEntityList=query.list();

(2)条件查询

(与sql基本类似)

条件查询语句:from 实体类名称 where 实体类属性名=?and 实体类属性名=?

             from  实体类名称 like ?

Queryquery=session.createQuery("from GongsiEntity where gname=?");

//设置问号的值

query.setParameter(0,"百度");

List<YuangongEntity>yuangongEntityList=query.list();

3)排序查询

排序查询语句:from 实体类名称 order by 实体类属性名称 asc/desc

默认是asc升序

Queryquery=session.createQuery("from GongsiEntity order by gid desc ");

List<YuangongEntity>yuangongEntityList=query.list();

这里以降序为例

(4)分页查询

Queryquery=session.createQuery("from GongsiEntity");

//设置分页开始位置

query.setFirstResult(0);

//设置分页显示数据条目

query.setMaxResults(1);

List<YuangongEntity>yuangongEntityList=query.list();

(5)投影查询

查询不是所有字段值,而是部分字段值

投影查询语句:select 实体类属性名称,实体类属性名称 from 实体类名称

Queryquery=session.createQuery("select gname from GongsiEntity");

List<String>yuangongEntityList=query.list();

(6)聚集函数使用

Count()、avg()等等

聚集函数使用语句:select count(*)from 实体类名称

Queryquery=session.createQuery("select count(*) from GongsiEntity");

//返回的是一个对象形式的数据

Object obj=query.uniqueResult();                                                                                          

QBC查询

(1)查询所有

//创建Criteria对象,传入要查询的实体类名称

Criteriacriteria=session.createCriteria(GongsiEntity.class);

List<GongsiEntity> gongsiEntityList=criteria.list();

(2)条件查询

Criteriacriteria=session.createCriteria(GongsiEntity.class);

//这里设置查询条件,Restrictions类中有一系列静态方法,对应查询条件

criteria.add(Restrictions.eq("gid",2));

List<GongsiEntity> gongsiEntityList=criteria.list();

(3)排序查询

Criteriacriteria=session.createCriteria(GongsiEntity.class);

//这里做排序,需要传递实体类属性(以降序为例)

criteria.addOrder(Order.desc("gid"));

List<GongsiEntity> gongsiEntityList=criteria.list();

(4)分页查询

Criteriacriteria=session.createCriteria(GongsiEntity.class);

//设置开始位置

criteria.setFirstResult(0);

//设置显示的数据条目数量

criteria.setMaxResults(1);

List<GongsiEntity> gongsiEntityList=criteria.list();

(5)统计查询

Criteria criteria=session.createCriteria(GongsiEntity.class);

//设置方法,统计数据数

criteria.setProjection(Projections.rowCount());

Object obj=criteria.uniqueResult();

(6)离线查询

//创建对象

DetachedCriteriadetachedCriteria=DetachedCriteria.forClass(GongsiEntity.class);

Criteria criteria=detachedCriteria.getExecutableCriteria(session);

List<GongsiEntity> gongsiEntityList=criteria.list();

 

 

HQL多表查询

(1)内连接

内连接查询语句写法:from 实体类名称别名inner join别名点上类中的set集合名称。

Query query=session.createQuery("fromGongsiEntity g inner join g.yuangongSet");

//返回的list里面每部分是数组形式

List list=query.list();

(2)左外连接

左外连接查询语句写法:from 实体类名称别名 left outer join别名点上类中的set集合名称。

Query query=session.createQuery("fromGongsiEntity g left outer join g.yuangongSet");

//返回的list里面每部分是数组形式

List list=query.list();

(3)右外连接

与左外连接类似不写了

(4)迫切内连接

迫切内连接查询语句写法:from 实体类名称别名 inner join fetch 别名点上类中的set集合名称。

Query query=session.createQuery("fromGongsiEntity g inner join fetch g.yuangongSet");

//返回的list里面每部分是对象形式。

List list=query.list();

(5)迫切左外连接

迫切左外连接查询语句写法:from 实体类名称别名 left outer join fetch 实体类名称点上类中的set集合名称。

Query query=session.createQuery("fromGongsiEntity g left outer join fetch g.yuangongSet");

//返回的list里面每部分是对象形式。

List list=query.list();

 

 

配置批量抓取

在实体类配置文件中,set标签上添加batch-size="10",在查询全部数据后,在根据查询出的数据进行查询时可以进行优化,其中数字10不是固定的,根据数据量而定,数据量越大,数字越大,优化程度越大

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值