您的位置:首页 > 其它

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

2017-02-10 15:56 323 查看

对象导航查询

根据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不是固定的,根据数据量而定,数据量越大,数字越大,优化程度越大
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: