目录

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. 电商系统架构总结2(Redis)

    二  Redis缓存 考虑到将来服务器的升级扩展,使用redis代替.net内置缓存是比较理想的选择.redis是非常成熟好用的缓存系统,安装配置非常简单,直接上官网下载安装包 安装启动就行了. 1 ...

  2. RxJava+Retrofit+OkHttp,一步一步封装网络框架;

    使用RxJava+Retrofit+OkHttp,首先在build.gradle添加: compile 'com.squareup.okhttp3:okhttp:3.8.1' compile 'com ...

  3. 「NOI2018」屠龙勇士(CRT)

    /* 首先杀每条龙用到的刀是能够确定的, 然后我们便得到了许多形如 ai - x * atki | pi的方程 而且限制了x的最小值 那么exgcd解出来就好了 之后就是扩展crt合并了 因为全T调了 ...

  4. 模拟select控件,css模拟下拉

    <!DOCTYPE html > <head>     <meta http-equiv="Content-Type" content="t ...

  5. Windows向虚拟机Linux传输文件方法

    在Windows中装了个centOS,进行文件操作时,把mv写成了rm,然后就悲剧了.. 赶紧从网上找来文件的具体内容,然后由Windows向Linux挂载共享文件夹. 具体做法: 在Windows中 ...

  6. day6作业(元组,字典,集合)

    默写: 1.元组 字典 集合 列表 各自的特点 2.字典添加 删除 修改 循环 必做: 1.餐厅提供了五种不同的菜,使用元组来存储他们,并循环打印出所有菜名,要求用户输入新加的菜名,加入到菜单中,并重 ...

  7. c# 枚举的定义,枚举的用法,获取枚举值

    1.定义枚举类型 public enum Test { 男 = , 女 = } 2.获取枚举值 public void EnumsAction() { var s = Test.男;//男 var a ...

  8. CentOS7中替换安装python3.7.0

    python3.7的安装包可从官网下载上传到主机,也可以用wget直接下载. [root@xxx ~]# cd /usr/local/src/[root@xxx src]# wget https:// ...

  9. Oracle Service Bus (OSB) 12c 的配置安装

    Oracle Service Bus (OSB) 12c 的配置安装 1.OSB配置环境: Oracle Database Oracle Fusion Middleware Infrastructur ...

  10. hello-R

    #print start { #: is array :) { print(:i) } } #print end #if start { x<- ) print(x) else print(&q ...