Query对象

我们使用Query对象不需要编写SQL语句,但是得写HQL语句。

HQL:Hibernate Query Language;Hibernate提供的查询语言,和SQL语句很相似。

HQL和SQL的区别:

  使用SQL操作的是表和表字段;  

  使用HQL操作的是实体类和实体类的属性;

查询所有记录的HQL:from 实体类名称

Query对象的使用:

步骤一:创建Query对象;

步骤二:调用Query对象里面的方法得到结果;

代码演示:

@Test

//使用Query对象

public void testQuery(){

SessionFactory sessionFactory = null;

Session session = null;

Transaction transaction = null;

try {

sessionFactory = HibernateUtil.getSessionFactory();

session = sessionFactory.openSession();

//开启事务

transaction = session.beginTransaction();

//1 创建Query对象

//编写HQL语句

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

//2 调用Query对象里面的方法得到结果

List<User> userList = query.list();

for (User user : userList) {

System.out.println(user);

}

//提交事务

transaction.commit();

} catch (Exception e) {

// TODO: handle exception

e.printStackTrace();

transaction.rollback();

}finally{

session.close();

sessionFactory.close();

}

}

Hibernate:

select

user0_.ID as ID1_0_,

user0_.USERNAME as USERNAME2_0_,

user0_.PASSWORD as PASSWORD3_0_,

user0_.ADDRESS as ADDRESS4_0_

from

USER user0_

User [id=1, username=yyyyyy, password=null, address=null]

User [id=3, username=uc, password=up, address=tw]

User [id=4, username=qqqqq, password=111111, address=shanxi]

User [id=7, username=nihao111, password=nihaopwd111, address=U.S.A111]

Criteria对象

说明:使用这个对象也可以实现查询操作,但是使用这个对象的时候,不需要编写HQL语句,直接调用方法就可以了。

使用过程和Query很相似:

过程如下:

  • 创建Criteria对象;
  • 调用对象里面的方法得到结果;

代码演示:

//1 创建Criteria对象

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

//2 调用Query对象里面的方法得到结果

List<User> userList = criteria.list();

for (User user : userList) {

System.out.println(user);

}

Hibernate:

select

this_.ID as ID1_0_0_,

this_.USERNAME as USERNAME2_0_0_,

this_.PASSWORD as PASSWORD3_0_0_,

this_.ADDRESS as ADDRESS4_0_0_

from

USER this_

User [id=1, username=yyyyyy, password=null, address=null]

User [id=3, username=uc, password=up, address=tw]

User [id=4, username=qqqqq, password=111111, address=shanxi]

User [id=7, username=nihao111, password=nihaopwd111, address=U.S.A111]

SQLQuery对象

使用Hibernate的时候,也可以调用底层SQL语句来实现。

实现过程:

1、创建SQLQuery对象;

2、调用对象的方法实现;

代码演示:

SQLQuery sqlQuery = session.createSQLQuery("select * from user");

//2 调用Query对象里面的方法得到结果

//返回的list集合,默认是数组结构

List<Object[]> userList = sqlQuery.list();

for (Object[] userObject : userList) {

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

}

Hibernate:

select

*

from

user

[1, yyyyyy, null, null]

[3, uc, up, tw]

[4, qqqqq, 111111, shanxi]

[7, nihao111, nihaopwd111, U.S.A111]

解决问题:返回list中的每部分是对象形式

//1 创建SQLQuery对象

SQLQuery sqlQuery = session.createSQLQuery("select * from user");

sqlQuery.addEntity(User.class);

//2 调用Query对象里面的方法得到结果

//返回的list集合,默认是数组结构

List<User> userList = sqlQuery.list();

for (User userObject : userList) {

System.out.println(userObject);

}

Hibernate:

select

*

from

user

User [id=1, username=yyyyyy, password=null, address=null]

User [id=3, username=uc, password=up, address=tw]

User [id=4, username=qqqqq, password=111111, address=shanxi]

User [id=7, username=nihao111, password=nihaopwd111, address=U.S.A111]

Hibernate API的使用(Query、Criteria、SQLQuery对象)的更多相关文章

  1. 五 Hibernate的其他API,Query&Criteria&SQLQuery

    Query Criteria SQLQuery Query接口:用于接收HQL,用于查询多个对象 HQL:Hibernate Query Language  Query条件查询: Query分页查询: ...

  2. [原创]java WEB学习笔记77:Hibernate学习之路---Hibernate 版本 helloword 与 解析,.环境搭建,hibernate.cfg.xml文件及参数说明,持久化类,对象-关系映射文件.hbm.xml,Hibernate API (Configuration 类,SessionFactory 接口,Session 接口,Transaction(事务))

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  3. Hibernate框架 初识 ORM概念 搭建Hibernate环境 Hibernate Api

    ORM概念 在学习 Hibernate 之前,我们先来了解ORM   对象关系映射 O, Object  对象 R,Realtion 关系  (关系型数据库: MySQL, Oracle…) M,Ma ...

  4. hibernate学习之Hibernate API

    1. Hibernate Api分类 1)提供访问数据库的操作(如保存,更新,删除,查询)的接口.这些接口包括:Session, Transaction,,Query接口. 2)由于配置Hiberna ...

  5. 【转】让EntityManager的Query返回Map对象

    在JPA 2.0中我们可以使用entityManager.createNativeQuery()来执行原生的SQL语句.但当我们查询结果没有对应实体类时,需使用entityManager.create ...

  6. Hibernate API申明事务边界

    在Hibernate API中,Session和Transaction接口提供了以下声明事务边界的方法: 声明事务的开始边界: Transaction tx = session.beginTransa ...

  7. hibernate框架学习第三天:对象状态、一级缓存、快照等

    对象的状态 瞬时状态: 瞬时对象(TO) 应用程序创建出来的对象,不受H3控制 注意:TO对象不具有OID,一旦为TO赋值OID,那么此时就不是TO 持久化状态:持久化对象(PO) 受H3控制的对象, ...

  8. Hibernate api 之常见的类(配置类,会话工厂类,会话类)

    1:Configuration :配置管理类对象 1.1:config.configure(): 加载主配置文件的方法(hibernate.cfg.xml) ,默认加载src/hibernate.cf ...

  9. 06-编写Hibernate API编写访问数据库的代码,使用Junit进行测试

    用到的注解: @Test:测试方法 @Before:初始化方法. @After:是否资源. 先执行Befere,然后执行Test,最后执行After. 第一步:新建一个Junit目录. 第二步:取名 ...

随机推荐

  1. Linux练习例题(附答案)

    1.通过ps命令的两种选项形式查看进程信息 2.通过top命令查看进程 3.通过pgrep命令查看sshd服务的进程号 4.查看系统进程树 5.使dd if=/dev/zero of=/root/fi ...

  2. 019-zabbix数据库表详解

    https://www.cnblogs.com/yaoyaojcy/p/10367945.html 1. 查看目前zabbix系统所有数据表: 1 2 3 4 5 6 7 8 9 10 11 12 1 ...

  3. PAT Basic 1067 试密码 (20 分)

    当你试图登录某个系统却忘了密码时,系统一般只会允许你尝试有限多次,当超出允许次数时,账号就会被锁死.本题就请你实现这个小功能. 输入格式: 输入在第一行给出一个密码(长度不超过 20 的.不包含空格. ...

  4. 批量修改zencart产品价格、原价、特价、产品属性价格

    批量修改zencart商品价格无非只有下面几种情况: 一 在原来基础上批量调高一定比例 二 将原来的价格批量换成一个新的价格 针对第一种情况的话,网上很多人已经给出了解决办法: 利用SQL语句批量修改 ...

  5. SpringFramework中的BeanWrapper丶PropertyEditor

    BeanWrapper是org.springframework.beans包下的一个借口,对应的实现类为BeanWrapperImpl,提供对应的get/set方法,并且设置属性的可读性和可写性. p ...

  6. IntelliJ IDEA设置项目和properties文件编码为UTF-8

    https://blog.csdn.net/u012430402/article/de IntelliJ IDEA设置项目和properties文件编码为UTF-8   tails/79633245

  7. 【HDU3308】LCIS

    题目大意:维护一个长度为 N 的序列,支持单点修改,区间查询最长连续上升子序列的长度. 题解: 线段树维护一段区间左端点开始的 LCIS 长度,右端点开始的 LCIS 长度以及区间最优解.考虑进行合并 ...

  8. ZROI 19.07.31 AB班ACM

    写在前面:非常感谢cjc和djh两位神仙带我,非常感谢他们给了我一次躺赢的机会. 虽然我被硬点成了代码手,但我写的基本每次都有一堆罚时.然而djh爷全部1A,tql. 题目按照一血时间升序,大致符合难 ...

  9. react axios 跨域问题

    周末又是补充知识点的时候了,用了react axios 跨越问题,貌似是要比vue 稍微麻烦一点 它请求http好像是没有问题的,但是https还是有跨域问题的, 我用的刚好是create-react ...

  10. day_05 运算符 if和while的使用

    运算符: 1)算术运算符 + - * / %(取余) //(地板除,取整)**(幂运算) ,返回一个值 2)比较运算符 3) > >= < <= ==(比较值是否相等) !=( ...