hibernate教程--检索方式详解(hql,sql,QBC)

栏目: Hibernate · 发布时间: 6年前

内容简介:hibernate教程--检索方式详解(hql,sql,QBC)

1.1 Hibernate的检索方式

1.1.1 Hibernate的检索方式:

检索方式:查询的方式:

导航对象图检索方式:  根据已经加载的对象导航到其他对象

* Customer customer = (Customer)session.get(Customer.class,1);

* customer.getOrders();// 获得到客户的订单

OID 检索方式:  按照对象的 OID 来检索对象

* get()/load();方法进行检索.

HQL 检索方式: 使用面向对象的 HQL 查询语言

* Query query = session.createQuery(“HQL”);

QBC 检索方式:使用 QBC(Query By Criteria) API 来检索对象. 这种 API 封装了基于字符串形式的查询语句, 提供了更加面向对象的查询接口.

* Criteria criteria = session.createCriteria(Customer.class);

本地 SQL 检索方式: 使用本地数据库的 SQL 查询语句

* SQLQuery query = session.createSQLQuery(“SQL”);

1.1.2 HQL:

HQL:Hibernate Query Language:

* 特点:

* 面向对象的查询:

* 支持方法链编程:

* 使用:

1.查询所有记录:

List<Customer> list = session.createQuery("from Customer").list();

for (Customer customer : list) {

System.out.println(customer);

}

2.查询使用别名:

// 使用别名

// 别名as可以省略

/*  List<Customer> list =

  session.createQuery("from Customer  c").list();

  System.out.println(list);*/

 

 

// 使用别名:带参数

/*List<Customer> list = session

.createQuery("from Customer as c where c.cname = ?")

.setString(0, "小沈").list();

System.out.println(list);*/

// 不支持 select * from Customer写法.可以写成 select 别名 from Customer as 别名;

List<Customer> list = session.createQuery("select c from Customer c").list();

System.out.println(list);

3.排序:

List<Customer> list = session.createQuery(

"from Customer c order by c.id desc").list();

for (Customer customer : list) {

System.out.println(customer);

}

4.分页查询:

Query query = session.createQuery("from Order");

query.setFirstResult(20);

query.setMaxResults(10);

List<Order> list = query.list();

for (Order order : list) {

System.out.println(order);

}

5.单个对象查询:

Customer customer = (Customer) session

.createQuery("from Customer where cname = ?")

.setString(0, "小明").uniqueResult();

System.out.println(customer);

6.参数绑定:

// 1.使用?号方式绑定

/*Query query = session.createQuery("from Customer where cname = ?");

query.setString(0, "小沈");

List<Customer> list = query.list();

System.out.println(list);*/

/*Query query = session.createQuery("from Customer where cname = ? and cid =?");

query.setString(0, "小沈");

query.setInteger(1,3);

List<Customer> list = query.list();

System.out.println(list);*/

// 2.使用名称的方式绑定

Query query = session.createQuery("from Customer where cname=:name and cid=:id");

query.setString("name", "小沈");

query.setInteger("id", 3);

List<Customer> list = query.list();

System.out.println(list);

 

// 3.绑定实体

List<Order> list = session

.createQuery("from Order o where o.customer = ?")

.setEntity(0, customer).list();

for (Order order : list) {

System.out.println(order);

}

7.投影操作:

// 查询客户的名称:

/*

 * List<Object> list = session.createQuery(

 * "select c.cname from Customer c").list(); System.out.println(list);

 */

 

/*

 * List<Object[]> list = session.createQuery(

 * "select c.cid,c.cname from Customer c").list(); for (Object[] objects

 * : list) { System.out.println(Arrays.toString(objects)); }

 */

 

List<Customer> list = session.createQuery(

"select new Customer(cname) from Customer").list();

System.out.println(list);

8.模糊查询:

Query query = session.createQuery("from Customer where cname like ?");

query.setParameter(0, "小%");

List<Customer> list = query.list();

System.out.println(list);

SQL多表查询:

* 连接:

* 交叉连接:

* select * from A,B;

* 内连接:查询的是两个表的交集!

* select * from A inner join B on A.字段 = B.字段;

* 隐式内连接:

* select * from A,B where A.字段 = B.字段;

* 外连接:

* 左外连接:

* select * from A left outer join B on  A.字段 = B.字段;

* 右外连接:

* select * from A right outer join B on A.字段 = B.字段;

HQL多表的查询:

* 连接:

* 交叉连接:

* 内连接:

* 隐式内连接:

* 迫切内连接:

* 左外连接:

* 迫切左外连接:

* 右外连接:

* HQL的内连接和迫切内连接区别:

* 内连接查询 :将数据封装一个List<Object[]>中.

* 迫切内连接 :将数据封装一个List<Customer>中.但是迫切内连接,得到会有重复记录 ,需要使用distinct排重.

1.1.3 QBC:

1.查询所有记录:

List<Customer> list = session.createCriteria(Customer.class).list();

for (Customer customer : list) {

System.out.println(customer);

}

2.排序:

List<Customer> list = session.createCriteria(Customer.class)

.addOrder(org.hibernate.criterion.Order.desc("id")).list();

for (Customer customer : list) {

System.out.println(customer);

}

3.分页:

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

criteria.setFirstResult(10);

criteria.setMaxResults(10);

List<Order> list = criteria.list();

for (Order order : list) {

System.out.println(order);

}

4.获取单个对象:

Customer customer = (Customer) session.createCriteria(Customer.class)

.add(Restrictions.eq("cname", "小明")).uniqueResult();

System.out.println(customer);

5.带参数的查询:

/*

 * List<Customer> list = session.createCriteria(Customer.class)

 * .add(Restrictions.eq("cname", "小明")).list();

 * System.out.println(list);

 */

 

List<Customer> list = session.createCriteria(Customer.class)

.add(Restrictions.eq("cname", "小明"))

.add(Restrictions.eq("cid", 2)).list();

System.out.println(list);

6.模糊查询:

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

criteria.add(Restrictions.like("cname", "大%"));

List<Customer> list = criteria.list();

System.out.println(list);

1.1.4 SQL:

1.SQL语句查询所有记录:

List<Object[]> list = session.createSQLQuery("select * from customer").list();

for (Object[] objects : list) {

System.out.println(Arrays.toString(objects));

}

 

List<Customer> list = session.createSQLQuery("select * from customer")

.addEntity(Customer.class).list();

for (Customer customer : list) {

System.out.println(customer);

}

以上所述就是小编给大家介绍的《hibernate教程--检索方式详解(hql,sql,QBC)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

C++编程思想(第1卷)

C++编程思想(第1卷)

[美] Bruce Eckel / 刘宗田、袁兆山、潘秋菱 / 机械工业出版社 / 2002-9 / 59.00元

《C++编程思考》第2版与第1版相比,在章节安排上有以下改变。增加了两章:“对象的创建与使用”和“C++中的C”,前者与“对象导言”实际上是第1版“对象的演化”一章的彻底重写,增加了近几年面向对象方法和编程方法的最瓣研究与实践的有效成果,后者的添加使不熟悉C的读者可以直接使用这本书。删去了四章:“输入输出流介绍”、“多重继承”、“异常处理”和“运行时类型识别”,删去的内容属于C++中较复杂的主题,......一起来看看 《C++编程思想(第1卷)》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具