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

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

内容简介: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);

}

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

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

Pro Git (Second Edition)

Pro Git (Second Edition)

Scott Chacon、Ben Straub / Apress / 2014-11-9 / USD 59.99

Scott Chacon is a cofounder and the CIO of GitHub and is also the maintainer of the Git homepage ( git-scm.com ) . Scott has presented at dozens of conferences around the world on Git, GitHub and the ......一起来看看 《Pro Git (Second Edition)》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

MD5 加密
MD5 加密

MD5 加密工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试