Hibernate API的使用(Query、Criteria、SQLQuery对象)
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对象)的更多相关文章
- 五 Hibernate的其他API,Query&Criteria&SQLQuery
Query Criteria SQLQuery Query接口:用于接收HQL,用于查询多个对象 HQL:Hibernate Query Language Query条件查询: Query分页查询: ...
- [原创]java WEB学习笔记77:Hibernate学习之路---Hibernate 版本 helloword 与 解析,.环境搭建,hibernate.cfg.xml文件及参数说明,持久化类,对象-关系映射文件.hbm.xml,Hibernate API (Configuration 类,SessionFactory 接口,Session 接口,Transaction(事务))
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- Hibernate框架 初识 ORM概念 搭建Hibernate环境 Hibernate Api
ORM概念 在学习 Hibernate 之前,我们先来了解ORM 对象关系映射 O, Object 对象 R,Realtion 关系 (关系型数据库: MySQL, Oracle…) M,Ma ...
- hibernate学习之Hibernate API
1. Hibernate Api分类 1)提供访问数据库的操作(如保存,更新,删除,查询)的接口.这些接口包括:Session, Transaction,,Query接口. 2)由于配置Hiberna ...
- 【转】让EntityManager的Query返回Map对象
在JPA 2.0中我们可以使用entityManager.createNativeQuery()来执行原生的SQL语句.但当我们查询结果没有对应实体类时,需使用entityManager.create ...
- Hibernate API申明事务边界
在Hibernate API中,Session和Transaction接口提供了以下声明事务边界的方法: 声明事务的开始边界: Transaction tx = session.beginTransa ...
- hibernate框架学习第三天:对象状态、一级缓存、快照等
对象的状态 瞬时状态: 瞬时对象(TO) 应用程序创建出来的对象,不受H3控制 注意:TO对象不具有OID,一旦为TO赋值OID,那么此时就不是TO 持久化状态:持久化对象(PO) 受H3控制的对象, ...
- Hibernate api 之常见的类(配置类,会话工厂类,会话类)
1:Configuration :配置管理类对象 1.1:config.configure(): 加载主配置文件的方法(hibernate.cfg.xml) ,默认加载src/hibernate.cf ...
- 06-编写Hibernate API编写访问数据库的代码,使用Junit进行测试
用到的注解: @Test:测试方法 @Before:初始化方法. @After:是否资源. 先执行Befere,然后执行Test,最后执行After. 第一步:新建一个Junit目录. 第二步:取名 ...
随机推荐
- django笔记二之数据库
django笔记二之数据库 [同步数据库之前的操作] yum install MySQL-python.x86_64 -y 2)开启数据库服务并创建表 创建数据库设置 为utf8: create da ...
- FCC 成都社区·前端周刊 第 3 期
01. Chrome65 的新功能 CSS Paint API 允许使用编程方式生成图像:Server Timing API允许服务器将时间信息通过HTTP headers传递给浏览器: CSS di ...
- JAVA泛型里面各值代表的意义
Java泛型中的标记符含义: E - Element (在集合中使用,因为集合中存放的是元素) T - Type(Java 类) K - Key(键) V - Value(值) N - Number ...
- Codeforces Round #568 (Div. 2) B. Email from Polycarp
链接: https://codeforces.com/contest/1185/problem/B 题意: Methodius received an email from his friend Po ...
- iOS的UILabel设置多行显示
label.lineBreakMode = NSLineBreakByWordWrapping; label.numberOfLines = ;
- NOIP提高组2016总结
前言 大翻车! 300--: day1 8:30~9:00, 照常看题,思考. 9:00~9:15, 搞定第一题,很水. 9:15~9:45, 思考第二题,我考虑用分深度来处理,想出个个玄学暴力,但刚 ...
- 【NOIP2016提高A组模拟8.17】(雅礼联考day1)总结
考的还ok,暴力分很多,但有点意外的错误. 第一题找规律的题目,推了好久.100分 第二题dp,没想到. 第三题树状数组.比赛上打了个分段,准备拿60分,因为时间不够,没有对拍,其中有分段的20分莫名 ...
- shell练习--PAT题目1008:数组元素循环右移问题 (失败案例,运行超时)
一个数组A中存有N(>)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥)个位置,即将A中的数据由(A0A1⋯AN−1)变换为(AN−M⋯AN−1A ...
- JS中for循环嵌套
for 循环 for语句也是一种前测试循环语句,但它具有在 执行循环之前初始化变量 和 定义循环后要执行的代码的能力 for循环中专门提供了位置来放置循环的三个表达式 定义一个循环需要做实现这三步: ...
- node 的CommonJS的引入
1.CommonJS 每个文件是一个模块,有自己的作用域 引入: