Hibernate的检索方式
2008-12-13 10:49
330 查看
先来个选择题:
.以下哪些不是Hibernate的检索方式:
A、导航对象图检索
B、OID检索
C、ORM检索
D、QBC检索
E、本地SQL检索
F、HQL检索
-------------------------------------------------------------------------------------------
知道答案不,那就先学习一下
Hibernate中,检索对象的方式有:
1、导航图
根据已经加载的对象,导航到其他对象。
2、OID
根据OID加载对象。
session的load()、get()方法。
3、HQL: 面向对象,支持多态查询。
Hibernate Query Language
session的find()方法,简单查询,静态查询;
Query接口,复杂查询,动态加载参数。关键字不区分大小写。
4、QBC Query By Criteria(包括QBE Query By Example): 面向对象,支持多态查询。
封装基于字符串的sql语句,或封装一个对象,此对象的某些属性的值已经确定。
5、本地查询: Native Query
使用本地数据库的SQL查询语句。
一、Hibernate Query Language
1.特点:
1)、可在查询语句中设定查询条件,可动态绑定参数
2)、支持投影查询
3)、支持分页查询
4)、支持链接查询
5)、支持分组查询,可使用having和group by关键字
6)、内置聚集函数,如: sum()、min()、max()等
7)、可调用用户自定义函数
8)、支持子查询
2.find()方法不支持动态绑定参数,推荐使用Query接口。
3.Query接口支持方法链编程风格: 其setXxx()方法返回自身实例而不是返回void。优点: 代码简洁。
如:
List resultList = session.createQuery("...")
.setString("name", "xxx")
.setInteger("age", 100)
.list;
4.支持对查询结果排序,使用order by关键字:
Query query = session.createQuery("from Book as b order by b.title");
Query query = session.createQuery("from Book as b order by b.title asc, b.price desc");
5.检索单个对象
list()结合uniqueResult()方法
如:
Book book = (Book)session.createQuery("from Book as b order by price")
.setMaxResult(1)
.uniqueResult();//返回一个对象
如过确定结果只包含一个对象,可省略调用setMaxResult(1)方法。
6.动态绑定参数
优点:
1)安全,防止注入,injection。
2)利用底层jdbc的预编译功能,preparedStatement,提高性能。
参数绑定的方式
1)根据名字绑定,推荐方式,可读性好,便于维护。
如:
Query query = session.createQuery("from Book as b where b.title=:title");
query.setString("title","jsp");
2)根据位置绑定,第一个参数位置为0
如:
Query query = session.createQuery("from Book as b where b.title=?");
query.setString(0,"jsp");
7.在映射文件中定义命名查询语句: xxx.hbm.xml
<hibernate-mapping >
<class ...>
<query name="findBookByTitle">
<![CDATA[from Book b where b.title like :title]]>
</query>
</hibernate-mapping>
如:
Query q=session.getNamedQuery("findBookByTitle");
q.setString("title", title);
List l=q.list();
二、Query By Criteria
1.由Criteria接口、Crieterion接口、Expression类组成。
2.Expression类提供用于设定查询条件的静态方法,都返回Criterion实例,每个实例代表一个查询条件。
Criteria的add()方法用于添加查询条件。
3.Criteria接口支持方法链编程,其add()方法返回自身实例。
如:
List resultList = session.createCriteria(Book.class)
.add(Expression.like("title","j%")
.add(Expression.eq("price",new Integer(100))
.list();
4.支持对查询结果排序,使用net.sf.hibernate.expression.Order关键字:
如:
Criteria criteria = session.createCriteria(Book.class);
criteria.addOrder(Order.asc("name"));
List list = criteria.list();
5.检索单个对象
list()结合uniqueResult()方法
如:
Book book = (Book)session.createCriteria(Book.class)
.add(Expression.like("title","j%")
.add(Expression.eq("price",new Integer(100))
.setMaxResult(1)
.uniqueResult();
三、Query By Example
1.先创建一个对象,此对象的某些属性的值已经确定,以这些属性作为条件来检索对象。
如:
Book book = new Book();
book.setTitle("java");
List resultList = session.createCriteria(Book.class)
.add(Example.create(book)
.list();
执行:
select * from BOOKS where name='java'
2.以作为标准的对象的所有不为null的属性作为查询条件。
只支持"="和"like"。
四、SQL
使用Query接口。不推荐。
如:
Query query = session.createSQLQuery(
select {b.*} from BOOKS b where b.TITLE like:title"
);
query.setString("title", "j%");
List list = query.list();
补充:
Query和Criteria接口都支持分页查询。
setFirstResult(int firstResult):设定从哪一个对象开始查询。
setMaxResult(int maxResult):设定一次检索出的对象数,指最大数值。
索引位置从0开始。
.以下哪些不是Hibernate的检索方式:
A、导航对象图检索
B、OID检索
C、ORM检索
D、QBC检索
E、本地SQL检索
F、HQL检索
-------------------------------------------------------------------------------------------
知道答案不,那就先学习一下
Hibernate中,检索对象的方式有:
1、导航图
根据已经加载的对象,导航到其他对象。
2、OID
根据OID加载对象。
session的load()、get()方法。
3、HQL: 面向对象,支持多态查询。
Hibernate Query Language
session的find()方法,简单查询,静态查询;
Query接口,复杂查询,动态加载参数。关键字不区分大小写。
4、QBC Query By Criteria(包括QBE Query By Example): 面向对象,支持多态查询。
封装基于字符串的sql语句,或封装一个对象,此对象的某些属性的值已经确定。
5、本地查询: Native Query
使用本地数据库的SQL查询语句。
一、Hibernate Query Language
1.特点:
1)、可在查询语句中设定查询条件,可动态绑定参数
2)、支持投影查询
3)、支持分页查询
4)、支持链接查询
5)、支持分组查询,可使用having和group by关键字
6)、内置聚集函数,如: sum()、min()、max()等
7)、可调用用户自定义函数
8)、支持子查询
2.find()方法不支持动态绑定参数,推荐使用Query接口。
3.Query接口支持方法链编程风格: 其setXxx()方法返回自身实例而不是返回void。优点: 代码简洁。
如:
List resultList = session.createQuery("...")
.setString("name", "xxx")
.setInteger("age", 100)
.list;
4.支持对查询结果排序,使用order by关键字:
Query query = session.createQuery("from Book as b order by b.title");
Query query = session.createQuery("from Book as b order by b.title asc, b.price desc");
5.检索单个对象
list()结合uniqueResult()方法
如:
Book book = (Book)session.createQuery("from Book as b order by price")
.setMaxResult(1)
.uniqueResult();//返回一个对象
如过确定结果只包含一个对象,可省略调用setMaxResult(1)方法。
6.动态绑定参数
优点:
1)安全,防止注入,injection。
2)利用底层jdbc的预编译功能,preparedStatement,提高性能。
参数绑定的方式
1)根据名字绑定,推荐方式,可读性好,便于维护。
如:
Query query = session.createQuery("from Book as b where b.title=:title");
query.setString("title","jsp");
2)根据位置绑定,第一个参数位置为0
如:
Query query = session.createQuery("from Book as b where b.title=?");
query.setString(0,"jsp");
7.在映射文件中定义命名查询语句: xxx.hbm.xml
<hibernate-mapping >
<class ...>
<query name="findBookByTitle">
<![CDATA[from Book b where b.title like :title]]>
</query>
</hibernate-mapping>
如:
Query q=session.getNamedQuery("findBookByTitle");
q.setString("title", title);
List l=q.list();
二、Query By Criteria
1.由Criteria接口、Crieterion接口、Expression类组成。
2.Expression类提供用于设定查询条件的静态方法,都返回Criterion实例,每个实例代表一个查询条件。
Criteria的add()方法用于添加查询条件。
3.Criteria接口支持方法链编程,其add()方法返回自身实例。
如:
List resultList = session.createCriteria(Book.class)
.add(Expression.like("title","j%")
.add(Expression.eq("price",new Integer(100))
.list();
4.支持对查询结果排序,使用net.sf.hibernate.expression.Order关键字:
如:
Criteria criteria = session.createCriteria(Book.class);
criteria.addOrder(Order.asc("name"));
List list = criteria.list();
5.检索单个对象
list()结合uniqueResult()方法
如:
Book book = (Book)session.createCriteria(Book.class)
.add(Expression.like("title","j%")
.add(Expression.eq("price",new Integer(100))
.setMaxResult(1)
.uniqueResult();
三、Query By Example
1.先创建一个对象,此对象的某些属性的值已经确定,以这些属性作为条件来检索对象。
如:
Book book = new Book();
book.setTitle("java");
List resultList = session.createCriteria(Book.class)
.add(Example.create(book)
.list();
执行:
select * from BOOKS where name='java'
2.以作为标准的对象的所有不为null的属性作为查询条件。
只支持"="和"like"。
四、SQL
使用Query接口。不推荐。
如:
Query query = session.createSQLQuery(
select {b.*} from BOOKS b where b.TITLE like:title"
);
query.setString("title", "j%");
List list = query.list();
补充:
Query和Criteria接口都支持分页查询。
setFirstResult(int firstResult):设定从哪一个对象开始查询。
setMaxResult(int maxResult):设定一次检索出的对象数,指最大数值。
索引位置从0开始。
相关文章推荐
- Hibernate学习之路(十一):hibernate的检索方式(Oracle数据库)
- [原创]java WEB学习笔记90:Hibernate学习之路-- -HQL检索方式,分页查询,命名查询语句,投影查询,报表查询
- Hibernate的检索方式(2)hql
- Hibernate检索方式
- JAVAWEB开发之Hibernate详解(三)——Hibernate的检索方式、抓取策略以及利用二级缓存进行优化、解决数据库事务并发问题
- Hibernate —— HQL、QBC检索方式
- hibernate提供的5种检索数据方式
- Hibernate的检索方式详解(一)
- Java程序员从笨鸟到菜鸟之(六十三)细谈Hibernate(十四)Hibernate三种检索方式详解
- hibernate检索方式——get和load检索方式的区别
- Hibernate检索方式
- Hibernate检索方式的学习2015-11-14
- Hibernate的检索方式
- Hibernate的QBC检索方式
- Hibernate的五种数据检索方式
- Hibernate基础学习(七)—检索方式
- 【知识整理】Hibernate的HQL检索方式使用入门
- Hibernate的其他几种检索方式:
- Hibernate 检索方式
- Hibernate检索方式浅记