目录

1.查询的类别

按照查询的方式分为面向对象和非面向对象

  • 面向对象

    • HQL查询:面向对象方式,可以跨数据库,但是需要SQL基础。最常用的方式。查询的对象是类和类的属性,不是表和字段!

    • Criteria查询:面向对象方式,可以跨数据库,不需要SQL基础

  • 非面向对象方式

    • SQL查询:非面向对象方式,不可以跨数据库,可以执行复杂的SQL语句

2.实例

上个例子中的App类改造后:

package per.liyue.code.hibernatehello;

import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.criterion.Restrictions;
import org.junit.Test; public class AppQuery {
private static SessionFactory sessionFactory; static {
sessionFactory = new Configuration().configure().buildSessionFactory();
} /*
* HQL查询
*/
@Test
public void HQLDemo() {
Session session = sessionFactory.openSession();
Transaction transcation = session.beginTransaction(); // 面向对象方式:使用SQL方式的查询,但是查询的对象不是表,而是类,查询的条件不是字段,而是类的属性
Query query = session.createQuery("from Employee where empName = '李四'");
List<Employee> list = query.list();
System.out.println("**********使用HQL查询");
System.out.println(list); transcation.commit();
session.close();
sessionFactory.close();
} /*
* Criteria查询
*/
@Test
public void CriteriaDemo() {
Session session = sessionFactory.openSession();
Transaction transcation = session.beginTransaction(); // 面向对象方式:使用Criteria查询,和SQL无关
Criteria criteria = session.createCriteria(Employee.class);
// 条件查询类的属性
criteria.add(Restrictions.eq("empId", 2));
List<Employee> list = criteria.list();
System.out.println("**********使用Criteria查询");
System.out.println(list); transcation.commit();
session.close();
sessionFactory.close();
} /*
* SQL查询
*/
@Test
public void SqlDemo() {
Session session = sessionFactory.openSession();
Transaction transcation = session.beginTransaction(); //非面向对象查询:适合复杂的SQL语句,但是不跨数据库!!!
String sql = "select * from employee as e where e.EmpId = 6";
//如果不加封装,那么查询出来的list不是想要得到的值
//SQLQuery query = session.createSQLQuery(sql);
SQLQuery query = session.createSQLQuery(sql).addEntity(Employee.class);
List list = query.list();
System.out.println("**********使用SQL查询");
System.out.println(list); transcation.commit();
session.close();
sessionFactory.close();
}
}

24.Hibernate-各种类型的查询.md的更多相关文章

  1. [转载]Hibernate如何提升数据库查询的性能

    目录(?)[-] 数据库查询性能的提升也是涉及到开发中的各个阶段在开发中选用正确的查询方法无疑是最基础也最简单的 SQL语句的优化 使用正确的查询方法 使用正确的抓取策略 Hibernate的性能优化 ...

  2. hibernate将本地SQL查询结果封装成对象

    hibernate将本地SQL查询结果封装成对象 不知道大家有没有碰过这种情况,迫于很多情况只能用native SQL来查询(如:复杂统计等),然而使用native查询后,结果会被放到object里, ...

  3. hibernate使用原生SQL查询返回结果集的处理

    今天没事的时候,看到公司框架里有一个用原生SQL写的函数,说实在以前自己也干过这事,但好久都没有用,都忘得差不多了,现在基本都是用的hql语句来查询结果.hibernate中使用createSQLQu ...

  4. 13.hibernate的native sql查询(转自xiaoluo501395377)

    hibernate的native sql查询   在我们的hibernate中,除了我们常用的HQL查询以外,还非常好的支持了原生的SQL查询,那么我们既然使用了hibernate,为什么不都采用hi ...

  5. Hibernate SQLQuery 原生SQL 查询及返回结果集处理-1

    第一篇:官方文档的处理方法,摘自官方 在迁移原先用JDBC/SQL实现的系统,难免需要采用hibernat native sql支持. 1.使用SQLQuery hibernate对原生SQL查询执行 ...

  6. Hibernate学习---单表查询

    我们都知道SQL是非常强大的,为什么这么说呢?相信学过数据库原理的同学们都深有体会,SQL语句变化无穷,好毫不夸张的说可以实现任意符合我们需要的数据库操作,既然前面讲到Hibernate非常强大,所以 ...

  7. Hibernate 的原生 SQL 查询

    Hibernate除了支持HQL查询外,还支持原生SQL查询.         对原生SQL查询执行的控制是通过SQLQuery接口进行的,通过执行Session.createSQLQuery()获取 ...

  8. hibernate的native sql查询

    在我们的hibernate中,除了我们常用的HQL查询以外,还非常好的支持了原生的SQL查询,那么我们既然使用了hibernate,为什么不都采用hibernate推荐的HQL查询语句呢?这是因为HQ ...

  9. Spring Hibernate JPA 联表查询 复杂查询(转)

    今天刷网,才发现: 1)如果想用hibernate注解,是不是一定会用到jpa的? 是.如果hibernate认为jpa的注解够用,就直接用.否则会弄一个自己的出来作为补充. 2)jpa和hibern ...

随机推荐

  1. Ext.net combobox 的disabled

    C#:禁用combobox this.ComboBox7.Disabled =true; C#:隐藏 <ext:RadioGroup ID="RadioG_sfzg" run ...

  2. spark 2.0.0集群安装与hive on spark配置

    1. 环境准备: JDK1.8 hive 2.3.4 hadoop 2.7.3 hbase 1.3.3 scala 2.11.12 mysql5.7 2. 下载spark2.0.0 cd /home/ ...

  3. (转)Java调用Weservice

    原文地址:http://www.cnblogs.com/jiangxu1989/p/6491483.html https://www.cnblogs.com/neughj/p/5145630.html ...

  4. tips:可变参数列表

    tips:可变参数列表! 先来看看以往我们要传递许多参数时是怎么做的: java: public static void main(String []args){} c: int main(int a ...

  5. Windows server 2008 R2充当路由器实现网络的互联

    1.路由器的工作原理 当IP子网中的一台主机发送IP分组给同一IP子网的另一台主机时,它将直接把IP分组送到网络上,对方就能收到.而要送给不同IP子网上的主机时,它要 选择一个能到达目的子网上的路由器 ...

  6. css居中问题:水平居中、垂直居中

    亲们支持我的新博客哦==>原文地址 ) 本篇文章所有演示代码下载==>github/calamus0427 css水平垂直居中是面试时候遇到最多的问题,我总结一下大部分解决方案 水平居中: ...

  7. canvas实现刮刮乐

    效果展示 源码下载

  8. android开发 RecyclerView 列表布局

    创建一个一行的自定义布局 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns ...

  9. uva-387-暴力枚举

    题意: 给你一些小方块,问是不是能组成一个4X4的大方块,所有方块全部要使用,裸枚举 #include <iostream> #include <stdio.h> #inclu ...

  10. mezzanine的page表

    class Orderable(with_metaclass(OrderableBase, models.Model)): """ Abstract model that ...