Hibernate查询方式_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > Hibernate查询方式

Hibernate查询方式

 2015/3/11 18:32:52  阳阳.com  程序员俱乐部  我要评论(0)
  • 摘要:一、Hibernate的三种查询方式1.HQL(HibernateQueryLanuage)语句,这是类似SQL语句的一种对象化查询语句.2.使用Criteria对象,进行按条件查询(QuerybyCriteria,简称QBC)和按示例查询(QuerybyExample简称QBE).3.生成原生的sql(NativeSQL)语句.二、Criteria的基本使用Java代码1.Transactiontx=session.beginTransaction();2
  • 标签:方式 查询方式 hibernate

?

一、Hibernate的三种查询方式

1.HQL(HibernateQueryLanuage)语句,这是类似SQL语句的一种对象化查询语句.

2.使用Criteria对象,进行按条件查询(QuerybyCriteria,简称QBC)和按示例查询(QuerybyExample简称QBE).

3.生成原生的sql(NativeSQL)语句.

二、Criteria的基本使用

Java代码

1.Transactiontx=session.beginTransaction();

2.Criteriacriteria=session.createCriteria(Testbook.class);

3.List<Testbook>list=criteria.list();

4.tx.commit();

?

查询Testbook中所有的数据,然后返回

三、Criteria接口的核心方法

?

add()增加一个代表查询条件的Criterion对象
addOrder()增加一个代表排序的Criterion对象
createAlias()创建关联查询,为所关联的持久化类建立别名
createCriteria()在相互关联的持久化类之间建立条件约束
setFirstResult()设定要获取的第一条记录的位置
setMaxResults()设定要获取的记录的最大数量
list()获取满足查询条件的记录的集合
uniqueResult()获取满足查询条件的唯一记录

?

四、对查询结果进行排序

Java代码

1.Transactiontx=session.beginTransaction();

2.Criteriacriteria=session.createCriteria(Testbook.class).add(

3.Restrictions.like("name","任%")).add(Restrictions.between("id",1000,1010));

4.criteria.addOrder(Order.desc("id")).addOrder(Order.asc("createdTime"));

5.List<Testbook>list=criteria.list();

6.tx.commit();

?

五、实现分页显示数据

Java代码

1.<spanstyle="font-size:x-small;">Transactiontx=session.beginTransaction();

2.Criteriacriteria=session.createCriteria(Testbook.class).add(

3.Restrictions.like("name","任%"));

4.criteria.addOrder(Order.desc("id"));

5.criteria.setMaxResults(30);

6.criteria.setFirstResult(10);//setFirstResult()从0开始计数

7.List<Testbook>list=criteria.list();

8.tx.commit();</span>

?

?

六、只查询一条记录

Java代码

1.Transactiontx=session.beginTransaction();

2.Criteriacriteria=session.createCriteria(Testbook.class).add(

3.Restrictions.like("name","任%"));

4.criteria.addOrder(Order.desc("id"));

5.criteria.setMaxResults(1);

6.Testbooktb=(Testbook)criteria.uniqueResult();

7.tx.commit();

?

七、Restrictions类

HQL运算符

QBC运算符

含义

=

Restrictions.eq()

等于equal

<>

Restrictions.ne()

不等于notequal

>

Restrictions.gt()

大于greaterthan

>=

Restrictions.ge()

大于等于greaterthanorequal

<

Restrictions.lt()

小于lessthan

<=

Restrictions.le()

小于等于lessthanorequal

isnull

Restrictions.isnull()

等于空值

isnotnull

Restrictions.isNotNull()

非空值

like

Restrictions.like()

字符串模式匹配

and

Restrictions.and()

逻辑与

and

Restrictions.conjunction()

逻辑与

or

Restrictions.or()

逻辑或

or

Restrictions.disjunction()

逻辑或

not

Restrictions.not()

逻辑非

in(列表)

Restrictions.in()

等于列表中的某一个值

notin(列表)

Restrictions.not(Restrictions.in())

不等于列表中任意一个值

betweenxandy

Restrictions.between()

闭区间xy中的任意值

notbetweenxandy

Restrictions.not(Restrictions..between())

小于值X或者大于值y

?

<----------------------------------------------------------------------------------------------------------->

八、条件"或"方式组合查询条件

Java代码

1.Transactiontx=session.beginTransaction();

2.Criteriacriteria=session.createCriteria(Testbook.class);

3.Criterioncriterion1=Restrictions.or(Restrictions.like("name","任%"),

4.Restrictions.between("id",1000,1010));

5.criteria.add(criterion1);

6.List<Testbook>list=criteria.list();

7.tx.commit();

?

?

?

九、使用原生SQL语句设定查询条件

Java代码

1.Transactiontx=session.beginTransaction();

2.Criteriacriteria=session.createCriteria(Testbook.class);

3.criteria.add(Restrictions.sqlRestriction("{alias}.name=?","Narcissus",Hibernate.STRING));

4.List<Testbook>list=criteria.list();

5.tx.commit()

?

十、统计函数查询

Java代码

1.Transactiontx=session.beginTransaction();

2.Criteriacriteria=session.createCriteria(Testbook.class);

3.criteria.setProjection(Projections.max("price"));

4.DoublemaxValue=(Double)criteria.uniqueResult();

5.tx.commit();

6.System.out.println(maxValue);

?

十一、统计函数组合查询条件

Java代码

1.Transactiontx=session.beginTransaction();

2.Criteriacriteria=session.createCriteria(Testbook.class);

3.criteria.setProjection(Projections.max("price"));

4.DoublemaxValue=(Double)criteria.uniqueResult();

5.tx.commit();

6.System.out.println(maxValue);

?

?

十二、获取多个统计函数的值

Java代码

1.Transactiontx=session.beginTransaction();

2.Criteriacriteria=session.createCriteria(Testbook.class);

3.ProjectionListproList=Projections.projectionList();

4.proList.add(Projections.max("price"));

5.proList.add(Projections.min("price"));

6.proList.add(Projections.avg("price"));

7.proList.add(Projections.sum("price"));

8.proList.add(Projections.count("price"));

9.proList.add(Projections.countDistinct("price"));

10.proList.add(Projections.rowCount());

11.criteria.setProjection(proList);

12.Objectvalues[]=(Object[])criteria.uniqueResult();

13.tx.commit();

?

?

?

十三、分组查询

Java代码

1.Transactiontx=session.beginTransaction();

2.Criteriacriteria=session.createCriteria(Testbook.class);

3.criteria.setProjection(Projections.groupProperty("price"));

4.List<Double>list=criteria.list();

5.tx.commit();

?

十四、分组统计

Java代码

1.Transactiontx=session.beginTransaction();

2.Criteriacriteria=session.createCriteria(Testbook.class);

3.ProjectionListproList=Projections.projectionList();

4.proList.add(Projections.rowCount());//商品的个数

5.proList.add(Projections.sum("price"));

6.proList.add(Projections.groupProperty("name"));

7.criteria.setProjection(proList);

8.List<Double>list=criteria.list();

9.tx.commit();

?

?

?

十五、投影查询
在一个表中有很多个字段,投影查询只是查询某一个或多个字段,也称局部查询

?

Java代码

1.Transactiontx=session.beginTransaction();

2.Criteriacriteria=session.createCriteria(Testbook.class);

3.criteria.setProjection(Property.forName("price"));

4.criteria.add(Restrictions.gt("price",newDouble(40.0)))

5.List<Double>list=criteria.list();

6.tx.commit();

?

十六、使用Property类的forName()方法实现分组统计

?

Java代码

1.Transactiontx=session.beginTransaction();

2.Criteriacriteria=session.createCriteria(Testbook.class);

3.ProjectionListproList=Projections.projectionList();

4.proList.add(Projections.forName("price").max());

5.proList.add(Projections.forName("price").min());

6.proList.add(Projections.forName("price").avg());

7.proList.add(Projections.forName("category.id").group().as("c"));

8.criteria.setProjection(proList);

9.criteria.addOrder(Order.desc("c"));

10.List<Object[]>list=criteria.list();

11.tx.commit();

?

十七、使用DetachedCriteria对象实现离线查询

Java代码

1.//在表现层,构造DetachedCriteria对象,保存用户动态的查询条件

2.DetachedCriteriadetchedCriteria=DetachedCriteria.forClass(Testbook.class);

3.detchedCriteria.add(Restrictions.like("name","任%")).add(Restrictions.between("id",newInteger(1),newInteger(10)));

4.detchedCriteria.addOrder(Order.desc("id"));

6.//在业务逻辑层,DetachedCriteria对象与当前的Session对象进行绑定,获取查询结果

7.Sessionsession=HibernateSessionFactoryUtil.getSessionFactory().getCurrentSession();

8.Transactiontx=detchedCriteria.getExecutableCriteria(session);

9.List<Testbook>list=criteria.list();

10.tx.commit();

?

十八、根据示例对象进行查询

?

?

先定义一个模板然后把这个模板的样式传进去,查询,例如这里定义的Testbook中的名字为Narcissus的字段,进行查询,条件可以为一个也可以为多个,对应的就是where中的条件

?

Java代码

1.Testbooktb=newTestbook();

2.tb.setName("Narcissus");

3.Sessionsession=HibernateSessionFactoryUtil.getSessionFactory().getCurrentSession();

4.Transactiontx=session.beginTransaction();

5.Criteriacriteria=session.createCriteria(Testbook.class);

6.Criteria.add(Example.creaate(tb));

7.List<Testbook>list=criteria.list();

8.tx.commit();

?

?

?

发表评论
用户名: 匿名